Построение системного ландшафта для высоко нагруженного проекта ООО «Ленвендо-Софт» Гаврилов Виталий Технический директор тел.: +7 (812) 322-95-87 info@lenvendo.ru Построение системного ландшафта для высоко нагруженного проекта Используемое «железо». Что и для чего выбрать? Как построить горизонтально-масштабируемое решение? Балансировка нагрузки на БД Распределение сетевого трафика Масштабирование высоко нагруженного проекта Экономика проекта Резервное копирование Используемое «железо». Что и для чего выбрать? Базовое решение MySQL Apache + php Nginx Посетитель Посетитель Балансирующий сервер WEB-сервер Посетитель Varnish Nginx NFS/CIFS/Smth server Файловое хранилище База данных Используемое «железо». Что и для чего выбрать? Решение с использованием Технологий виртуализации Apache + php MySQL Nginx Балансирующий сервер Посетитель WEB-сервер Посетитель WEB-сервер WEB-сервер Посетитель Varnish Nginx NFS/CIFS/Smth server Файловое хранилище База данных Как построить горизонтально-масштабируемое решение? • • • • Масштабирование на уровне приложения Масштабирование на уровне базы данных Масштабирование на уровне статического контента Масштабирование на уровне сетевых интерфейсов Как построить горизонтально-масштабируемое решение? • Масштабирование на уровне приложения Поддержка распределенного (memcached) или файлового кеширования Отсутствие или минимизация в логике приложения операций, требующих монопольных блокировок файлов Модульность приложения, позволяющая минимизировать число уникальных обращений к файловой системе Как построить горизонтально-масштабируемое решение? • Масштабирование на уровне базы данных Поддержка на уровне ядра приложения разделения запросов к базе данных на запросы выборки и запросы изменения данных Наличие на уровне базы данных средств master-slave репликации на основании транспорта журнала транзакций Корректная поддержка на уровне приложения непоследовательной во времени смены идентификаторов (необходимо для master-master репликации в mysql) Как построить горизонтально-масштабируемое решение? • Масштабирование на уровне статического контента Хранение статического контента в файловой системе, а не в базе данных Наличие в ядре приложения специализированной настройки для определения места хранения загружаемого статического контента Наличие в ядре приложения функций работы с CDN (Content Delivery Network) Как построить горизонтально-масштабируемое решение? • Масштабирование на уровне сетевых интерфейсов Наличие избыточного оборудования с высокоскоростным (от 100 МБит) подключением к сети Интернет. Вынесение статического контента в CDN средствами приложения Балансировка нагрузки на БД Apache + php MySQL Запись/чтение WEB-сервер Запись/чтение Запись/чтение WEB-сервер WEB-сервер База данных Балансировка нагрузки на БД MySQL Master-1 Apache + php Запись/чтение База данных WEB-сервер WEB-сервер Запись/чтение Запись/чтение WEB-сервер База данных MySQL Master-2 Балансировка нагрузки на БД MySQL Slave-1 MySQL Master Apache + php Чтение Запись WEB-сервер Запись MySQL Slave-2 Запись WEB-сервер Чтение Чтение WEB-сервер База данных Балансировка нагрузки на БД MySQL Master-1 Apache + php MySQL Slave-1 Запись База данных Чтение Чтение WEB-сервер WEB-сервер Запись Запись MySQL Slave-2 WEB-сервер Чтение MySQL Master-2 База данных Отказоустойчивость базы данных Отказоустойчивость базы данных может быть обеспечена: на уровне приложения (автоматическое выявление недоступных узлов) на уровне MySQL-proxy на уровне кластерных ресурсов (например, pacemaker) Отказоустойчивость БД средствами кластера Private Server IP MySQL Master-1 Shared master IP Запись База данных MySQL Slave-1 WEB-сервер Чтение Shared slave IP Private Server IP Отказоустойчивость БД средствами кластера Private Server IP MySQL Master-1 Shared master IP Запись База данных MySQL Slave-1 WEB-сервер Чтение Shared slave IP Private Server IP Отказоустойчивость БД средствами кластера Private Server IP MySQL Master-1 Shared master IP Запись База данных MySQL ExSlave-1 WEB-сервер Чтение Shared slave IP Private Server IP Распределение сетевого трафика Ограничение полосы пропускания на сетевое подключение – Перенос статического контента на отдельный домен/поддомен Ограничение числа одновременных соединений на уровне WEB-браузера – Использование «поддельных» поддоменов – Использование CDN как универсальное решение Распределение сетевого трафика Использование «поддельных» поддоменов MySQL Apache + php Nginx Балансирующий сервер www.site.ru Посетитель HTTP SQL HTT{ Посетитель WEB-сервер Файловый обмен Посетитель HTTP Varnish Nginx NFS/CIFS/Smth server HTTP Файловый обмен Файловое Хранилище *.static.site.ru База данных Распределение сетевого трафика Использование «поддельных» поддоменов • Изменения в DNS static static IN IN *.static IN A A 1.2.3.4 1.2.3.5 CNAME static Распределение сетевого трафика Использование «поддельных» поддоменов • Изменения в коде сайта <img src=“/images/logo.jpg” alt=“site.ru” /> … <img src=“/static/people/ivanov.png” alt=“Ivanov Ivan” /> <img src=“http://s1.static.site.ru/images/logo.jpg” alt=“site.ru” /> … <img src=“http://s2.static.site.ru/static/people/ivanov.png” alt=“Ivanov Ivan” /> Распределение сетевого трафика Использование CDN как универсальное решение MySQL Apache + php Nginx Балансирующий сервер www.site.ru Посетитель HTTP SQL HTT{ Посетитель WEB-сервер Посетитель Обмен по протоколу CDN HTTP HTTP Синхронизация данных CDN База данных Распределение сетевого трафика Использование CDN как универсальное решение • Изменение в коде приложения Изменения зависят от используемой CDN Масштабирование высоко нагруженного проекта Синхронное масштабирование между датацентрами Асинхронное масштабирование между датацентрами Неполное асинхронное зеркалирование данных Экономика вопроса Экономика высоко нагруженной системы определяется на этапе формирования системной архитектуры в момент выбора технологий. На этапе создания и на этапе эксплуатации системы экономика складывается из следующих факторов: Программное обеспечение (ОС, СУБД, антивирус и т.п.), доп. лицензии, продление техподдержки и пр. Оборудование, каналы с учетом наращивания в ходе эксплуатации Администрирование системы Доработка кода приложения Резервное копирование Резервное копирование файловой системы сайта Резервное копирование базы данных Резервное копирование статического контента Резервное копирование Резервное копирование файловой системы сайта • Инструменты для выполнения резервного копирования – bacula (http://www.bacula.org/en/) • Рекомендации по выполнению резервного копирования – Наличие дублирующего сервера файловой системы сайта для минимизации нагрузки на время выполнения резервного копирования – Наличие выделенного сервера резервного копирования – Наличие дублирующего сервера резервного копирование в другом ДЦ Резервное копирование Резервное копирование базы данных • Инструменты резервного копирования – Резервное БД MySQL копирование можно производить как с помощью встроенной утилиты mysqldump, так и с использованием Percona XtraBackup, позволяющую создавать инкриментные копии. • Рекомендации по организации резервного копирования – Наличие «горячей копии» БД построенной на master-slave репликации и используемой для выполнения процедуры резервного копирования – Наличие «дублирующей копии БД» в другом ДЦ на случай отказа ДЦ. Резервное копирование Резервное копирование статического контента • Использовать резервное копирование в слчае использования CDN нет необходимости! • Инструменты для выполнения резервного копирования – bacula (http://www.bacula.org/en/) • Рекомендации по выполнению резервного копирования – В связи со спецификой изменения файловой системы возможно более редкое выполнения процедуры полного резервного копирования Спасибо за внимание! Буду рад ответить на Ваши вопросы. ООО «Ленвендо-Софт» Гаврилов Виталий Технический директор