title: Алекс Сюй, «System Design. Подготовка к сложному интервью» (Vol. 1, рус. изд.) — глава 2: Приблизительные оценки source: materials/System Design. Подготовка к сложному интервью.pdf, стр. 40–45 конспект: TASK-45.38, извлечено pymupdf 2026-09-17; ниже полный «грязный» текст главы + выжимка статус: выжимка и перенос в knowledge-base.md / methodology.md / classic-designs.md — см. _map.md
Глава 2. Приблизительные оценки
Выжимка
Инструменты прикидки (скелет каждой оценки на секции):
- Степени двойки: 2^10 ≈ 1 тыс., 2^20 ≈ 1 млн, 2^30 ≈ 1 млрд, 2^40 ≈ 1 трлн, 2^50 ≈ 1 квадр.
- Latency-числа (от Ютдейла/Дина): L1 0.5 нс → RAM 100 нс → SSD random read 150 мкс → HDD seek 10 мс → через океан 150 мс.
- Доступность: 99 % = 3.65 дня/год простоя; 99.9 % = 8.76 ч; 99.99 % = 52 мин; 99.999 % = 5 мин.
- Пример Twitter: 100 млн DAU × 2 твита/день ≈ 2300–3500 QPS запись; медиа 30 ТБ/день; 5 лет хранения ≈ 55 ПБ.
Правила гигиены оценок: округлять до круглых чисел (не 11.64 МБ, а 10 МБ); записывать допущения вслух; всегда подписывать единицы (KB = килобайт, Kb = килобит); проверять размерность формулы.
Перенос: KB §1.3 (таблица nines), KB §2.5 (гигиена + пример Twitter).
Полный текст (грязная выгрузка)
2 ПРИБЛИЗИТЕЛЬНЫЕ ОЦЕНКИ В ходе интервью по проектированию ИТ-систем претендента иногда просят «на коленке» оценить емкость или требования к производительности систе мы. Согласно Джеффу Дину, старшему сотруднику Google, «наколеночные вычисления — это оценки, основанные на мысленных экспериментах и ти пичных показателях производительности, которые дают хорошее представ ление о том, какие архитектуры соответствуют вашим требованиям» [1]. Для эффективного выведения приблизительных оценок нужно хорошо разбираться в основах масштабирования. Вы должны уверенно владеть следующими концепциями: степень двойки [2], показатели латентности, которые должен знать любой программист, и показатели доступности. СТЕПЕНЬ ДВОЙКИ В распределенных системах данные могут достигать огромных размеров, но все вычисления сводятся к элементарным свойствам. Чтобы получить правильный результат, нужно обязательно знать объем данных, используя вторую степень. Байт — это последовательность из 8 бит. Символ ASCII занимает в памяти один байт (8 бит). В табл. 2.1 перечислены единицы измерения данных. Таблица 2.1 Степень Примерное значение Полное название Сокращенное обозначение 10 1 тысяча 1 килобайт 1 Кб 20 1 миллион 1 мегабайт 1 Мб 30 1 миллиард 1 гигабайт 1 Гб 40 1 триллион 1 терабайт 1 Тб 50 1 квадрильон 1 петабайт 1 Пб
Приблизительные оценки 41 ПОКАЗАТЕЛИ ЛАТЕНТНОСТИ, КОТОРЫЕ ДОЛЖЕН ЗНАТЬ ЛЮБОЙ ПРОГРАММИСТ В 2010 году доктор Дин из Google поделился данными о продолжи тельности типичных компьютерных операций [1]. Некоторые из этих показателей потеряли актуальность в связи с повышением производи тельности компьютеров. Но они по-прежнему должны давать хорошее представление о том, насколько быстрыми или медленными являются те или иные операции. Таблица 2.2 Название операции Время Обращение к кэшу L1 0,5 нс Ошибочное предсказание перехода 5 нс Обращение к кэшу L2 7 нс Блокирование/разблокирование мьютекса 100 нс Обращение к основной памяти 100 нс Сжатие 1 Кб с помощью Zippy 10 000 нс = 10 мкс Отправка 2 Кб по сети 1 Гбит/с 20 000 нс = 20 мкс Последовательное чтение из памяти 1 Мб 250 000 нс = 250 мкс Перемещение пакета туда и обратно внутри одного ЦОД 500 000 нс = 500 мкс Время поиска по диску 10 000 000 нс = 10 мс Последовательное чтение 1 Мб из сети 10 000 000 нс = 10 мс Последовательное чтение 1 Мб с диска 30 000 000 нс = 30 мс Передача пакета из Калифорнии в Нидерланды и обратно 150 000 000 нс = 150 мс Обозначения: нс = наносекунда, мкс = микросекунда, мс = миллисекунда 1 нс = 10^-9 секунд 1 мкс = 10^-6 секунд = 1000 нс 1 мс = 10^-3 секунд = 1000 мкс = 1 000 000 нс
42 ГЛАВА 2 Один разработчик ПО из Google написал утилиту для визуализации по казателей, опубликованных доктором Дином. Помимо прочего, она делает поправку на современные реалии. На рис. 2.1 даны визуализированные показатели латентности по состоянию на 2020 год (источник данных: справочный материал [3]). Рис. 2.1 Проанализировав цифры, представленные на рис. 2.1, мы можем сделать следующие выводы:
память быстрая, а диск медленный;
по возможности следует избегать поиска по диску;
простые алгоритмы сжатия отличаются высокой скоростью;
Приблизительные оценки 43
прежде чем отправлять данные по интернету, их по возможности нужно сжимать;
центры обработки данных обычно находятся в разных регионах, и передача информации между ними занимает время. ПОКАЗАТЕЛИ ДОСТУПНОСТИ Высокая доступность — это способность системы долго и непрерывно находиться в рабочем состоянии. Она измеряется в процентах. 100 % означает, что сервис никогда не простаивает. У большинства сервисов доступность варьируется от 99 % и 100 %. Поставщики сервисов часто используют такой термин, как соглашение об уровне услуг (service level agreement, SLA). Это соглашение между вами (поставщиком) и вашим клиентом, которое официально определяет уровень беспрерывной работы вашего сервиса. Облачные провайдеры Amazon [4], Google [5] и Microsoft [6] предлагают SLA от 99,9 % и выше. Время беспрерывной работы обычно измеряется в девятках. Чем больше девяток, тем лучше. Как видно из табл. 2.3, количество девяток соответ ствует ожидаемому времени простоя системы. Таблица 2.3 Доступность Суточный простой Недельный простой Месячный простой Годичный простой 99 % 14,40 минуты 1,68 часа 7,31 часа 3,65 дня 99,9 % 1,44 минуты 10,08 минуты 43,83 минуты 8,77 часа 99,99 % 8,64 секунды 1,01 минуты 4,38 минуты 52,60 минуты 99,999 % 864,00 миллисекунды 6,05 секунды 26,30 секунды 5,26 минуты 99,9999 % 86,40 миллисекунды 604,80 миллисекунды 2,63 секунды 31,56 секунды ПРИМЕР: ОЦЕНКА ТРЕБОВАНИЙ К QPS И ХРАНИЛИЩУ ДЛЯ TWITTER Пожалуйста, имейте в виду, что следующие цифры относятся лишь к на шему упражнению и не имеют ничего общего с реальными показателями Twitter.
44 ГЛАВА 2 Предположения:
300 миллионов активных пользователей в месяц;
50 % из них пользуются Twiter ежедневно;
пользователи в среднем публикуют по 2 твита в день;
100 % твитов содержат медиаданные;
данные хранятся на протяжении 5 лет. Оценки:
ежедневные активные пользователи (daily active users, DAU) = 300 миллионов * 50 % = 150 миллионов;
запросов в секунду (queries per second, QPS) = 150 миллионов * 2 твита / 24 часа / 3600 секунд = ~3500;
пиковый показатель QPS = 2 * QPS = ~7000. Здесь мы оценим лишь место, необходимое для хранения данных:
средний размер твита: tweet_id — 64 байта; текст — 140 байтов; медиаданные — 1 Мб;
объем данных: 150 миллионов * 2 * 10% * 1 Мб = 30 Тб в день;
объем данных за 5 лет: 30 Тб * 365 * 5 = ~55 Пб. СОВЕТЫ Главное в наколеночных оценках — процесс. То, как вы решаете задачу, важнее результатов. Интервьюеры могут проверить ваши навыки реше ния задач. Вот несколько советов.
Округление и приближение. Во время интервью сложно прово дить серьезные математические расчеты. Например, сколько будет 99987/9,1? Не нужно тратить ценное время на сложную арифме тику. От вас не ждут высокой точности. Для удобства пользуйтесь
Приблизительные оценки 45 округленными и приблизительными числами. Вопрос с делением можно упростить до 100 000/10.
Записывайте свои предположения, чтобы позже на них можно было сослаться.
Не забывайте о единицах измерения. Когда вы записываете 5, это означает 5 Кб или 5 Мб? Вы можете запутаться. Указывайте единицы измерения, поскольку это помогает избавиться от не определенности. Поздравляем, вы проделали длинный путь и можете собой гордиться. Отличная работа! СПРАВОЧНЫЕ МАТЕРИАЛЫ [1] J. Dean, Google Pro Tip: Use Back-Of-The-Envelope-Calculations To Choose The Best Design: http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back- ofthe-envelope-calculations-to-choo.html [2] System design primer: https://github.com/donnemartin/systemdesign-primer [3] Latency Numbers Every Programmer Should Know: https://colin-scott.github. io/personal_website/research/interactive_ latency.html [4] Amazon Compute Service Level Agreement: https://aws.amazon.com/compute/ sla/ [5] Compute Engine Service Level Agreement (SLA): https://cloud.google.com/ compute/sla [6] SLA summary for Azure services: https://azure.microsoft.com/en-us/support/ legal/sla/summary/