Ленвендо.Построение системного ландшафта высоконагруженного проекта
1. Построение системного
ландшафта для высоко
нагруженного проекта
ООО «Ленвендо-Софт»
Гаврилов Виталий
Технический директор
тел.: +7 (812) 322-95-87 info@lenvendo.ru
2. Построение системного ландшафта
для высоко нагруженного проекта
Используемое «железо». Что и для чего выбрать?
Как построить горизонтально-масштабируемое
решение?
Балансировка нагрузки на БД
Распределение сетевого трафика
Масштабирование высоко нагруженного проекта
Экономика проекта
Резервное копирование
3. Используемое «железо». Что и для чего выбрать?
Базовое решение
Apache + php MySQL
Nginx
Посетитель
Посетитель
База данных
WEB-сервер
Балансирующий
сервер
Посетитель
Varnish
Nginx
NFS/CIFS/Smth server
Файловое
хранилище
4. Используемое «железо». Что и для чего выбрать?
Решение с использованием
Технологий виртуализации
Apache + php MySQL
Nginx
Балансирующий
сервер
Посетитель
WEB-сервер
Посетитель WEB-сервер База данных
WEB-сервер
Посетитель
Varnish
Nginx
NFS/CIFS/Smth server
Файловое
хранилище
5. Как построить горизонтально-масштабируемое
решение?
• Масштабирование на уровне приложения
• Масштабирование на уровне базы данных
• Масштабирование на уровне статического контента
• Масштабирование на уровне сетевых интерфейсов
6. Как построить горизонтально-масштабируемое
решение?
• Масштабирование на уровне приложения
Поддержка распределенного (memcached) или
файлового кеширования
Отсутствие или минимизация в логике приложения
операций, требующих монопольных блокировок
файлов
Модульность приложения, позволяющая
минимизировать число уникальных обращений к
файловой системе
7. Как построить горизонтально-масштабируемое
решение?
• Масштабирование на уровне базы данных
Поддержка на уровне ядра приложения разделения
запросов к базе данных на запросы выборки и
запросы изменения данных
Наличие на уровне базы данных средств master-slave
репликации на основании транспорта журнала
транзакций
Корректная поддержка на уровне приложения
непоследовательной во времени смены
идентификаторов (необходимо для master-master
репликации в mysql)
8. Как построить горизонтально-масштабируемое
решение?
• Масштабирование на уровне статического
контента
Хранение статического контента в файловой
системе, а не в базе данных
Наличие в ядре приложения специализированной
настройки для определения места хранения
загружаемого статического контента
Наличие в ядре приложения функций работы с CDN
(Content Delivery Network)
9. Как построить горизонтально-масштабируемое
решение?
• Масштабирование на уровне сетевых
интерфейсов
Наличие избыточного оборудования с
высокоскоростным (от 100 МБит) подключением к сети
Интернет.
Вынесение статического контента в CDN средствами
приложения
10. Балансировка нагрузки на БД
Apache + php MySQL
Запись/чтение
WEB-сервер
Запись/чтение
Запись/чтение
WEB-сервер База данных
WEB-сервер
11. Балансировка нагрузки на БД
MySQL
Master-1
Apache + php
Запись/чтение
База данных
WEB-сервер
Запись/чтение
WEB-сервер
Запись/чтение
WEB-сервер
База данных
MySQL
Master-2
12. Балансировка нагрузки на БД
MySQL
Slave-1
Apache + php MySQL
Master
Чтение
Запись
WEB-сервер Запись MySQL
Slave-2
Запись
WEB-сервер Чтение База данных
Чтение
WEB-сервер
13. Балансировка нагрузки на БД
MySQL
Master-1
Apache + php MySQL
Slave-1
Запись
База данных
Чтение
Чтение
WEB-сервер
Запись
WEB-сервер
Запись MySQL
Slave-2
WEB-сервер
Чтение База данных
MySQL
Master-2
14. Отказоустойчивость базы данных
Отказоустойчивость базы данных может быть
обеспечена:
на уровне приложения (автоматическое выявление
недоступных узлов)
на уровне MySQL-proxy
на уровне кластерных ресурсов (например,
pacemaker)
15. Отказоустойчивость БД средствами кластера
MySQL
Private Server IP
Master-1
Shared master IP
Запись
База данных
MySQL
WEB-сервер
Slave-1
Чтение
Shared slave IP
Private Server IP
16. Отказоустойчивость БД средствами кластера
MySQL
Private Server IP
Master-1
Shared master IP
Запись
База данных
MySQL
WEB-сервер
Slave-1
Чтение
Shared slave IP
Private Server IP
17. Отказоустойчивость БД средствами кластера
MySQL
Private Server IP
Master-1
Shared master IP
Запись
База данных
MySQL
WEB-сервер
ExSlave-1
Чтение
Shared slave IP
Private Server IP
18. Распределение сетевого трафика
Ограничение полосы пропускания на сетевое
подключение
– Перенос статического контента на
отдельный домен/поддомен
Ограничение числа одновременных
соединений на уровне WEB-браузера
– Использование «поддельных» поддоменов
– Использование CDN как универсальное
решение
19. Распределение сетевого трафика
Использование «поддельных» поддоменов
Apache + php MySQL
Nginx
Балансирующий
сервер
www.site.ru
Посетитель HTTP
HTT{ SQL
Посетитель
База данных
WEB-сервер
Файловый обмен
Посетитель
HTTP
Varnish
Nginx
NFS/CIFS/Smth server
HTTP
Файловое
Файловый обмен
Хранилище
*.static.site.ru
20. Распределение сетевого трафика
Использование «поддельных» поддоменов
• Изменения в DNS
static IN A 1.2.3.4
static IN A 1.2.3.5
*.static IN CNAME static
22. Распределение сетевого трафика
Использование CDN как универсальное
решение MySQL
Nginx Apache + php
Балансирующий
сервер
www.site.ru
Посетитель HTTP
HTT{ SQL
Посетитель
База данных
WEB-сервер
Посетитель
Обмен по протоколу CDN
HTTP
HTTP
Синхронизация
данных
CDN
23. Распределение сетевого трафика
Использование CDN как универсальное
решение
• Изменение в коде приложения
Изменения зависят от используемой CDN
24. Масштабирование высоко нагруженного проекта
Синхронное масштабирование между датацентрами
Асинхронное масштабирование между датацентрами
Неполное асинхронное зеркалирование данных
25. Экономика вопроса
Экономика высоко нагруженной системы
определяется на этапе формирования системной
архитектуры в момент выбора технологий.
На этапе создания и на этапе эксплуатации системы
экономика складывается из следующих факторов:
Программное обеспечение (ОС, СУБД, антивирус и т.п.), доп.
лицензии, продление техподдержки и пр.
Оборудование, каналы с учетом наращивания в ходе
эксплуатации
Администрирование системы
Доработка кода приложения
26. Резервное копирование
Резервное копирование файловой системы сайта
Резервное копирование базы данных
Резервное копирование статического контента
27. Резервное копирование
Резервное копирование файловой системы сайта
• Инструменты для выполнения резервного
копирования
– bacula (http://www.bacula.org/en/)
• Рекомендации по выполнению резервного
копирования
– Наличие дублирующего сервера файловой системы сайта
для минимизации нагрузки на время выполнения резервного
копирования
– Наличие выделенного сервера резервного копирования
– Наличие дублирующего сервера резервного
копирование в другом ДЦ
28. Резервное копирование
Резервное копирование базы данных
• Инструменты резервного копирования
– Резервное БД MySQL копирование можно производить как с
помощью встроенной утилиты mysqldump, так и с
использованием Percona XtraBackup, позволяющую
создавать инкриментные копии.
• Рекомендации по организации резервного
копирования
– Наличие «горячей копии» БД построенной на master-slave
репликации и используемой для выполнения процедуры
резервного копирования
– Наличие «дублирующей копии БД» в другом ДЦ на
случай отказа ДЦ.
29. Резервное копирование
Резервное копирование статического контента
• Использовать резервное копирование в слчае
использования CDN нет необходимости!
• Инструменты для выполнения резервного
копирования
– bacula (http://www.bacula.org/en/)
• Рекомендации по выполнению резервного
копирования
– В связи со спецификой изменения файловой системы
возможно более редкое выполнения процедуры полного
резервного копирования
30. Спасибо за внимание!
Буду рад ответить на Ваши вопросы.
ООО «Ленвендо-Софт»
Гаврилов Виталий
Технический директор