Не для кого уже не секрет о том, что рано или поздно у вас на сайте (сервисе, web-приложении, ...) в какой-то момент начинает расти активность и число пользователей. Вот некоторые шаги/рекомендации как не «упасть» и поддерживать стабильную работу.
Предисловие
И так, ваш http:// мега-домен / работает, даже активно отвечает 200 на все запросы, которые к счастью и/или к сожалению начинают расти, и вы слышите от системных администраторов что приложение «падает». Самое главное не паникуем, анализируем, всё ли приложение падает или только некоторые части. Собственно большая часть проблемы — приложение «съело» всю оперативную память сервера.
Методы оптимизации нагрузок
Самые часто-используемые методы для оптимизации нагрузок приложения:
- Вертикальное масштабирование — Ограниченный возможностями сервера способ, состоит в добавке оперативной памяти.
- Обновление ПО — В данном случае обновляется ПО сервера и/или если используется cms (cmf, framework, etc).
- Компиляция кода — Второй по тривиальности способ, заключается в компиляции исходного кода в байт-код.
- Кеширование сервера — Главное правило — кеширование нужно там где оно оправдано.
- Кеширование клиента — Тут главное сильно не надеется и не перебарщивать, клиент может просто выключить кеш.
- Горизонтальное масштабирование — По сути, производное из вертикального. В какой-то момент ресурсы железа просто иссякнут, на помощь в данном случае придёт(ут) дополнительные сервер(а).
Горизонтальные паттерны, проектирование
При горизонтальном масштабировании мы встречаем такие вещи как проектирование высоко-нагруженных систем.
Вот несколько способов которые можно применять в этих случаях:
- Сервисная шина приложения — Некоторые операции, можно откладывать в сервисную шину для обработки каким-либо приложением.
- Репликация баз данных — Разделение базы данных на несколько серверов, по типу: master(запись) и slave(чтение)
- Геомасштабирование — Установка дополнительных серверов локально в городах с наибольшим числом клиентов
- Денормализация данных — Дублирование часто-запрашиваемых данных, в региональные сервера
- Пирингование файлового трафика — Самые часто запрашиваемые данные можно пиринговать между клиентами
Наиболее часто используемые решения
На каких-либо этапах до-проектирования своего проекта, вам возможно потребуются какие-либо приложения для достижения результата поставленных задач. Вот небольшой с комментариями по использованию:
- HipHopVM, kittenPHP — трансляторы кода PHP
- APC, Memcache, Redis, Xcache — кешеры кода и/или key-value хранилища
- NGINX, haProxy — балансировщики клиентских запросов между серверами