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)

Решения

  • кэш
    • быстрый доступ, объем меньше
  • прокси для статики
    • трёхзвеньевая архитектура (фронтенд -> приложение -> бд)

фронтенд

  1. авторизация
  2. балансировка / прокси
  3. валидация
  4. простые вычисления
  5. буферизация
  • 100к запросов/сек

кэш

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