high availability в жизни обычного разработчика
TRANSCRIPT
100,000,000 запросов в день- 80% -- статические файлы (CSS, JS, PNG/JPEG, MP4)
- 20% -- динамические данные (результат работы CMS)
Несколько физических серверов
- 1 сервер для редакторов
- 2 кеш-сервера
- 2 сервера баз данных
- 2 сервера приложений
Кеш-сервер. Varnish и nginx.
- nginx отдаёт все статические файлы (стили, скрипты, изображения, видео)
- Запросы динамических данных отправляем на Varnish, который запущен на этом же сервере
- Weighted round robin балансировка для серверов приложений в Varnish
- Disk cache работает достаточно хорошо в Varnish
- Используем разные cache ID для мобильной и основной версии. Туда же можно добавить идентификатор пользователя
Сервер приложения. Drupal 7, Nginx и PHP-FPM.
- Drupal 7 в качестве CMS
- autoslave модуль для распределения запросов между MySQL master и slave
- contexts модуль для управления HTTP-заголовками (Expires и т.д.)
- Кеширование на уровне Drupal:
- Memcached как кеш-сервер
- Sessions, views, blocks в memcached
- nginx как веб-сервер
- PHP-FPM для исполнения PHP-кода
- APC или другой модуль для кеширования op code
Сервер баз данных. Percona MySQL.- Master-slave репликация для горизонтального масштабирования read-
only серверов
- Master-master репликация в случае write-heavy приложения
- Percona XtraDB Cluster как более современная альтернатива - How To
- Аккуратная настройка InnoDB переменных для индексов и буферов - Percona Tools
- tmpfs раздел (до 20% от доступного объема ОЗУ) для tmpdir
Сервер для редакторов. Nginx, PHP-FPM и Percona MySQL.
- Работаем только с master-сервером
- Отключаем autoslave
- Следим для настройками memcache bins
Синхронизация данных
- rsync в случае односторонней синхронизации (быстро и просто)
- NFS+keepalived или GlusterFS для shared file system (медленно)
Поиск
- Apache Solr для англоязычных сайтов
- Поддерживает master-slave репликацию для горизонтального масштабирования
- Sphinx для русскоязычных
- MySQL Fulltext Index в случае, если нужен поиск средствами СУБД
Мониторинг
- Newrelic
- Есть модули для сбора статистики MySQL, nginx и varnish
- atop, iotop для ручного сбора и анализа данных по нагрузке
- mytop как альтернатива show processlist
- InnoDB Status
Часто встречающиеся проблемы
- сервер приложений не отвечает при высокой нагрузке даже по SSH
- Ограничить количество процессов PHP в настройках PHP-FPM, проверить системные логи на предмет out of memory process kills
- Проверить количество процессов PHP, посмотреть соответствие использования CPU на сервере БД и сервере приложений
- сервер баз данных работает очень медленно
- mytop, show processlist, slow queries log
- Explain для популярных запросов
- Query cache не всегда хорошо
- Writing to file, file sort в статусе запроса
- Too many open files на кеш-сервере
- Increase ulimits
И да, мы ищем таланты :-)[email protected]