TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Соло, научи меня | Системный анализ

25 Sep, 08:35

Открыть в Telegram Поделиться Пожаловаться

📖 Ванечка считает на коленке


В один из осенних дней ПиццаЕдинорог гонял Ванечку перед 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 #Оценка

87 0 0 10
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot