Как закалялась сталь. История погружения в теорию высоких нагрузок

в 12:45, , рубрики: Песочница, метки: , , ,

image

Не для кого уже не секрет о том, что рано или поздно у вас на сайте (сервисе, web-приложении, ...) в какой-то момент начинает расти активность и число пользователей. Вот некоторые шаги/рекомендации как не «упасть» и поддерживать стабильную работу.

Предисловие

И так, ваш http:// мега-домен / работает, даже активно отвечает 200 на все запросы, которые к счастью и/или к сожалению начинают расти, и вы слышите от системных администраторов что приложение «падает». Самое главное не паникуем, анализируем, всё ли приложение падает или только некоторые части. Собственно большая часть проблемы — приложение «съело» всю оперативную память сервера.

Методы оптимизации нагрузок

Самые часто-используемые методы для оптимизации нагрузок приложения:

  • Вертикальное масштабирование — Ограниченный возможностями сервера способ, состоит в добавке оперативной памяти.
  • Обновление ПО — В данном случае обновляется ПО сервера и/или если используется cms (cmf, framework, etc).
  • Компиляция кода — Второй по тривиальности способ, заключается в компиляции исходного кода в байт-код.
  • Кеширование сервера — Главное правило — кеширование нужно там где оно оправдано.
  • Кеширование клиента — Тут главное сильно не надеется и не перебарщивать, клиент может просто выключить кеш.
  • Горизонтальное масштабирование — По сути, производное из вертикального. В какой-то момент ресурсы железа просто иссякнут, на помощь в данном случае придёт(ут) дополнительные сервер(а).

Горизонтальные паттерны, проектирование

При горизонтальном масштабировании мы встречаем такие вещи как проектирование высоко-нагруженных систем.
Вот несколько способов которые можно применять в этих случаях:

  • Сервисная шина приложения — Некоторые операции, можно откладывать в сервисную шину для обработки каким-либо приложением.
  • Репликация баз данных — Разделение базы данных на несколько серверов, по типу: master(запись) и slave(чтение)
  • Геомасштабирование — Установка дополнительных серверов локально в городах с наибольшим числом клиентов
  • Денормализация данных — Дублирование часто-запрашиваемых данных, в региональные сервера
  • Пирингование файлового трафика — Самые часто запрашиваемые данные можно пиринговать между клиентами

Наиболее часто используемые решения

На каких-либо этапах до-проектирования своего проекта, вам возможно потребуются какие-либо приложения для достижения результата поставленных задач. Вот небольшой с комментариями по использованию:

  • HipHopVM, kittenPHP — трансляторы кода PHP
  • APC, Memcache, Redis, Xcache — кешеры кода и/или key-value хранилища
  • NGINX, haProxy — балансировщики клиентских запросов между серверами

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js