Обзор решений для реализации веб-проектов с высокими требованиями по доступности
Для начала давайте определимся с подходящим вариантом размещения Вашего веб-проекта: хостинг или выделенный сервер в облаке?
Сравнение хостинга с выделенным облачным сервером для размещения веб-проекта.
Преимущества хостинга:
- низкая стоимость;
- легкое управление своим хостинговым аккаунтом, которое будет понятно даже новичкам, удобная панель управления;
- возможность пользоваться технической поддержкой хостингового провайдера при проблемах, связанных с работой сервера.
Преимущества выделенного сервера (на основе облака):
- арендованный набор ресурсов (CPU, RAM, HDD) зарезервирован под Вас и не используется другими клиентами;
- возможность тонко и безопасно настраивать дополнительное программное обеспечение без ограничений хостинговой компании (в хостинге каждый дополнительный функционал оплачивается отдельно и перечень дополнительного функционала ограничен);
- Ваша безопасность зависит только от Вас, ведь при взломе либо атаке на любого из клиентов хостинга (предыдущий вариант размещения) Ваш сайт может также быть выведен из строя, так как на одном сервере размещено большое количество клиентов;
- возможность быстро масштабироваться при увеличении нагрузки без миграции на другие более мощные сервера;
- полные административные права.
После того, как Вы определились с площадкой для размещения веб-проекта, стоит заранее продумать варианты масштабирования и выбрать наиболее подходящую концепцию.
Варианты масштабирования веб-проекта, основные компоненты:
1. Все на одном сервере
Для малонагруженного веб проекта достаточно иметь один выделенный сервер с размещенным на нем сервисом приложений (веб сервер с поддержкой PHP), а также базу данных. Стандартный набор программного обеспечения включает – Linux, nginx, php-fpm, Mysql. Данный подход позволяет масштабировать проект методом увеличения серверных ресурсов.
2. Вынесение сервиса базы данных на отдельный сервер
При увеличении нагрузки разнесение сервиса приложений (nginx+PHP) и сервиса базы данных (Mysql) позволит масштабировать оба компонента отдельно. Размещение базы данных в отдельной сети недоступной напрямую из интернета позволяет увеличить уровень безопасности проекта в целом.
3. Добавление балансировщика нагрузки (кластер сервиса приложений)
Добавления сервиса балансировки нагрузки позволяет наращивать мощность сервиса приложений, добавляя большее количество узлов при дальнейшем масштабировании, а также увеличить доступность (при выходе из строя одного из серверов, веб приложение продолжает работать дальше). Данный подход также позволяет скрыть всю внутреннюю архитектуру веб-приложения от внешних пользователей, что еще больше увеличивает безопасность приложения. Балансировщик нагрузки также позволяет уменьшить или исключить полностью влияние DDOS атаки, методом ограничения количества соединений либо их частоту появления от клиентов. Еще одной из преимуществ является возможность кеширования контента в памяти (например статических файлов на заданный промежуток времени), что уменьшает нагрузку на сервера приложения. В случае размещения статических файлов на узлах приложения их содержимое можно автоматически синхронизировать используя распределенные файловые системы.
4. Добавление кластера баз данных
Разнесение базы данных на несколько серверов с синхронизацией позволяет увеличить ее производительность и доступность в случае отказа одного из узлов. Кластер баз данных может быть реализовать как в Master – Slave или в Master — Master режиме (только узел в режиме Master может записывать изменения в базу данных).
Когда с концепцией IT-дизайна определились, не менее важно рассмотреть сервисы для увеличения надежности и безопасности Вашего веб-проекта:
1. Система удаленного резервного копирования
Установка дополнительного программного обеспечения на каждый из узлов позволит выполнять резервное копирование на удаленные сервера в следующих вариантах – full, differential, increment. Это позволит восстановить работу каждого из компонентов проекта за заданную дату.
2. Система мониторинга
Система мониторинга, оповещение о событиях и исторические данные о состоянии ресурсов приложения позволят получить полную картину жизненного цикла приложения. Данный подход также позволит предвидеть будущее увеличение нагрузки и сделать заранее подготовительные шаги для предотвращения отказа.
3. Система централизованного сбора логов
Система централизованного сбора журналов предоставляет простой способ просмотра и поиска логов приложения, в одном месте, которые обычно хранятся локально на отдельных серверах. Централизованное ведение журнала также позволяет легко выявлять проблемы, связанные с несколькими серверами, путем сопоставления их логов и показателей в течение определенного периода времени. Это также обеспечивает большую гибкость с точки зрения исторического сохранения логов, поскольку локальные журналы могут быть выгружены с серверов приложений на централизованный сервер, который имеет свое собственное независимое хранилище.
4. Повышение безопасности системы
Дополнительно предлагается использовать следующий набор приложений для увеличения безопасности веб приложения:
- Fail2ban – позволяет исключить возможность подбора пароля для таких приложений как ssh, ftp, web admin panel access, путем временного блока доступа айпи адреса атакующего.
- Root access – блокировка возможности Root доступа к каждому из компонентов, взамен предлагается использование ключей шифрования либо других имен пользователей которые менее распространены.
- Cloudflare – система балансировки нагрузки с возможностью расширенной защиты и анализа веб-трафика к веб-приложениям. Также позволяет реализовать концепцию Сети доставки (и дистрибуции) содержимого (англ. Content Delivery Network или Content Distribution Network, CDN) — географически распределённая сетевая инфраструктура, позволяющая оптимизировать доставку содержимого конечным пользователям в сети Интернет. Использование контент-провайдерами CDN способствует увеличению скорости загрузки интернет-пользователями аудио-, видео-, программного, игрового и других видов цифрового содержимого в точках присутствия сети CDN.
- Регулярное обновление программ до последних версий, для увеличения стабильности и безопасности.
- Периодическое или по требованию сканирование серверов на наличие уязвимостей с помощью сканера уязвимости.
- SSL сертификат мониторинг и оповещение об его истечении. Либо использование технологии Let’s Encrypt — центр сертификации, предоставляющий бесплатные криптографические сертификаты X.509 для TLS шифрования (HTTPS). Процесс выдачи и обновления сертификатов полностью автоматизирован.
- И другие.
В результате внедрения описанных выше подходов получится высокодоступный веб-проект.
В подготовке публикации использовались иллюстрации с https://www.digitalocean.com