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