Александр Сербул
Руководитель направления контроля качества интеграции и внедрений
Архитектура Битрикс24
в Amazon Web Services
– изнутри, с пристрастием
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри - Сербул Александр
Битрикс24
www.bitrix24.ru
Социальный интранет
Структура компании, календари
Работа с задачами
Документы, поиск
Управление временем
CRM
Битрикс24.Диск
и многое другое.
Технологические цели
Высокая отказоустойчивость
Высокая, «неограниченная» производительность
Автомасштабирование
Простота развития, прозрачность архитектуры
Не усложнять без необходимости 
Битрикс24 – в цифрах
• Зарегистрировано компаний: 54 000 +
• Каждый день используют 4 000 + компаний
• Еще 2 100 + компаний - через день
• 1 600 + сотрудников в максимальной
компании
• 22 Гб - максимальный размер
использованного пространства компаний
• Общий размер файлов в облаке Amazon –
790 Гб
• 10 000 000 программных страниц в день
• Максимальное число подключенных
интернет-магазинов к одной CRM – 12
S3
Elastic Load Balancing
Web 1
Elastic Load Balancing
Dynamic
Web N
…
CloudWatch
+
AutoScaling
Web 1 Web 2 Web N
…
CloudWatch
+
AutoScaling
Архитектура – с птичьего полета
S3
management,
monitoring,
backup
Static
CDN
js, css
DynamicStatic
CDN
js, css
images(clients)
images(clients)
local
cache
local
cache
local
cache
local
cache
local
cache
control cache: memcached
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
master-master replication
master-master replication
master-master replication
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
control cache: memcached
control cache: memcached
control cache: memcached
control cache: memcached
control cache: memcached
Web 2
local
cache
AWS – это «живые»
паттерны проектирования
Приложения тоже имеют «нормальные формы»
Многие этого не понимают
Риск изобретения неудачного велосипеда
Риск: «Зачем делать просто, если можно сложно?»
Используем опыт взрослых расширяемых архитектур
Собираем из «кубиков»
Архитектор собирает костяк проекта «из «LEGO»
Основные усилия тратим на нестандартный функционал
Собираем из «кубиков»
Несколько датацентров
Можно быстро мигрировать машины, данные и сервисы
между датацентрами
Спасает при авариях
Свобода перемещения IP-адресов
EC2
EC2
Elastic IP:
23.34.176.15
#!/bin/sh
NODE_INSTANCE_ID=$1
# http://aws.amazon.com/ec2/instance-types/
NODE_TARGET_TYPE='m2.2xlarge'
NODE_ELASTIC_IP=$2
ec2-stop-instances $NODE_INSTANCE_ID
while ec2-describe-instances $NODE_INSTANCE_ID | grep -q stopping
do
sleep 5
echo 'Waiting'
done
ec2-modify-instance-attribute --instance-type $NODE_TARGET_TYPE $NODE_INSTANCE_ID
ec2-start-instances $NODE_INSTANCE_ID
ec2-associate-address $NODE_ELASTIC_IP -i $NODE_INSTANCE_ID
Диски
Elastic Block Store: 1GB – 1TB
Блочное устройство
AFR (annual failure rate) ~0.1-0.5% (при регулярных
снепшотах)
IO: десятки MB/sec – серьезно уступают «железным»
Хорошо помогает софтварный рейд (md)
raid0 или raid0+1?
Диски живут в одном «ДЦ», а их снепшоты между «ДЦ», на
уровне региона
«Provisioned EBS»: до 4000 IOPS/диск
Снепшоты данных и серверов
Делать снепшоты рейдов можно и нужно
Нет инструментов очистки устаревших снепшотов и образов
машин, их нужно писать
Unix: ec2-consistent-snapshot
или:
fsfreeze –f mountpoint (Linux Ext3/4, ReiserFS, JFS, XFS)
AWS SDK for PHP:
AmazonEC2::create_snapshot ( $volume_id, $opt )
AmazonEC2::create_image ( $instance_id, $name, $opt )
fsfreeze –u mountpoint
Сервер веб-приложений
PHP + APC
Модифицированный «1C-Битрикс:
Корпоративный портал» - кластерная
редакция
nginx
Сервер веб-приложений
Балансировщик ELB (SSL)
Сервер MySQL
MySQL (Percona/XtraDB)
Кэш данных (чтение): APC
Кэш данных (запись): memcached
Изменяемые файлы
Simple Storage Service (s3)
Кластер серверов веб-приложений
Region = группа связанных датацентров
ДЦ1 ДЦ2
Балансировщик (ELB)
Группа автомасштабирования (AutoScaling)
Мониторинг (CloudWatch)
Образ машины (AMI)
Автомасштабирование
Балансировка
Работа с файлами в s3
API хранилища для «прозрачной» работы с файлами
API для разработчиков (не используем стандартные
функции для работы с файлами)
Избегаем «диких» файлов
«Прозрачность» для всех модулей системы
Таблица с данными обо всех подключенных хранилищах
Таблица со списком файлов, и указанием, где они хранятся
(можно сразу хранить дополнительную информацию)
Не используем file_size, getimagesize и т.п. – сохраняем все
данные при аплоаде
Раздача статики: s3 + CDN
Веб-сервер
Временные токены к s3 и др.
Раньше для каждой учетки - новый IAM пользователь,
получаем AccessKey, SecretKey. Но есть лимит: макс. 15 000
(по умолчанию – 5 000)
Сейчас используем Security Token Service (STS) – временные
учетные записи
Права внутри одной директории:
PutObject
GetObject
DeleteObject
Масштабирование БД
ДЦ1 ДЦ2
Балансировщики (ELB)
AutoScaling
Мониторинг
(CloudWatch)
Образ машины (AMI)
Percona XtraDB Master-
Master (Active/Passive)
Масштабирование PHP
Вертикальныйшардинг
DB1
(Passive)
DB1
(Active)
DB2
(Passive)
DB2
(Active)
DB3
(Passive)
DB3
(Active)
Миллионы таблиц,
десятки тысяч баз данных
Бэкап БД
Диск (EBS)
Буферы MySQL
(InnoDB) в памяти
Unix: ec2-consistent-snapshot
или:
“FLUSH TABLES WITH READ
LOCK”
fsfreeze –f mountpoint (Linux
Ext3/4, ReiserFS, JFS, XFS)
AWS SDK for PHP:
AmazonEC2::create_snapshot (
$volume_id, $opt )
AmazonEC2::create_image (
$instance_id, $name, $opt )
fsfreeze –u mountpoint
“UNLOCK TABLES”
Данные MySQL
(InnoDB) на диске
Хранилище данных
(на базе S3 = Simple
Storage Service)
Снепшоты.
Автоматически:
консолидация бэкапов,
сохранение только
инкрементов
Обновление кластера
Web 1
Web 2
Web N
Сервер
обновлений
Новый
образ AMI
Elastic
Load
Balancing
Как ставить
обновления на
нодах, не
допустив
рассинхрони-
зации данных
(веб и база)?
Обновление кластера
Как ставить обновления на серверах, не допустив
рассинхронизации данных (веб и база):
Каждое клиентское приложение работает с собственной базой.
Все обновления ставятся на выделенный instance, куда не приходит
нагрузка.
Из этого инстанса делается новый образ AMI.
Последовательно каждая машина помечается «плохой», при этом
новые веб-ноды стартуют уже из нового образа.
В веб-приложении существует механизм проверки соответствия версии
ПО и базы.
Если клиентский запрос приходит на ноду с новым ПО, а база еще
старая, по первому хиту происходит обновление.
Мониторинг
Лучше – стандартные решения (Nagios, Zabbix и т.п.), а не
самописные.
Дежурная смена и/или мгновенные уведомления.
Мониторить – всё.
Но – аккуратно. Тысячи уведомлений будут бесполезны.
Автоматизация типовых реакций.
Мониторить систему мониторинга.
В идеальном мире – распределенная система мониторинга.
«Мониторинг безопасности» – изменения файлов и т.п.
Мониторинг - тест
Nagios
AWS SDK for PHP
Тест
Тест
Тест
Тест
Обработчик события
Обработчик события
Обработчик события
CloudWatch -
автомасштабирование
Обработчик события
Ядро
Прослойка
вспомогательного кода
(PHP, bash)
Утилиты AWS
для консоли
API Амазона
Тест nagios
Pinba
Тест
Мониторинг - обработчик
Nagios
AWS SDK for PHP
Тест
Тест
Тест
Тест
Обработчик события
Обработчик события
Обработчик события
CloudWatch -
автомасштабирование
Обработчик события
Ядро
Обработчик события
Прослойка вспомогательного кода (PHP, bash)
Утилиты AWS
для консоли
API Амазона
Мониторинг и аналитика
В CloudWatch недостаточно возможностей, но используем его
максимально
AWS SDK for PHP и вообще работа с API амазона не всегда
прямолинейна – нужна прослойка
Для основного мониторинга и активной обратной связи
используем Nagios и его обработчики событий
Для аналитики в основном используем Munin, часть данных
берем из CloudWatch
Присматриваемся к gearman, используем SQS (сервис очередей
AWS)
S3
Elastic Load Balancing
Web 1
Elastic Load Balancing
Dynamic
Web N
…
CloudWatch
+
AutoScaling
Web 1 Web 2 Web N
…
CloudWatch
+
AutoScaling
Архитектура – с птичьего полета
S3
management,
monitoring,
backup
Static
CDN
js, css
DynamicStatic
CDN
js, css
images(clients)
images(clients)
local
cache
local
cache
local
cache
local
cache
local
cache
control cache: memcached
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
master-master replication
master-master replication
master-master replication
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
mysqld
control cache: memcached
control cache: memcached
control cache: memcached
control cache: memcached
control cache: memcached
Web 2
local
cache
Спасибо за внимание!
Вопросы?
Александр Сербул
serbul@1c-bitrix.ru
@AlexSerbul

