Заголовок этого поста — прямая отсылка к диаграмме «Времена задержек, которые должен знать каждый программист». В настоящее время есть несколько версий этой диаграммы, и трудно установить оригинального автора. Некоторые говорят, что это Джефф Дин.
Если вы работаете над проектом, который должен достичь большого масштаба, необходимо сбалансировать несколько проблем. Какие предположения мы делаем и как их подтвердить? Как быстро выйти на рынок? Будет ли наш дизайн поддерживать ожидаемый масштаб?
Один из вопросов масштабирования — стоимость инфраструктуры. Облачные провайдеры позволяют создавать тысячи процессоров и размещать терабайты данных одним щелчком мыши. Но это стоит дорого, и то, что незначительно для нескольких тысяч пользователей, может стать огромной дырой в бюджете, когда вы выйдете на миллионы пользователей.
В этой статье я перечислю некоторые справочные цифры, которые полезно иметь в виду при рассмотрении архитектуры. Эти цифры не предназначены для точной оценки бюджета. Они помогают определить, есть ли смысл у вашего дизайна или он выйдет за рамки того, что вы можете себе позволить. Поэтому рассмотрим порядки величин и относительные значения, а не абсолютные значения.
Также учтите, что ваша компания может получать скидки от AWS, и это может иметь огромное значение.
Какова нынче стоимость CPU? Через замечательный интерфейс ec2instances.info я получил медианные цены vCPU.
Вы можете получить исходные данные с репозитория Github. Я их скопировал и обработал питоновским скриптом, который тоже взял на Github. Все цены указаны для региона eu-west-1.
Я оценил спотовые цены по словам различных пользователей. Так как цены меняются в течение дня, я не смог найти надёжный источник данных.
AWS представляет вычислительную мощность своих машин в Elastic Compute Units, а 4 ECU более-менее соответствуют мощности современного процессора. Таким образом, цены выше показаны для одного процессора или ядра, а не одного инстанса.
Вот цена 1 ECU в долларах в час во всех типах инстансов, которые я оценил:
И вот как цены по запросу сравниваются с одно- и трёхлетним бронированием (авансовые платежи):
Итак, вы хотите низкую задержку, высокую пропускную способность и планируете хранить всё в Redis? Тогда поверх этих расходов на CPU нужно будет заплатить за RAM.
Я использовал тот же подход для получения медианной цены 1 ГБ оперативной памяти на EC2. Elasticache примерно в два раза дороже on-demand, но цены довольно быстро падают в зарезервированных инстансах.
Хотя это чистая стоимость хранения, также нужно посмотреть на шаблоны использования ваших данных. Сколько процессора нужно для круглосуточной работы в памяти 24/7?
То же самое для S3: сколько вы будете платить за запросы на чтение/запись? Я видел рабочие нагрузки, где стоимость хранения на S3 была незначительной, но стоимость записи большого количества объектов в S3 заставила команду написать собственную файловую систему поверх S3.
Несколько комментариев на HackerNews указали, что я упустил расходы на передачу. Действительно, если вы предоставляете данные конечным пользователям или нужна межрегиональная репликация, нужно учитывать эти затраты.
Если вы работаете над проектом, который должен достичь большого масштаба, необходимо сбалансировать несколько проблем. Какие предположения мы делаем и как их подтвердить? Как быстро выйти на рынок? Будет ли наш дизайн поддерживать ожидаемый масштаб?
Один из вопросов масштабирования — стоимость инфраструктуры. Облачные провайдеры позволяют создавать тысячи процессоров и размещать терабайты данных одним щелчком мыши. Но это стоит дорого, и то, что незначительно для нескольких тысяч пользователей, может стать огромной дырой в бюджете, когда вы выйдете на миллионы пользователей.
В этой статье я перечислю некоторые справочные цифры, которые полезно иметь в виду при рассмотрении архитектуры. Эти цифры не предназначены для точной оценки бюджета. Они помогают определить, есть ли смысл у вашего дизайна или он выйдет за рамки того, что вы можете себе позволить. Поэтому рассмотрим порядки величин и относительные значения, а не абсолютные значения.
Также учтите, что ваша компания может получать скидки от AWS, и это может иметь огромное значение.
Вычисления
Какова нынче стоимость CPU? Через замечательный интерфейс ec2instances.info я получил медианные цены vCPU.
Вы можете получить исходные данные с репозитория Github. Я их скопировал и обработал питоновским скриптом, который тоже взял на Github. Все цены указаны для региона eu-west-1.
Медианная месячная цена | |
---|---|
1 современный vCPU (4 AWS ECUs) | $58/месяц |
С 1 годом конвертируемой резервации | $43/месяц |
С 3 годами конвертируемой резервации | $30/месяц |
Со спотовой ценой (ориентировочно) | $30/месяц |
Я оценил спотовые цены по словам различных пользователей. Так как цены меняются в течение дня, я не смог найти надёжный источник данных.
AWS представляет вычислительную мощность своих машин в Elastic Compute Units, а 4 ECU более-менее соответствуют мощности современного процессора. Таким образом, цены выше показаны для одного процессора или ядра, а не одного инстанса.
Вот цена 1 ECU в долларах в час во всех типах инстансов, которые я оценил:
И вот как цены по запросу сравниваются с одно- и трёхлетним бронированием (авансовые платежи):
Хранение
Итак, вы хотите низкую задержку, высокую пропускную способность и планируете хранить всё в Redis? Тогда поверх этих расходов на CPU нужно будет заплатить за RAM.
Я использовал тот же подход для получения медианной цены 1 ГБ оперативной памяти на EC2. Elasticache примерно в два раза дороже on-demand, но цены довольно быстро падают в зарезервированных инстансах.
Медианная месячная цена | |
---|---|
1 ГБ RAM | $10/месяц |
1 ГБ RAM при годичном резервирования | $8/месяц |
1 ГБ RAM при трёхлетнем резервировании | $5/месяц |
SSD | $0,11/месяц |
HDD | $0,05/месяц |
S3 | $0,02/месяц |
S3 Glacier | $0,004/месяц |
Хотя это чистая стоимость хранения, также нужно посмотреть на шаблоны использования ваших данных. Сколько процессора нужно для круглосуточной работы в памяти 24/7?
То же самое для S3: сколько вы будете платить за запросы на чтение/запись? Я видел рабочие нагрузки, где стоимость хранения на S3 была незначительной, но стоимость записи большого количества объектов в S3 заставила команду написать собственную файловую систему поверх S3.
Передача
Несколько комментариев на HackerNews указали, что я упустил расходы на передачу. Действительно, если вы предоставляете данные конечным пользователям или нужна межрегиональная репликация, нужно учитывать эти затраты.
Тип передачи данных | Стоимость передачи 1 ГБ |
---|---|
EU/US регион в любой другой регион | $0,02/ГБ |
APAC регион в любой другой регион | $0,09/ГБ |
EU/US регион в Интернет | $0,05/ГБ |
APAC регион в Интернет | $0,08/ГБ |
Между двумя AZ одного региона | $0,01/ГБ |
Внутри одной AZ | Бесплатно |