Log
Highload
1 страница -> ~400 файлов -> ~400 GET запросов
пусть время обработки запроса — 20 мс
- 1 процесс выполняет 50 запросов в секунду
- 200 мб памяти на процесс
конфигурация сервера 64гб оперативной памяти: 4гб на ос, остальное под процессы
- 300 процессов
аудитория vk.com — 50 млн человек -> по 10 страниц/сутки
- 500 млн страниц -> 200 млрд запросов
- на сервер получаем 15к запросов/секунду -> 1300000 запросов/сутки
нужно 150к серверов на ленту
Неверные предположения
- равномерная нагрузка в сутки
- пиковое количество серверов выше (x2.5)
- все 400 запросов отправляются без задержки
- браузер загружает страницу последовательно (x3)
Решения
- кэш
- быстрый доступ, объем меньше
- прокси для статики
- трёхзвеньевая архитектура (фронтенд -> приложение -> бд)

- трёхзвеньевая архитектура (фронтенд -> приложение -> бд)
фронтенд
- авторизация
- балансировка / прокси
- валидация
- простые вычисления
- буферизация
- 100к запросов/сек
кэш
- ходим в кэш всегда
- hit/miss ratio
- тяжелое вычисление 100мс
- поход в кэш 10мс
- допустимая вероятность попадания > 10%
- инвалидация
- удаление ключа при обновлении
- перевычисление значения
- сложные зависимости
- дерево зависимостей в кэше
- тэгирование кэшей
- вытеснение
- самое редкое
- самое лёгкое
- прогрев
- выполнение типичных запросов