Платформа разработки высоконагруженного веб-сервиса: инструменты отладки и возможности масштабирования Александр Демидов руководитель направления арендных решений «1С-Битрикс»
Веб-приложение Кэширование диск / memcached / … База данных Традиционное устройство веб-продуктов
Масштабирование
Основные задачи, которые решает веб-кластер: Обеспечение высокой доступности сервиса (так называемые HA - High Availability или Failover кластеры) Масштабирование веб-проекта в условиях возрастающей нагрузки (HP - High Performance кластеры) Балансирование нагрузки, трафика, данных между несколькими серверами Создание целостной резервной копии данных для MySQL
«1С-Битрикс: Веб-кластер» - это комбинация технологий: Вертикальный шардинг (вынесение модулей на отдельные серверы MySQL) Репликация MySQL и балансирование нагрузки между серверами Распределенный кеш данных (memcached) Непрерывность сессий между веб-серверами (хранение сессий в базе данных) Кластеризация веб-сервера: – Синхронизация файлов – Балансирование нагрузки между серверами
Репликация и балансировка нагрузки MySQL Веб-сервер База данных MySQL MASTER Веб-кластер База данных MySQL SLAVE 1 База данных MySQL SLAVE N База данных MySQL SLAVE … SQL-балансировщик
Гибкая балансировка нагрузки SQL Простота администрирования Дешевое и быстрое неограниченное масштабирование Онлайн бэкап Не требуется доработка логики веб-приложения Репликация и балансировка нагрузки MySQL
Высокая эффективность - за счет централизованного использования кэша веб- приложением Надежность - за счет устойчивости подсистемы кешировния к выходу из строя отдельных компонентов Неограниченная масштабируемость - за счет добавления новых memcached-серверов. memcached 1 memcached 2 memcached 3 Веб-кластер «1С-Битрикс» 40%30% Веб-сервер Распределенный кеш данных (memcached)
База данных MySQL Нода 1 «1С-Битрикс: Веб-кластер» Очень высокая посещаемость Балансировщик нагрузки Нода 2 «1С-Битрикс: Веб-кластер» Нода N «1С-Битрикс: Веб-кластер» … Задача: масштабирование при росте нагрузки
Непрерывность сессий между веб- серверами Пользовательская сессия должна быть "прозрачной" для всех серверов веб-кластера. После авторизации на одном из серверов пользователь должен считаться авторизованных и для всех других серверов. И наоборот - окончание сессии на любом сервере должно означать ее окончание на всех серверах сразу.
«Узкие» места
Веб-сервер 1 /var/www Веб-сервер 2 ? Задача синхронизации файлов
Внешнее хранилище: как это выглядит БД Веб-сервер Хранилище Посетитель html *.png; *.jpeg...
Сайт + внешнее хранилище
Как сделать правильно? API хранилища для «прозрачной» работы с файлами API для разработчиков (не используем стандартные функции для работы с файлами) Избегаем «диких» файлов Простое подключение хранилищ Правила для выбора при работе с несколькими хранилищами «Прозрачность» для всех модулей системы
Как сделать правильно? Таблица с данными обо всех подключенных хранилищах Таблица со списком файлов, и указанием, где они хранятся (можно сразу хранить дополнительную информацию) Не используем file_size, getimagesize и т.п. – сохраняем все данные при аплоаде Отлов «диких» файлов через обработку 404
Облачные хранилища
Использование нескольких хранилищ Одновременно можно хранить разные файлы в разных «облачных хранилищах». Например, все файлы «весом» больше 100 Мб перемещать в «облако» Google Storage, а все видео - в Amazon S3.
«Узкие» места – база данных
Веб-сервер База данных MySQL MASTER «1С-Битрикс: Веб-кластер» База данных MySQL SLAVE 1 База данных MySQL SLAVE N База данных MySQL SLAVE … SQL-балансировщик 1С-Битрикс Высокие требования к сети, связность серверов друг с другом
Балансировщик (клиентские запросы по HTTP) Веб-сервер 1 memcached 1 Веб-сервер 2 memcached 1 MySQL master MySQL slave Ручные операции для восстановления masterа MySQL
Балансировщик (клиентские запросы по HTTP) Веб-сервер 1 memcached 1 Веб-сервер 2 memcached 1 MySQL master MySQL slave Аварии на уровне целого датацентра
«Веб-кластер», ДЦ в России БД Веб-нода «Веб-кластер», ДЦ в Германии «Веб-кластер», ДЦ в США Кэш БД Веб-нода Кэш БД Веб-нода Кэш БД Веб-нода Кэш БД Веб-нода Кэш БД Веб-нода Кэш БД Веб-нода Кэш БД Веб-нода Кэш БД Веб-нода Кэш Асинхронная master-master репликация для обеспечения работы географически распределенных веб-кластеров. Потеря связи между ДЦ может составлять часы. Географический веб-кластер
Гео веб-кластер Группы серверов в административном интерфейсе У каждой группы свой MySQL master (указан в dbconn.php) Мастеры MySQL объединены в кольцо (в минимальном варианте – 2 сервера)
Особенности настройки MySQL: auto_increment_increment auto_increment_offset Базы в разных датацентрах синхронны, при этом независимы друг от друга: потеря связности между датацентрами может составлять часы, данные синхронизируются после восстановления. Пользователь и все сотрудники этой компании работают в одном датацентре за счет управления балансировщиком. Сессии храним в базе, но не реплицируем между серверами из-за большого траффика и возможных «локов»: SET sql_log_bin = 0 … или … replicate-wild-ignore-table = %.b_sec_session% Используем master-master репликацию в MySQL
Все ноды заменяемы и не зависимы друг от друга, в случае аварии стартуем новые. Два датацентра синхронизированы друг с другом и равноценно обслуживают клиентов. В случае аварии на уровне датацентра или плановых работ с базой, траффик прозрачно для клиентов переключается на рабочий датацентр. Надежность Один из приоритетов – постоянная доступность сервиса, его отказоустойчивость.
Мониторинг: снаружи и изнутри
Что является критерием производительности? «Монитор производительности» платформы «1С-Битрикс»
Опции платформы «Монитор производительности» платформы «1С-Битрикс»
Качество разработки «Монитор производительности» платформы «1С-Битрикс»
Альтернатива профессиональным инструментам «Монитор производительности» платформы «1С-Битрикс»
Режим отладки
Спасибо за внимание! Вопросы? Александр Демидов +7 (915)