More Related Content

PPTX
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
PPTX
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
PDF
Аудит веб-приложений
PPTX
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
PPTX
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
PDF
Solit 2013, Разработка приложений в облаке на примере Amazon Web Services, Сл...
PDF
Modern apps Windows Azure
PPTX
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
Аудит веб-приложений
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Solit 2013, Разработка приложений в облаке на примере Amazon Web Services, Сл...
Modern apps Windows Azure
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...

What's hot (19)

PDF
Презентация Сафонова и Прусенка на семинаре "Продавайте больше"
PDF
TCO аренда облачной IT инфраструктуры Онланты vs покупка серверов
PPTX
CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?
PDF
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
PPTX
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
PPTX
Снижение затрат на ERP системы с облачными технологиями
PPT
Development on the Knee by Vladimir Khramtsov
PPTX
2014.12.23 Александр Андреев, Parallels
PPTX
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
PDF
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
PDF
Alexei Vladishev - Zabbix 3.0 что дальше
PPTX
Масштабирование социальных приложений с помощью AWS
PPTX
Ускорение показа превью изображений в Яндекс.Диске / Сергей Нечаев (Яндекс)
PPTX
Что нового в 11.0?
PDF
Автоматизация анализа логов на базе Elasticsearch
PDF
Shadow Fight 2: архитектура системы аналитики для миллиарда событий
PPTX
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
PPTX
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
PPT
опыт Clickberry.com стартап на drupal в облаке павел загор
Презентация Сафонова и Прусенка на семинаре "Продавайте больше"
TCO аренда облачной IT инфраструктуры Онланты vs покупка серверов
CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Снижение затрат на ERP системы с облачными технологиями
Development on the Knee by Vladimir Khramtsov
2014.12.23 Александр Андреев, Parallels
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Alexei Vladishev - Zabbix 3.0 что дальше
Масштабирование социальных приложений с помощью AWS
Ускорение показа превью изображений в Яндекс.Диске / Сергей Нечаев (Яндекс)
Что нового в 11.0?
Автоматизация анализа логов на базе Elasticsearch
Shadow Fight 2: архитектура системы аналитики для миллиарда событий
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Настройка и оптимизация высоконагруженных J2EE веб-приложений / Шамим Ахмед (...
опыт Clickberry.com стартап на drupal в облаке павел загор
Ad

Viewers also liked (9)

PPT
Юлия Герасимович: Инструменты автоматизации для мероприятий
PDF
Халиков Антон. Выступление на FailConf 2012
PDF
Борис Дьяконов и Евгений Кобзев. Выступление на FailСonf-2013
PPTX
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
PPTX
А. Гейн "Что мы делали с большими графами", DUMP-2014
ODP
ekb.py - Naumen
PPT
И. Новиков "Нужен ли нам продукт?", DUMP-2014
PDF
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
PDF
тестирование и грабли
Юлия Герасимович: Инструменты автоматизации для мероприятий
Халиков Антон. Выступление на FailConf 2012
Борис Дьяконов и Евгений Кобзев. Выступление на FailСonf-2013
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
А. Гейн "Что мы делали с большими графами", DUMP-2014
ekb.py - Naumen
И. Новиков "Нужен ли нам продукт?", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
тестирование и грабли
Ad

Similar to DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри - Сербул Александр (20)

PPTX
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
PPTX
(2 часть) 1С-Битрикс. Производительность проекта. Архитектура проекта «Битрик...
PPT
1С-Битрикс - Производительность
PPTX
Презентация технологии веб-кластеров
PPTX
Веб-кластер
PPT
Битрикс-Framework
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PPTX
Новые возможности развертывания и масштабирования open source приложений в Az...
PPTX
Современные технологии сайтостроения для решения бизнес-задач
PPTX
Open source technologies in Microsoft cloud - MS SWIT 2014
PPT
Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?
PPT
битрикс Framework сергей рыжиков
PDF
FT & HA Rails приложений приложений — это просто
PPTX
Webcluster cases
PDF
Демонстрация возможностей по автоматизации ЦОД
PPT
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
PDF
Губкин Александр
PPT
1С-Битрикс - Версия 10.0
PPTX
Roman Zdebskiy - Windows Azure
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
(2 часть) 1С-Битрикс. Производительность проекта. Архитектура проекта «Битрик...
1С-Битрикс - Производительность
Презентация технологии веб-кластеров
Веб-кластер
Битрикс-Framework
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Новые возможности развертывания и масштабирования open source приложений в Az...
Современные технологии сайтостроения для решения бизнес-задач
Open source technologies in Microsoft cloud - MS SWIT 2014
Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?
битрикс Framework сергей рыжиков
FT & HA Rails приложений приложений — это просто
Webcluster cases
Демонстрация возможностей по автоматизации ЦОД
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Губкин Александр
1С-Битрикс - Версия 10.0
Roman Zdebskiy - Windows Azure

More from it-people (20)

PDF
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
PDF
«Scrapy internals» Александр Сибиряков, Scrapinghub
PDF
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
PDF
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
PDF
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
PDF
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
PDF
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
PDF
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
PDF
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
PDF
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
PDF
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
PDF
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
PDF
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
PDF
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
PDF
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
PDF
«(Без)опасный Python», Иван Цыганов, Positive Technologies
PDF
«Python of Things», Кирилл Борисов, Яндекс
PDF
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
PDF
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
PDF
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«Python of Things», Кирилл Борисов, Яндекс
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...

DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри - Сербул Александр

  • 1. Александр Сербул Руководитель направления контроля качества интеграции и внедрений Архитектура Битрикс24 в Amazon Web Services – изнутри, с пристрастием
  • 3. Битрикс24 www.bitrix24.ru Социальный интранет Структура компании, календари Работа с задачами Документы, поиск Управление временем CRM Битрикс24.Диск и многое другое.
  • 4. Технологические цели Высокая отказоустойчивость Высокая, «неограниченная» производительность Автомасштабирование Простота развития, прозрачность архитектуры Не усложнять без необходимости 
  • 5. Битрикс24 – в цифрах • Зарегистрировано компаний: 54 000 + • Каждый день используют 4 000 + компаний • Еще 2 100 + компаний - через день • 1 600 + сотрудников в максимальной компании • 22 Гб - максимальный размер использованного пространства компаний • Общий размер файлов в облаке Amazon – 790 Гб • 10 000 000 программных страниц в день • Максимальное число подключенных интернет-магазинов к одной CRM – 12
  • 6. S3 Elastic Load Balancing Web 1 Elastic Load Balancing Dynamic Web N … CloudWatch + AutoScaling Web 1 Web 2 Web N … CloudWatch + AutoScaling Архитектура – с птичьего полета S3 management, monitoring, backup Static CDN js, css DynamicStatic CDN js, css images(clients) images(clients) local cache local cache local cache local cache local cache control cache: memcached mysqld mysqld mysqld mysqld mysqld mysqld master-master replication master-master replication master-master replication mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld control cache: memcached control cache: memcached control cache: memcached control cache: memcached control cache: memcached Web 2 local cache
  • 7. AWS – это «живые» паттерны проектирования Приложения тоже имеют «нормальные формы» Многие этого не понимают Риск изобретения неудачного велосипеда Риск: «Зачем делать просто, если можно сложно?» Используем опыт взрослых расширяемых архитектур
  • 8. Собираем из «кубиков» Архитектор собирает костяк проекта «из «LEGO» Основные усилия тратим на нестандартный функционал
  • 10. Несколько датацентров Можно быстро мигрировать машины, данные и сервисы между датацентрами Спасает при авариях
  • 12. #!/bin/sh NODE_INSTANCE_ID=$1 # http://aws.amazon.com/ec2/instance-types/ NODE_TARGET_TYPE='m2.2xlarge' NODE_ELASTIC_IP=$2 ec2-stop-instances $NODE_INSTANCE_ID while ec2-describe-instances $NODE_INSTANCE_ID | grep -q stopping do sleep 5 echo 'Waiting' done ec2-modify-instance-attribute --instance-type $NODE_TARGET_TYPE $NODE_INSTANCE_ID ec2-start-instances $NODE_INSTANCE_ID ec2-associate-address $NODE_ELASTIC_IP -i $NODE_INSTANCE_ID
  • 13. Диски Elastic Block Store: 1GB – 1TB Блочное устройство AFR (annual failure rate) ~0.1-0.5% (при регулярных снепшотах) IO: десятки MB/sec – серьезно уступают «железным» Хорошо помогает софтварный рейд (md) raid0 или raid0+1? Диски живут в одном «ДЦ», а их снепшоты между «ДЦ», на уровне региона «Provisioned EBS»: до 4000 IOPS/диск
  • 14. Снепшоты данных и серверов Делать снепшоты рейдов можно и нужно Нет инструментов очистки устаревших снепшотов и образов машин, их нужно писать Unix: ec2-consistent-snapshot или: fsfreeze –f mountpoint (Linux Ext3/4, ReiserFS, JFS, XFS) AWS SDK for PHP: AmazonEC2::create_snapshot ( $volume_id, $opt ) AmazonEC2::create_image ( $instance_id, $name, $opt ) fsfreeze –u mountpoint
  • 15. Сервер веб-приложений PHP + APC Модифицированный «1C-Битрикс: Корпоративный портал» - кластерная редакция nginx Сервер веб-приложений Балансировщик ELB (SSL) Сервер MySQL MySQL (Percona/XtraDB) Кэш данных (чтение): APC Кэш данных (запись): memcached Изменяемые файлы Simple Storage Service (s3)
  • 16. Кластер серверов веб-приложений Region = группа связанных датацентров ДЦ1 ДЦ2 Балансировщик (ELB) Группа автомасштабирования (AutoScaling) Мониторинг (CloudWatch) Образ машины (AMI)
  • 19. Работа с файлами в s3 API хранилища для «прозрачной» работы с файлами API для разработчиков (не используем стандартные функции для работы с файлами) Избегаем «диких» файлов «Прозрачность» для всех модулей системы Таблица с данными обо всех подключенных хранилищах Таблица со списком файлов, и указанием, где они хранятся (можно сразу хранить дополнительную информацию) Не используем file_size, getimagesize и т.п. – сохраняем все данные при аплоаде
  • 20. Раздача статики: s3 + CDN Веб-сервер
  • 21. Временные токены к s3 и др. Раньше для каждой учетки - новый IAM пользователь, получаем AccessKey, SecretKey. Но есть лимит: макс. 15 000 (по умолчанию – 5 000) Сейчас используем Security Token Service (STS) – временные учетные записи Права внутри одной директории: PutObject GetObject DeleteObject
  • 22. Масштабирование БД ДЦ1 ДЦ2 Балансировщики (ELB) AutoScaling Мониторинг (CloudWatch) Образ машины (AMI) Percona XtraDB Master- Master (Active/Passive) Масштабирование PHP Вертикальныйшардинг DB1 (Passive) DB1 (Active) DB2 (Passive) DB2 (Active) DB3 (Passive) DB3 (Active) Миллионы таблиц, десятки тысяч баз данных
  • 23. Бэкап БД Диск (EBS) Буферы MySQL (InnoDB) в памяти Unix: ec2-consistent-snapshot или: “FLUSH TABLES WITH READ LOCK” fsfreeze –f mountpoint (Linux Ext3/4, ReiserFS, JFS, XFS) AWS SDK for PHP: AmazonEC2::create_snapshot ( $volume_id, $opt ) AmazonEC2::create_image ( $instance_id, $name, $opt ) fsfreeze –u mountpoint “UNLOCK TABLES” Данные MySQL (InnoDB) на диске Хранилище данных (на базе S3 = Simple Storage Service) Снепшоты. Автоматически: консолидация бэкапов, сохранение только инкрементов
  • 24. Обновление кластера Web 1 Web 2 Web N Сервер обновлений Новый образ AMI Elastic Load Balancing Как ставить обновления на нодах, не допустив рассинхрони- зации данных (веб и база)?
  • 25. Обновление кластера Как ставить обновления на серверах, не допустив рассинхронизации данных (веб и база): Каждое клиентское приложение работает с собственной базой. Все обновления ставятся на выделенный instance, куда не приходит нагрузка. Из этого инстанса делается новый образ AMI. Последовательно каждая машина помечается «плохой», при этом новые веб-ноды стартуют уже из нового образа. В веб-приложении существует механизм проверки соответствия версии ПО и базы. Если клиентский запрос приходит на ноду с новым ПО, а база еще старая, по первому хиту происходит обновление.
  • 26. Мониторинг Лучше – стандартные решения (Nagios, Zabbix и т.п.), а не самописные. Дежурная смена и/или мгновенные уведомления. Мониторить – всё. Но – аккуратно. Тысячи уведомлений будут бесполезны. Автоматизация типовых реакций. Мониторить систему мониторинга. В идеальном мире – распределенная система мониторинга. «Мониторинг безопасности» – изменения файлов и т.п.
  • 27. Мониторинг - тест Nagios AWS SDK for PHP Тест Тест Тест Тест Обработчик события Обработчик события Обработчик события CloudWatch - автомасштабирование Обработчик события Ядро Прослойка вспомогательного кода (PHP, bash) Утилиты AWS для консоли API Амазона Тест nagios Pinba Тест
  • 28. Мониторинг - обработчик Nagios AWS SDK for PHP Тест Тест Тест Тест Обработчик события Обработчик события Обработчик события CloudWatch - автомасштабирование Обработчик события Ядро Обработчик события Прослойка вспомогательного кода (PHP, bash) Утилиты AWS для консоли API Амазона
  • 29. Мониторинг и аналитика В CloudWatch недостаточно возможностей, но используем его максимально AWS SDK for PHP и вообще работа с API амазона не всегда прямолинейна – нужна прослойка Для основного мониторинга и активной обратной связи используем Nagios и его обработчики событий Для аналитики в основном используем Munin, часть данных берем из CloudWatch Присматриваемся к gearman, используем SQS (сервис очередей AWS)
  • 30. S3 Elastic Load Balancing Web 1 Elastic Load Balancing Dynamic Web N … CloudWatch + AutoScaling Web 1 Web 2 Web N … CloudWatch + AutoScaling Архитектура – с птичьего полета S3 management, monitoring, backup Static CDN js, css DynamicStatic CDN js, css images(clients) images(clients) local cache local cache local cache local cache local cache control cache: memcached mysqld mysqld mysqld mysqld mysqld mysqld master-master replication master-master replication master-master replication mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld mysqld control cache: memcached control cache: memcached control cache: memcached control cache: memcached control cache: memcached Web 2 local cache