Основные функциональные возможности системы SignMeUp - автоматизация управления инструкторами автошкол с возможностью записи на занятия через Интернет.
* XSLT в качестве языка шаблонов.
* XML для передачи модели в MVC.
* ObjectXPathNavigator помогает совместить типизированные модели и XML.
* Внедряем ASPX веб-формы в MVC.
План выступления:
1. Зачем?
1. Проектированием хранилищ данных занимается почти каждый.
2. В начале проекта сложно представить, какие новые требования появятся через месяц. (КО напоминает)
3. "Много думать" - бессмысленно, все равно все поменяется.
4. Нужна схема, которую можно будет легко расширять и перетасовывать.
5. Дерево объектов - искомая структура.
2. Примеры деревьев (иерархических структур):
1. Организационная диаграмма.
2. Файлы и папки на диске
3. Файлы и папки - отличная метафора, от которой мы и будем плясать. На диске успешно хранится все, что нужно. Аналогично любые данные хорошо укладываются в дерево.
4. Пример №1
1. Традиционное проектирование. Рисуем UML-диаграмму: новость, каталог новостей, иерархия разделов каталога, страны, к которым принадлежат разделы, описания стран.
2. Выражаем то же самое в виде дерева объектов "статья", "папка", "страна".
3. Такое дерево реализуется примитивнейшей структурой классов - класс Node и его наследники.
1. Как следствие, для моделирования иерархической структуры диаграмма классов не подходит.
5. Полезные операции в дереве объектов:
1. Найти объект по пути. Путь - это последовательность ребер. Полный аналог пути к файлу.
1. Объект может иметь осмысленный путь - это удобно для пользователя.
2. Выбрать все объекты заданных типов, находящиеся в указанной ветви дерева.
1. Одна и та же операция позволяет выбрать все новости про заданную страну или все новости из указанной категории.
3. Наследование свойств вниз по дереву:
1. Конфигурационные настройки.
2. Роли пользователей.
6. Переход от дерева к ориентированному графу
1. Дерева (один родительский узел) не всегда достаточно.
2. Пример - новость может принадлежать нескольким разделам сразу.
3. Надо позволить узлу иметь нескольких родителей - получаем ориентированный граф.
4. Не должно быть циклов
1. Циклы создают проблемы.
2. В них нет никакого смысла для целей хранения данных.
7. Объект Relation - на диаграмму классов, моделирующих дерево добавляем новый класс: parent, child, name.
1. name - имя отношения, которое можно использовать при по
Ukraine, Kharkiv, Jave Club. (Day 2)
In this presentation you can find the brief overview of Clloud Computing development vs. desktop app. development. This presentation oriented to persons with general level of knowledge in such topics as:
Amazon AWS, cloud computing, CAP theorem, logical time.
Основные функциональные возможности системы SignMeUp - автоматизация управления инструкторами автошкол с возможностью записи на занятия через Интернет.
* XSLT в качестве языка шаблонов.
* XML для передачи модели в MVC.
* ObjectXPathNavigator помогает совместить типизированные модели и XML.
* Внедряем ASPX веб-формы в MVC.
План выступления:
1. Зачем?
1. Проектированием хранилищ данных занимается почти каждый.
2. В начале проекта сложно представить, какие новые требования появятся через месяц. (КО напоминает)
3. "Много думать" - бессмысленно, все равно все поменяется.
4. Нужна схема, которую можно будет легко расширять и перетасовывать.
5. Дерево объектов - искомая структура.
2. Примеры деревьев (иерархических структур):
1. Организационная диаграмма.
2. Файлы и папки на диске
3. Файлы и папки - отличная метафора, от которой мы и будем плясать. На диске успешно хранится все, что нужно. Аналогично любые данные хорошо укладываются в дерево.
4. Пример №1
1. Традиционное проектирование. Рисуем UML-диаграмму: новость, каталог новостей, иерархия разделов каталога, страны, к которым принадлежат разделы, описания стран.
2. Выражаем то же самое в виде дерева объектов "статья", "папка", "страна".
3. Такое дерево реализуется примитивнейшей структурой классов - класс Node и его наследники.
1. Как следствие, для моделирования иерархической структуры диаграмма классов не подходит.
5. Полезные операции в дереве объектов:
1. Найти объект по пути. Путь - это последовательность ребер. Полный аналог пути к файлу.
1. Объект может иметь осмысленный путь - это удобно для пользователя.
2. Выбрать все объекты заданных типов, находящиеся в указанной ветви дерева.
1. Одна и та же операция позволяет выбрать все новости про заданную страну или все новости из указанной категории.
3. Наследование свойств вниз по дереву:
1. Конфигурационные настройки.
2. Роли пользователей.
6. Переход от дерева к ориентированному графу
1. Дерева (один родительский узел) не всегда достаточно.
2. Пример - новость может принадлежать нескольким разделам сразу.
3. Надо позволить узлу иметь нескольких родителей - получаем ориентированный граф.
4. Не должно быть циклов
1. Циклы создают проблемы.
2. В них нет никакого смысла для целей хранения данных.
7. Объект Relation - на диаграмму классов, моделирующих дерево добавляем новый класс: parent, child, name.
1. name - имя отношения, которое можно использовать при по
Ukraine, Kharkiv, Jave Club. (Day 2)
In this presentation you can find the brief overview of Clloud Computing development vs. desktop app. development. This presentation oriented to persons with general level of knowledge in such topics as:
Amazon AWS, cloud computing, CAP theorem, logical time.
Презентация технологии веб-кластеров
Основные задачи, которые решает веб-кластер:
Обеспечение высокой доступности сервиса (так называемые HA - High Availability или Failover кластеры)
Масштабирование веб-проекта в условиях возрастающей нагрузки (HP - High Performance кластеры)
Балансирование нагрузки, трафика, данных между несколькими серверами
Создание целостной резервной копии данных для MySQL
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Uptime community
Александр Демидов, директор направления облачных сервисов Битрикс24
1. Почему Битрикс24 и другие сервисы 1С-Битрикс живут в облаке, как мы администрируем всю нашу инфраструктуру и как справляемся с сотнями виртуальных машин и сервисов силами трех человек. Как коммуницируем с разработчиками и QA, как деплоим, да и вообще — как живем и развиваемся.
2. Мониторинг — наше всё! Распределенная система real-time мониторинга (был nagios, стал shinken), аналитика, автоматизация, работа с инцидентами.
3. Бонус — на какие самые серьезные грабли мы наступали за пять лет, прошедших с запуска «Битрикс24», и как научились их обходить.
Alexander Serbul - Development and administration through testing - cloud service "Bitrix24" in Amazon
1. Разработка и администрирование
через тестирование
- облачный сервис «Битрикс24» в Амазоне
Александр Сербул
1С-Битрикс
@AlexSerbul
2. Наши цели
• Посмотреть на Amazon Web Services (AWS) с
«птичьего полета»
• Научиться эффективно с ним работать, в т.ч. на PHP
• Уверенно развивать функционал, не отставая от
рынка
• Держать созданную систему под постоянным
контролем
• Изучить результат - сервис «Битрикс24» - изнутри
3. AWS с «птичьего полета»
Управляемый из кода хостинг с множеством реализованных
Enterprise-паттернов :
• Amazon Elastic Compute Cloud (EC2) – серверы и образы
• Amazon Elastic Block Store (EBS) - внешние диски
• Auto Scaling – масштабирование (от нагрузки и т.д.)
• Elastic Load Balancing - балансировщики
• Amazon Simple Storage Service (S3) – облачное хранилище
4. AWS с «птичьего полета»
• Amazon Simple Queue Service (SQS) - очереди
сообщений
• Amazon Simple Notification Service (SNS) -
уведомлялка
• Amazon Simple Email Service (SES) – рассылки почты
• AWS Identity and Access Management (IAM) –
управление учетками
5. AWS с «птичьего полета»
• Amazon CloudFront – CDN по всему миру
• Amazon Route 53 – управление DNS
• Amazon Relational Database Service (RDS) – MySQL с
slaves и auto-failover
• Amazon DynamoDB, Amazon SimpleDB - NoSQL
• Amazon ElastiCache - «неубиваемый» memcached
6. AWS с «птичьего полета»
• Amazon CloudWatch – мониторинг + аналитика
• Amazon Virtual Private Cloud (VPC) – собственная
подсетка (с кластерами)
Полезных сервисов много, готовые паттерны
позволяют просто масштабироваться и обеспечивать
неплохую отказоустойчивость (SLA до 99,95%).
7. AWS с «птичьего полета»
Availability zone (AZ) =
«датацентр»
Высокоскоростные
каналы между ДЦ
Region = группа связанных датацентров
8. AWS с «птичьего полета»
Availability zone (AZ) =
«датацентр»
Серверы (EC2) Снепшоты дисков
Диски (EBS) – Образы серверов
доступны Данные в облаке (S3)
только внутри Учетки (IAM)
датацентра Балансировщики
и др. –
реплицируются
«между»
датацентрами, на
уровне региона
Region = группа связанных датацентров
9. AWS – все не так гладко
• Веб-сервисы внутри архитектурно отличаются друг
от друга, в т.ч . по подходу и API. Не всегда удобно
стыкуются.
• Прослеживается эволюция архитектур – например
«наслоения концепций» в IAM/S3
• Имеются неочевидные «жесткие» ограничения и
лимиты – например число учеток в IAM (<=5000)
10. AWS – нужно строить свое
управляющее ядро
• Внутренняя система мониторинга CloudWatch - пока очень
ограничена, уступает напр. Nagios/Munin
• Измерения внутри машин (top) и из CloudWatch – могут
отличаться в разы (CPU, LA, др.)
• Нередко «соседи» на виртуальной машине внезапно
влияют на производительность (CPU Stolen %)
Нужно научиться держать конфигурацию под контролем,
автоматизировав максимум операций.
11. AWS SDK for PHP
REST API веб-сервисов Амазона
SSL (как правило)
Консольный клиент для unix, AWS SDK for PHP
написан на java
Библиотека,
документация,
примеры (2.1М)
• http://aws.amazon.com/php/
• http://aws.amazon.com/sdkforphp/
12. AWS SDK for PHP - документация
http://docs.amazonwebservices.com/AWSSDKforPHP/latest/
13. Бэкап данных в S3/Snapshots
Файлы на
диске Хранилище данных
(S3 = Simple Storage
Unix: s3tools, s3fs Service)
AWS SDK for PHP:
AmazonS3::create_object ( $bucket, Объекты или
$filename, $opt ) и др. снепшоты.
Автоматически:
Диск (EBS) консолидация
бэкапов, сохранение
только инкрементов
AWS SDK for PHP:
AmazonEC2::create_snapshot (
$volume_id, $opt )
Машина с
дисками
AWS SDK for PHP:
AmazonEC2::create_image ( $instance_id,
$name, $opt )
14. Бэкап данных в S3/Snapshots
• Нет инструментов очистки устаревших снепшотов и образов
машин, их нужно писать (иначе можно упереться в лимит).
• Нужно писать оболочку, для повтора неудавшихся
операций, логирования и т.п.
15. Бэкап данных в S3/Snapshots
…
foreach ($vols as $path => $id) {
$response = $ec2->create_snapshot($id, array('Description'=>"Snapshot:".$instanceRole.":".$path));
if ( $response->isOK() ) {
bxc_log("Started snapshot for ($id): ".$response->body->snapshotId);
$r = $ec2->create_tags($response->body->snapshotId, array(
array('Key' => 'Name', 'Value' => "Snapshot:".$instanceRole.":".$path),
array('Key' => 'Role', 'Value' => "Snapshot:".$instanceRole.":".$path),
));
if ( !$r->isOK() ) {
bxc_log_amazon_error($response, __FUNCTION__.":".__LINE__);
}
} else {
bxc_log_amazon_error($response, __FUNCTION__.":".__LINE__);
return false;
}
}
• Полезно создаваемым объектам присваивать тэги, для
дальнейшей фильтрации
16. Бэкап MySQL в S3/Snapshots
Unix: ec2-consistent-snapshot
или:
“FLUSH TABLES WITH READ
LOCK”
Буферы MySQL fsfreeze –f mountpoint (Linux
(InnoDB) в памяти 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
Хранилище данных
Диск (EBS) (на базе S3 = Simple
Storage Service)
Снепшоты.
Данные MySQL
(InnoDB) на диске Автоматически:
консолидация
бэкапов, сохранение
только инкрементов
17. Балансировка/Переключение трафика
CNAME к «myproj-1873425.us-east-
Балансировщик (ELB) 1.elb.amazonaws.com», SSL-терминация
Availability zone (AZ) =
«датацентр»
ДЦ1 ДЦ2
Группа автомасштабирования (AutoScaling)
Region = группа связанных датацентров, SLA = 99,95%
18. Балансировка/Переключение трафика
Балансировщик (ELB)
ДЦ1 ДЦ2
Группа автомасштабирования (AutoScaling)
Region = группа связанных датацентров
19. Балансировка/Переключение трафика
Балансировщик (ELB)
ДЦ1 ДЦ2
Группа автомасштабирования (AutoScaling)
Region = группа связанных датацентров
20. Балансировка/Переключение трафика
Мониторинг
(CloudWatch) Балансировщик (ELB)
ДЦ1 ДЦ2
Группа автомасштабирования (AutoScaling)
Region = группа связанных датацентров
Образ машины (AMI)
21. Балансировка/Переключение трафика
• Можно гибко управлять тремя службами: ELB, AutoScaling,
CloudWatch – подстраивая функционал под свои задачи
• Автоматическое увеличение числа машин при росте
нагрузки
• Автоматическая замена вышедших из строя машин
• Переключение трафика в другой ДЦ при аварии сервиса
или для проведения регламентных работ
23. Автоматическое масштабирование
• В CloudWatch создаем Alarm, который при среднем
CPU>20% вызовет действие по добавлению в AutoScaling
Group серверов, например, 2 машин (а также вышлет нам
письмо)
• Создаем «обратный» Alarm, который при уменьшении
нагрузки на CPU<10% будет убирать по 1 машине
24. Система управления
• В CloudWatch недостаточно возможностей, но используем
его максимально
• AWS SDK for PHP и вообще работа с API амазона не всегда
прямолинейна – нужна прослойка
• Для основного мониторинга и активной обратной связи
используем Nagios и его обработчики событий
• Для аналитики в основном используем Munin, часть данных
берем из CloudWatch
25. Система управления - тест
Ядро
Nagios Тест
Тест Тест
Тест Тест
Тест nagios
Обработчик события
Обработчик события Прослойка
Обработчик события вспомогательного кода Pinba
(PHP, bash)
AWS SDK for PHP
CloudWatch -
автомасштабирование Утилиты AWS
для консоли
Обработчик события
API Амазона
26. Система управления – обработчик события
Ядро
Nagios Обработчик события
Тест Тест
Тест Тест Прослойка вспомогательного кода
(PHP, bash)
Обработчик события
Утилиты AWS
Обработчик события AWS SDK for PHP
для консоли
Обработчик события
API Амазона
CloudWatch -
автомасштабирование
Обработчик события
27. Что мы тестируем
Стандартные тесты nagios:
• Пинг, LA, место на дисках
• Использование swap, число процессов
• Мониторинг raid (у нас 10 рейды из EBS-дисков)
• Безопасность – наличие обновлений софта
Для общей картины - набор стандартных плагинов к Munin и
несколько десятков графиков по каждой машине
28. Что мы тестируем
Базовые тесты MySQL:
• Состояние репликации – отсутствие ошибок, величина
отставания slaves
• Buffer Pool hitrate
• Число активных потоков
• Число «долгих» потоков
• Частота создания на диске временных таблиц
и другие
29. Что мы тестируем
Тесты времени выполнения страниц и использования памяти
от pinba:
• Пиковое время выполнения страницы вирт. хоста
• Пиковое использование памяти вирт. хоста
• Среднее время выполнения страниц вирт. хоста с
префиксом (по разделам)
• Среднее использование памяти вирт. хостом
• Среднее время выполнения агентов (после
fastcgi_finish_request)
Дополнительно выводим гистограмму распределения хитов
по ступенькам времени (по pinba и по суточным логам)
30. Что мы тестируем
Тесты состояния амазона и превышения лимитов:
• Проверяем превышения ключевых лимитов амазона
• Число живых машин за балансировщиками
• Планируем проверять показатели нагрузки от CloudWatch –
их, однако, очень мало
• Пинг на машину мониторинга nagios в другом регионе
амазона и обратно (мониторинг мониторинга )
31. Что мы тестируем
Тесты выполнения бизнес-операций и обработчиков событий:
• Скрипты бэкапов и обработчики обновляют лог-файл
(проверка времени модификации)
• Скрипты бэкапов и обработчики в обязательном порядке
имеют лог ошибок (2> или error_log) – он должен быть
пустым
Лог ошибок очень помогает при работе с иногда
«нестабильным» API амазона:
- Недоступность веб-сервиса
- Недоступность ресурса, хотя уже имеется его ID
32. Администрирование через тестирование
Перед добавлением любого сервиса или обработчика в
обязательном порядке:
• Добавляется тест на проверку его «живости», иногда на
число процессов с данным именем и т.п.
• Добавляется тест на наличие и своевременное обновление
лог-файла обработчика/сервиса
• Добавляется тест на нулевой размер лога ошибок
Сейчас в системе: около 1000 тестов, 5 сервисных групп, 4
групп хостов.
Это конечно замедляет, однако позволяет уверенно двигаться
вперед, менять конфигурацию, проводить эксперименты.
33. Обработчики
Обработчики стараются вернуть систему в рабочее состояние:
• При недоступности memcached(ов) делается временное
переключение трафика в другой ДЦ
• При крахе машины MySQL или процесса, репликации –
временное переключение трафика в другой ДЦ
• Проводится простая «реанимация» (рестарт memcached) и
т.п.
• Если все сервисы поднялись – трафик возвращается
обратно
Обработчики для nagios написаны на bash, PHP/MySQL.
34. Pacemaker/Heartbeat vs Nagios
Было несколько безуспешных подходов понять стройность и
красоту – Pacemaker/Heartbeat. Документация – ужасна.
Пока нет доверия DRBD.
Пишем свою простую автоматику на базе Nagios/PHP/MySQL и
AWS
Используем для кластера AutoScaling, шарды MySQL Master-
Master (Active-Passive) и переключение трафика на
балансировщиках (можно также Elastic IP). Картинка – ниже.
35. Архитектура «Битрикс24» (www.bitrix24.ru)
SSL - терминация
Образ машины (AMI)
Балансировщики (ELB)
Файлы/Бэкапы/
Мониторинг (CloudWatch) Снепшоты – S3
ДЦ1 ДЦ2
Группа
Масштабирование PHP
автомасштабирования
(AutoScaling)
Масштабирование MySQL
Memcached Percona XtraDB Memcached
Master-Master
(Active/Passive)
Memcached Memcached
Memcached Memcached
36. Спасибо за внимание
Попробуйте http://www.bitrix24.ru
12 человек/5ГБ - бесплатно
Александр Сербул
1С-Битрикс
serbul@1c-bitrix.ru
@AlexSerbul