Web 1 - 1С

реклама
Архитектура проекта «Битрикс24»:
как сделать так, чтобы все летало и не падало
Александр Демидов
руководитель направления арендных решений
«1С-Битрикс»
Цель на 2012 год
Задача для компании в 2012 году – запустить в
коммерческую эксплуатацию Bitrix24
Аренда Корпоративного портала как инструмента социального
интранета
Развитие социального Project- и Task-менеджмента
Развитие Social CRM - готового, простого в использовании
решения
Собрать и накопить опыт по эксплуатации облачных вебсервисов, поделиться им с партнерами
Запускаем новый SaaS продукт
Bitrix24
Есть несколько задач на старте и
в процессе работы
Новый SaaS сервис – как коммерческие, так и «бесплатные»
пользователи
Минимизация расходов на эксплуатацию и снижение финансовых
рисков на старте проекта
Масштабирование при росте нагрузки и обратное масштабирование
Надежность – обеспечение SLA
Работа с разными рынками: США, Европа, Россия
Быстрая отдача статического контента
Для пользователя
Быстро
Без сбоев
Независимые
факторы надежности
Человечество уже сделало
определенный путь - для
обеспечения независимых
факторов надежности.
Для Bitrix24 нужен
аналогичный подход –
продолжать работу без
потери данных в случае
выхода из строя одного ДЦ и
быть способными
восстанавливать базы данных
за несколько минут.
Из «бизнес-требований»
появились технические
Отказоустойчивость – умение размещаться сразу в нескольких разных
территориально распределенных датацентрах (в разных странах)
MultiTenancy архитектура
Полное разделение логики (кода продукта) и данных
Пользовательские данные – это большой объем статических файлов и
база данных
Универсальный API платформы для многолетней разработки
Динамическое масштабирование по нагрузке
Две итоговые задачи:
Выбор технической платформы для инфраструктуры
Выбор платформы разработки
Традиционное устройство
веб-продуктов
Веб-приложение
Кэширование
на диск
База данных
Обычный продут не поддерживает гео веб-кластер, облачные
файлы, распределенное кэширование, multitenancy…
Облачная платформа: веб-кластер
•
Вертикальный шардинг (вынесение модулей на отдельные серверы
MySQL)
•
Репликация MySQL и балансирование нагрузки между серверами
•
Распределенный кеш данных (memcached)
•
Непрерывность сессий между веб-серверами (хранение сессий в базе
данных)
•
Кластеризация веб-сервера:
– Синхронизация файлов (это – проблема для облачного сервиса)
– Балансирование нагрузки между серверами
1-ый этап реализации
Балансировщик (клиентские запросы
по HTTP)
Веб-сервер 1
memcached 1
MySQL
master
Веб-сервер 2
MySQL
slave
memcached 2
2-ой этап – гео веб-кластер
«Веб-кластер»,
ДЦ в России
Веб-нода
Веб-нода
Веб-нода
Асинхронная master-master репликация
для обеспечения работы географически
распределенных веб-кластеров.
Потеря связи между ДЦ может
составлять часы.
Кэш
Кэш
Кэш
«Веб-кластер»,
ДЦ в США
Веб-нода
Веб-нода
Веб-нода
Кэш
Кэш
Кэш
«Веб-кластер»,
БД
БД
ДЦ в Германии
БД
Веб-нода
Веб-нода
Веб-нода
Кэш
Кэш
Кэш
БД
БД
БД
БД
БД
БД
Облачное хранилище
файлов
ДЦ в России
Посетители
ДЦ в США
Веб-сервер
Веб-сервера
Веб-серверы
Веб-сервер
Веб-сервера
Веб-серверы
Веб-приложение
Веб-приложение
БД (master)
slave
Облачное хранилище
файлов (Amazon S3,
Azure, Google Storage,
OpenStack Swift) + CDN
БД (master)
slave
Из «бизнес-требований»
появились технические
Отказоустойчивость – умение размещаться сразу в нескольких
разных территориально распределенных датацентрах (в разных
странах)
Большой объем базы данных – шардинг – возможность разделить
базу данных по территории и группам клиентов
MultiTenancy архитектура
Полное разделение логики (кода продукта) и данных
Пользовательские данные – это большой объем статических файлов и
база данных
Универсальный API платформы для многолетней разработки
Динамическое масштабирование по нагрузке
Выбор платформы для
разворачивания инфраструктуры
Минусы размещения на
собственном оборудовании:
Необходимы вложения в инфраструктуру на старте проекта
Сложность масштабирования
Сложность администрирования (в случае размещения в
территориально удаленных датацентрах)
Создание всех сопутствующих сервисов с нуля
«Когда мы только начинали работу над стартапом (FriendFeed), нам нужно было
решить, покупать собственные серверы или же выбрать одного из «облачных»
хостинг-провайдеров – таких как Amazon (AWS). Мы выбрали первое – решили
приобрести собственные серверы. Оглядываясь назад, я думаю, что это было
большой ошибкой»
Брет Тейлор
технический директор Facebook
Используем все возможности масштабирования в
Amazon – исходя из экономики проекта.
Архитектура Bitrix24
Elastic
Load Balancing
Web 1
Web 2
Датацентр 1
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
…
Web N
MySQL
master
S3
master-master
репликация
management,
monitoring,
MySQL backup
Web 1
MySQL
master
Web 2
…
Web N
Датацентр 2
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
Web – автоматическое
масштабирование
Используем связку Elastic Load Balancing + CloudWatch +
Auto Scaling
Очень высокая посещаемость
Elastic Load Balancing
Web 1
Web 2
…
CloudWatch + Auto Scaling
Web N
Web – автоматическое
масштабирование
Используем связку Elastic Load Balancing + CloudWatch +
Auto Scaling
Автоматически стартуют новые машины, если средняя нагрузка CPU превышает
60%
Автоматически останавливаются и выводятся из эксплуатации, если средняя
нагрузка менее 30%
Ставили верхний порог на 80%, однако начинается общая деградация системы
– пользователям работать некомфортно (долго загружаются страницы)
Специфика web-нод
Есть несколько задач, которые
необходимо решить:
На веб-нодах нет пользовательского
контента, все ноды должны быть
абсолютно идентичны.
Read only. Никакие пользовательские
данные не пишутся и не сохраняются
на веб-нодах, так как в любой момент
времени любая машина может быть
выключена или стартует новая из
«чистого» образа.
При этом необходимо обеспечить
изоляцию пользователей друг от
друга.
Специфика web-нод
Нет Apache. Есть PHP-FPM + nginx
У каждого клиента свой домен
Был разработан модуль для PHP:
проверяет корректность домена,
завершает хит с ошибкой, если
имя некорректно
устанавливает соединение с
нужной базой в зависимости от
домена
обеспечивает безопасность и
изоляцию пользователей друг от
друга
служит для шардинга данных
разных пользователей по разным
базам
Статический контент
пользователей сервиса
Статические данные пользователей
храним в S3
Загрузка осуществляется
«прозрачно» для пользователей –
они работают с привычными
интерфейсами
Правильно формируются url’ы к
картинкам, документам и т.п.
Для каждого созданного
Корпоративного портала создается
персональный аккаунт – данные
каждого КП полностью изолированы
друг от друга
Готов только первый «двигатель
самолета»
Elastic
Load Balancing
Web 1
Web 2
Датацентр 1 в
регионе US East
(Virginia)
…
Elastic
Load Balancing
Web N
MySQL
master
S3
master-master
репликация
Web 1
MySQL
master
Web 2
…
Web N
Датацентр 2 в
регионе US East
(Virginia)
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
management,
monitoring,
MySQL backup
Используем master-master
репликацию в MySQL
Особенности настройки MySQL:
auto_increment_increment
auto_increment_offset
Базы в разных датацентрах синхронны, при этом независимы друг от
друга: потеря связности между датацентрами может составлять часы,
данные синхронизируются после восстановления.
В любое время можно добавить новые датацентры.
Пользователь и все сотрудники этой компании работают в одном
датацентре за счет управления балансировщиком.
Сессии храним в базе, но не реплицируем между серверами из-за
большого траффика и возможных «локов»:
SET sql_log_bin = 0 … или …
replicate-wild-ignore-table = %.b_sec_session%
Сценарий 1: авария на одной или
нескольких веб-нодах
Elastic
Load Balancing
Web 1
Web 2
Датацентр 1 в
регионе US East
(Virginia)
…
Web N
MySQL
master
S3
master-master
репликация
Web 1
MySQL
master
Web 2
…
Web N
Датацентр 2 в
регионе US East
(Virginia)
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
management,
monitoring,
MySQL backup
Сценарий 1: авария на одной или
нескольких веб-нодах
Load Balancing определяет вышедшие из строя машины
Исходя из заданных параметров группы балансировки,
автоматически восстанавливается нужное количество
машин
Сценарий 1: авария на одной или
нескольких веб-нодах
Elastic
Load Balancing
Web 1
Web 2
Датацентр 1 в
регионе US East
(Virginia)
…
Web N
MySQL
master
S3
master-master
репликация
Web 1
MySQL
master
Web 2
…
Web N
Датацентр 2 в
регионе US East
(Virginia)
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
management,
monitoring,
MySQL backup
Сценарий 2: потеря связности
между датацентрами
Elastic
Load Balancing
Web 1
Web 2
Датацентр 1 в
регионе US East
(Virginia)
…
Elastic
Load Balancing
Web N
MySQL
master
S3
master-master
репликация
Elastic
Load Balancing
Web 1
MySQL
master
Web 2
…
Web N
Датацентр 2 в
регионе US East
(Virginia)
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
management,
monitoring,
MySQL backup
Сценарий 2: потеря связности
между датацентрами
Каждый датацентр продолжает обслуживать свой сегмент
клиентов
Данные синхронизируются после восстановления связности
Сценарий 3: плановые работы с
базой или авария всего ДЦ
Elastic
Load Balancing
Web 1
Web 2
Датацентр 1 в
регионе US East
(Virginia)
…
Web N
MySQL
master
S3
master-master
репликация
Web 1
MySQL
master
Web 2
…
Web N
Датацентр 2 в
регионе US East
(Virginia)
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
Мониторинг и
масштабирование –
CloudWatch +
AutoScaling
management,
monitoring,
MySQL backup
Сценарий 3: авария или
плановые работы с базой
Весь траффик переключается в один работающий датацентр
CloudWatch определяет возросшую нагрузку на машины и
добавляет их в соответствие с правилами для AutoScaling
Приостанавливается мастер-мастер репликация
Проводятся все необходимые работы с базой, на которую не
идет нагрузка
База включается в работу, восстанавливается репликация
Траффик распределяется на оба датацентра
Гасятся лишние машины, если средняя нагрузка стала ниже
порогового значения
MySQL? Percona Server!
Один из выводов в процессе эксплуатации: используем
один из fork’ов MySQL – Percona Server (обратно совместим
с MySQL)
Быстрое восстановление кэша при рестарте базы
Оптимизирован для Multitenancy приложений с тысячами таблиц
Оптимизирован для сбора статистики по отдельным пользователям
Подробная статистика по медленным запросам
XtraDB и XtraBackup
BLOB, TEXT в таблицах MEMORY (HEAP)
Конфигурация машин
с базами MySQL
Виртуальная машина (EC2)
«Узким» местом может
оказаться
производительность
дисковой системы. Решение
– из EBS дисков Amazon
можно построить software
RAID.
Выбираем RAID-10, так как
он и быстрый, и надежный.
Бэкап базы данных
Еще один вывод: для разных сценариев восстановления
данных необходимо использовать разные бэкапы.
Для восстановления целого сервера БД в случае аварии используем
образ машин со всеми дисками (AMI) – делаем целостный бэкап
RAID’а, используя файловую систему, поддерживающую freeze и
механизм snapshot’ов в Амазоне.
Логические (mysqldump) и бинарные инкрементальные (Xtrabackup)
бэкапы используются для восстановления отдельных баз или таблиц,
поврежденных в случае некорректных операций в системе или ошибок
пользователей.
Второй тип бэкапов делается на выделенном slave, на который не
распределяется общая нагрузка. Тем самым ресурсоемкие операции
создания бэкапов не влияют на работу пользователей.
Обновления ПО на web-нодах
Как ставить обновления на нодах, не допустив
рассинхронизации данных (веб и база)
Сервер
обновлений
Новый
образ AMI
Web 1
Web 2
Web N
Elastic
Load
Balancing
Итоговая архитектура Bitrix24
HTTP/HTTPS
*.com
HTTP/HTTPS
*.com
*.ru
HTTP/HTTPS
*.ru
Elastic
Load Balancing
Elastic
Load Balancing
CloudWatch
+
AutoScaling
Web 1
Web 2
…
cache
S3
Web N
MySQL
master
CloudWatch
CloudWatch
+
AutoScaling
Web 1
master-master
репликация
management,
monitoring,
MySQL backup
Web 2
…
Web N
cache
MySQL
master
CloudWatch
Надежность
Один из приоритетов –
постоянная доступность сервиса,
его отказоустойчивость.
Все веб-ноды идентичны и не
зависимы друг от друга, в случае
аварии автоматически стартуют
новые.
Два датацентра синхронизированы
друг с другом и равноценно
обслуживают клиентов. В случае
аварии на уровне датацентра или
плановых работ с базой, траффик
прозрачно для клиентов
переключается на рабочий
датацентр.
Мониторинг
Мониторим все, но аккуратно
Мгновенные уведомления (sms)
Автоматика
…и аналитика
Логи
Pinba и т.п.
Munin и т.п.
Bitrix24
www.bitrix24.ru
Спасибо за внимание!
Вопросы?
Александр Демидов
demidov@1c-bitrix.ru
+7 (915) 201-1500
@demidov
http://www.1c-bitrix.ru
Скачать