📖 Ванечка считает на коленке
В один из осенних дней ПиццаЕдинорог гонял Ванечку перед System Design интервью и выдал задачу: спроектируй Телеграм, для начала прикинь нагрузку и объём хранилища.
Ванечка обрадовался, считать он умел, открыл калькулятор и начал.
Двести символов на пост. Кодировка... так, а если эмодзи, там же больше байт. А если репост, он хранится целиком или ссылкой? А аватарки считать? А если пользователь удалит пост, мы место освобождаем?
Через двадцать минут Единорог мягко сказал: давай дальше.
Ванечка так и не назвал ни одного числа...
ПиццаЕдинорог отложил планшет с задачей.
- Ванечка, вечер пятницы. Сколько теста заготавливать?
- Ну... надо поднять статистику по каждому дню, учесть погоду, посмотреть, нет ли футбола...
- Триста заказов, по полторы пиццы в заказе, двести пятьдесят граммов теста на пиццу, сто двенадцать килограммов, берём сто двадцать. Восемь секунд. Я ошибся? Наверняка, килограммов на десять. Но я знаю, что нужно сто двадцать, а не двенадцать и не тонна, и этого хватит, чтобы сделать заказ поставщику.
- То есть точность не нужна?
- Нужен порядок величины. Это называется оценка на коленке. На интервью на неё тратят пять минут, не больше, и специально считают приближённо: округляют, отбрасывают мелочь, берут круглые числа. Считай всего три вещи: нагрузка, хранилище, ресурсы. Возьмём твой Телеграм.
- Нагрузка. Сто миллионов активных пользователей в день, каждый пишет десять постов,, сто миллионов на десять это миллиард записей в день. Каждый читает тысячу постов,, сто миллионов на тысячу это сто миллиардов чтений в день. Видишь? Чтений в сто раз больше, чем записей, и это уже архитектурный вывод, а не просто цифра.
- Хранилище. Пост это, например, двести символов по два байта, четыреста байт, округляем до пятисот. Миллиард постов в день, примерно полтерабайта текста. Но десять процентов постов с фотографией по два мегабайта, сто миллионов фото, это уже двести терабайт. Текст на этом фоне просто исчезает.
- Ресурсы. Десять тысяч запросов в секунду, на каждый процессору нужно десять миллисекунд, десять тысяч на десять это сто тысяч миллисекунд работы в секунду. Одно ядро выдаёт тысячу миллисекунд в секунду, значит нужно сто ядер. По четыре ядра на сервер, получается двадцать пять серверов с балансировщиком.
Ванечка записал три слова: нагрузка, хранилище, ресурсы. И убрал калькулятор.
💛💛💛💛💛
Что важно запомнить:
⚪️ На оценку тратят до 5 минут, дальше идёт сама архитектура
⚪️ Считают приближённо: округляют, отбрасывают мелкое, берут круглые числа
⚪️ Порядок величины важнее точного ответа
⚪️ Три блока: нагрузка (load), хранилище (storage), ресурсы (resource)
💛💛💛💛💛
🔸🔸🔸🔸🔸🔸
Оценка нагрузки:
⚫️DAU (Daily Active Users) = 100 млн, по 10 твитов в день
⚫️Записей: 100 млн х 10 = 1 млрд в день
⚫️Чтений: 100 млн х 1000 = 100 млрд в день
⚫️Соотношение чтение/запись 100:1, система read-heavy, нужны кэш и реплики на чтение
Оценка хранилища:
🙂Пост: 200 символов х 2 байта = 400 байт, округляем до 500 байт
🙂Текст: 500 байт х 1 млрд, примерно 0,5 ТБ в день
🙂Фото: 10% от 1 млрд это 100 млн х 2 МБ, примерно 200 ТБ в день
Итог около 200 ТБ в день, из которых текст занимает доли процента
В оригинале округляют грубее и получают примерно 1 ПБ в день. Точное число тут не важно, важен вывод: объём определяют медиафайлы, и хранить их надо отдельно от базы.
Оценка ресурсов:
🙂10 000 RPS х 10 мс = 100 000 мс работы в секунду
🙂1 ядро = 1000 мс в секунду, значит 100 000 / 1000 = 100 ядер
🙂4 ядра на сервер, значит 100 / 4 = 25 серверов плюс балансировщик
Ориентиры для счёта:
⚪️1 день это 86 400 с, округляем до 100 000 с
⚪️1 млн запросов в день это примерно 12 RPS
⚪️1 символ 2 байта, 1 фото 2 МБ, 1 минута видео 50 МБ
⚪️1000 ГБ = 1 ТБ, 1000 ТБ = 1 ПБ
Зачем это аналитику: те же три блока вы считаете, когда обосновываете заказчику стоимость инфраструктуры. Фраза "нужен сервер побольше" никого не убедит, расчёт на 25 серверов убедит.
💛💛💛💛💛
💛 Вас просили прикинуть нагрузку на глазок?
#ВанечкаИЕдинорог #СистемныйАнализ #SystemDesign #Оценка
В один из осенних дней ПиццаЕдинорог гонял Ванечку перед System Design интервью и выдал задачу: спроектируй Телеграм, для начала прикинь нагрузку и объём хранилища.
Ванечка обрадовался, считать он умел, открыл калькулятор и начал.
Двести символов на пост. Кодировка... так, а если эмодзи, там же больше байт. А если репост, он хранится целиком или ссылкой? А аватарки считать? А если пользователь удалит пост, мы место освобождаем?
Через двадцать минут Единорог мягко сказал: давай дальше.
Ванечка так и не назвал ни одного числа...
ПиццаЕдинорог отложил планшет с задачей.
- Ванечка, вечер пятницы. Сколько теста заготавливать?
- Ну... надо поднять статистику по каждому дню, учесть погоду, посмотреть, нет ли футбола...
- Триста заказов, по полторы пиццы в заказе, двести пятьдесят граммов теста на пиццу, сто двенадцать килограммов, берём сто двадцать. Восемь секунд. Я ошибся? Наверняка, килограммов на десять. Но я знаю, что нужно сто двадцать, а не двенадцать и не тонна, и этого хватит, чтобы сделать заказ поставщику.
- То есть точность не нужна?
- Нужен порядок величины. Это называется оценка на коленке. На интервью на неё тратят пять минут, не больше, и специально считают приближённо: округляют, отбрасывают мелочь, берут круглые числа. Считай всего три вещи: нагрузка, хранилище, ресурсы. Возьмём твой Телеграм.
- Нагрузка. Сто миллионов активных пользователей в день, каждый пишет десять постов,, сто миллионов на десять это миллиард записей в день. Каждый читает тысячу постов,, сто миллионов на тысячу это сто миллиардов чтений в день. Видишь? Чтений в сто раз больше, чем записей, и это уже архитектурный вывод, а не просто цифра.
- Хранилище. Пост это, например, двести символов по два байта, четыреста байт, округляем до пятисот. Миллиард постов в день, примерно полтерабайта текста. Но десять процентов постов с фотографией по два мегабайта, сто миллионов фото, это уже двести терабайт. Текст на этом фоне просто исчезает.
- Ресурсы. Десять тысяч запросов в секунду, на каждый процессору нужно десять миллисекунд, десять тысяч на десять это сто тысяч миллисекунд работы в секунду. Одно ядро выдаёт тысячу миллисекунд в секунду, значит нужно сто ядер. По четыре ядра на сервер, получается двадцать пять серверов с балансировщиком.
Ванечка записал три слова: нагрузка, хранилище, ресурсы. И убрал калькулятор.
💛💛💛💛💛
Что важно запомнить:
⚪️ На оценку тратят до 5 минут, дальше идёт сама архитектура
⚪️ Считают приближённо: округляют, отбрасывают мелкое, берут круглые числа
⚪️ Порядок величины важнее точного ответа
⚪️ Три блока: нагрузка (load), хранилище (storage), ресурсы (resource)
💛💛💛💛💛
🔸🔸🔸🔸🔸🔸
Оценка нагрузки:
⚫️DAU (Daily Active Users) = 100 млн, по 10 твитов в день
⚫️Записей: 100 млн х 10 = 1 млрд в день
⚫️Чтений: 100 млн х 1000 = 100 млрд в день
⚫️Соотношение чтение/запись 100:1, система read-heavy, нужны кэш и реплики на чтение
Оценка хранилища:
🙂Пост: 200 символов х 2 байта = 400 байт, округляем до 500 байт
🙂Текст: 500 байт х 1 млрд, примерно 0,5 ТБ в день
🙂Фото: 10% от 1 млрд это 100 млн х 2 МБ, примерно 200 ТБ в день
Итог около 200 ТБ в день, из которых текст занимает доли процента
В оригинале округляют грубее и получают примерно 1 ПБ в день. Точное число тут не важно, важен вывод: объём определяют медиафайлы, и хранить их надо отдельно от базы.
Оценка ресурсов:
🙂10 000 RPS х 10 мс = 100 000 мс работы в секунду
🙂1 ядро = 1000 мс в секунду, значит 100 000 / 1000 = 100 ядер
🙂4 ядра на сервер, значит 100 / 4 = 25 серверов плюс балансировщик
Ориентиры для счёта:
⚪️1 день это 86 400 с, округляем до 100 000 с
⚪️1 млн запросов в день это примерно 12 RPS
⚪️1 символ 2 байта, 1 фото 2 МБ, 1 минута видео 50 МБ
⚪️1000 ГБ = 1 ТБ, 1000 ТБ = 1 ПБ
Зачем это аналитику: те же три блока вы считаете, когда обосновываете заказчику стоимость инфраструктуры. Фраза "нужен сервер побольше" никого не убедит, расчёт на 25 серверов убедит.
💛💛💛💛💛
💛 Вас просили прикинуть нагрузку на глазок?
#ВанечкаИЕдинорог #СистемныйАнализ #SystemDesign #Оценка