SlideShare a Scribd company logo
Александр Сербул
Руководитель направления контроля качества интеграции и внедрений
Архитектура Битрикс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

What's hot (19)

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

Viewers also liked (9)

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

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

PPTX
Alexander Serbul - Development and administration through testing - cloud ser...
Andrew Mayorov
 
PPTX
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Uptime community
 
PPTX
(2 часть) 1С-Битрикс. Производительность проекта. Архитектура проекта «Битрик...
ForkConf
 
PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Ontico
 
PPTX
Жизнь проекта на production
Nikolay Sivko
 
PPTX
Bitrix clouds without_admins
Alexander Demidov
 
PPTX
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Ontico
 
PPTX
Highload: проблемы и решения
Олег Шерыхалин
 
PPTX
UFADevCom'13#1 Шерыхалин Олег
UFADevCom
 
PDF
Развитие сетевой архитектуры для ЦОД Cisco ACI
Cisco Russia
 
PDF
Развитие решений Cisco для ЦОД глазами специалиста по серверам и приложениям...
Cisco Russia
 
PPTX
Варианты использования AWS
Andrey Zaychikov
 
PPTX
Александр Сербул – Разработка и эксплуатация облачных сервисов Битрикс изнутри
404fest
 
PDF
IT-инфраструктура. FAQ для разработчика
Mikhail Chinkov
 
PDF
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Ontico
 
PDF
Our AWS Cloud Journey - Andrew Boag
DrupalCampDN
 
PPTX
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Ontico
 
PDF
Opensource оптимизация инфраструктурных затрат
КРОК
 
PDF
Extreme cloud storage on free bsd (Андрей Пантюхин)
Ontico
 
PDF
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Fuenteovejuna
 
Alexander Serbul - Development and administration through testing - cloud ser...
Andrew Mayorov
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Uptime community
 
(2 часть) 1С-Битрикс. Производительность проекта. Архитектура проекта «Битрик...
ForkConf
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Ontico
 
Жизнь проекта на production
Nikolay Sivko
 
Bitrix clouds without_admins
Alexander Demidov
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Ontico
 
Highload: проблемы и решения
Олег Шерыхалин
 
UFADevCom'13#1 Шерыхалин Олег
UFADevCom
 
Развитие сетевой архитектуры для ЦОД Cisco ACI
Cisco Russia
 
Развитие решений Cisco для ЦОД глазами специалиста по серверам и приложениям...
Cisco Russia
 
Варианты использования AWS
Andrey Zaychikov
 
Александр Сербул – Разработка и эксплуатация облачных сервисов Битрикс изнутри
404fest
 
IT-инфраструктура. FAQ для разработчика
Mikhail Chinkov
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Ontico
 
Our AWS Cloud Journey - Andrew Boag
DrupalCampDN
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Ontico
 
Opensource оптимизация инфраструктурных затрат
КРОК
 
Extreme cloud storage on free bsd (Андрей Пантюхин)
Ontico
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Fuenteovejuna
 
Ad

More from it-people (20)

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

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