SlideShare a Scribd company logo
Разработка и администрирование
          через тестирование
- облачный сервис «Битрикс24» в Амазоне

            Александр Сербул
               1С-Битрикс
               @AlexSerbul
Наши цели
• Посмотреть на Amazon Web Services (AWS) с
  «птичьего полета»
• Научиться эффективно с ним работать, в т.ч. на PHP
• Уверенно развивать функционал, не отставая от
  рынка
• Держать созданную систему под постоянным
  контролем
• Изучить результат - сервис «Битрикс24» - изнутри
AWS с «птичьего полета»
    Управляемый из кода хостинг с множеством реализованных
    Enterprise-паттернов :

•   Amazon Elastic Compute Cloud (EC2) – серверы и образы
•   Amazon Elastic Block Store (EBS) - внешние диски
•   Auto Scaling – масштабирование (от нагрузки и т.д.)
•   Elastic Load Balancing - балансировщики
•   Amazon Simple Storage Service (S3) – облачное хранилище
AWS с «птичьего полета»

• Amazon Simple Queue Service (SQS) - очереди
  сообщений
• Amazon Simple Notification Service (SNS) -
  уведомлялка
• Amazon Simple Email Service (SES) – рассылки почты
• AWS Identity and Access Management (IAM) –
  управление учетками
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
AWS с «птичьего полета»

• Amazon CloudWatch – мониторинг + аналитика
• Amazon Virtual Private Cloud (VPC) – собственная
  подсетка (с кластерами)

Полезных сервисов много, готовые паттерны
позволяют просто масштабироваться и обеспечивать
неплохую отказоустойчивость (SLA до 99,95%).
AWS с «птичьего полета»
     Availability zone (AZ) =
          «датацентр»




                                    Высокоскоростные
                                    каналы между ДЦ




  Region = группа связанных датацентров
AWS с «птичьего полета»
                     Availability zone (AZ) =
                          «датацентр»



 Серверы (EC2)                Снепшоты дисков
 Диски (EBS) –                Образы серверов
 доступны                     Данные в облаке (S3)
 только внутри                Учетки (IAM)
 датацентра                   Балансировщики
                              и др. –
                              реплицируются
                              «между»
                              датацентрами, на
                              уровне региона

   Region = группа связанных датацентров
AWS – все не так гладко

• Веб-сервисы внутри архитектурно отличаются друг
  от друга, в т.ч . по подходу и API. Не всегда удобно
  стыкуются.
• Прослеживается эволюция архитектур – например
  «наслоения концепций» в IAM/S3
• Имеются неочевидные «жесткие» ограничения и
  лимиты – например число учеток в IAM (<=5000)
AWS – нужно строить свое
          управляющее ядро
• Внутренняя система мониторинга CloudWatch - пока очень
  ограничена, уступает напр. Nagios/Munin
• Измерения внутри машин (top) и из CloudWatch – могут
  отличаться в разы (CPU, LA, др.)
• Нередко «соседи» на виртуальной машине внезапно
  влияют на производительность (CPU Stolen %)
Нужно научиться держать конфигурацию под контролем,
автоматизировав максимум операций.
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/
AWS SDK for PHP - документация




http://docs.amazonwebservices.com/AWSSDKforPHP/latest/
Бэкап данных в 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 )
Бэкап данных в S3/Snapshots




• Нет инструментов очистки устаревших снепшотов и образов
  машин, их нужно писать (иначе можно упереться в лимит).
• Нужно писать оболочку, для повтора неудавшихся
  операций, логирования и т.п.
Бэкап данных в 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;
      }
  }

• Полезно создаваемым объектам присваивать тэги, для
  дальнейшей фильтрации
Бэкап 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) на диске                                      Автоматически:
                                                           консолидация
                                                           бэкапов, сохранение
                                                           только инкрементов
Балансировка/Переключение трафика
                                                                          CNAME к «myproj-1873425.us-east-
                                      Балансировщик (ELB)              1.elb.amazonaws.com», SSL-терминация
Availability zone (AZ) =
     «датацентр»




                           ДЦ1                                   ДЦ2


                                 Группа автомасштабирования (AutoScaling)




                       Region = группа связанных датацентров, SLA = 99,95%
Балансировка/Переключение трафика
                Балансировщик (ELB)




     ДЦ1                                              ДЦ2


           Группа автомасштабирования (AutoScaling)




            Region = группа связанных датацентров
Балансировка/Переключение трафика
                Балансировщик (ELB)




     ДЦ1                                   ДЦ2


           Группа автомасштабирования (AutoScaling)




            Region = группа связанных датацентров
Балансировка/Переключение трафика
   Мониторинг
   (CloudWatch)                 Балансировщик (ELB)




                     ДЦ1                                   ДЦ2


                           Группа автомасштабирования (AutoScaling)




                            Region = группа связанных датацентров
Образ машины (AMI)
Балансировка/Переключение трафика
• Можно гибко управлять тремя службами: ELB, AutoScaling,
  CloudWatch – подстраивая функционал под свои задачи
• Автоматическое увеличение числа машин при росте
  нагрузки
• Автоматическая замена вышедших из строя машин
• Переключение трафика в другой ДЦ при аварии сервиса
  или для проведения регламентных работ
Балансировка/Переключение трафика
AWS SDK for PHP:

AmazonELB:: set_load_balancer_listener_ssl_certificate ( $load_balancer_name,
   $load_balancer_port, $ssl_certificate_id, $opt )
AmazonELB:: configure_health_check ( $load_balancer_name, $health_check,
   $opt )
AmazonELB::enable_availability_zones_for_load_balancer (
   $load_balancer_name, $availability_zones, $opt )
AmazonELB::register_instances_with_load_balancer ( $load_balancer_name,
   $instances, $opt )
AmazonAS:: update_auto_scaling_group ( $auto_scaling_group_name, $opt )
AmazonAS: set_desired_capacity ( $auto_scaling_group_name,
   $desired_capacity, $opt )
и другие.
Автоматическое масштабирование
• В CloudWatch создаем Alarm, который при среднем
  CPU>20% вызовет действие по добавлению в AutoScaling
  Group серверов, например, 2 машин (а также вышлет нам
  письмо)
• Создаем «обратный» Alarm, который при уменьшении
  нагрузки на CPU<10% будет убирать по 1 машине
Система управления
• В CloudWatch недостаточно возможностей, но используем
  его максимально
• AWS SDK for PHP и вообще работа с API амазона не всегда
  прямолинейна – нужна прослойка
• Для основного мониторинга и активной обратной связи
  используем Nagios и его обработчики событий
• Для аналитики в основном используем Munin, часть данных
  берем из CloudWatch
Система управления - тест
          Ядро

Nagios                                           Тест

   Тест          Тест
   Тест          Тест

                                           Тест nagios
 Обработчик события
 Обработчик события      Прослойка
 Обработчик события      вспомогательного кода           Pinba
                         (PHP, bash)


                         AWS SDK for PHP
 CloudWatch -
 автомасштабирование         Утилиты AWS
                             для консоли
 Обработчик события

                         API Амазона
Система управления – обработчик события
           Ядро

 Nagios                          Обработчик события

    Тест          Тест
    Тест          Тест   Прослойка вспомогательного кода
                         (PHP, bash)
  Обработчик события
                                             Утилиты AWS
  Обработчик события     AWS SDK for PHP
                                             для консоли
  Обработчик события
                                     API Амазона


  CloudWatch -
  автомасштабирование
  Обработчик события
Что мы тестируем
Стандартные тесты nagios:
• Пинг, LA, место на дисках
• Использование swap, число процессов
• Мониторинг raid (у нас 10 рейды из EBS-дисков)
• Безопасность – наличие обновлений софта

Для общей картины - набор стандартных плагинов к Munin и
несколько десятков графиков по каждой машине
Что мы тестируем
Базовые тесты MySQL:
• Состояние репликации – отсутствие ошибок, величина
   отставания slaves
• Buffer Pool hitrate
• Число активных потоков
• Число «долгих» потоков
• Частота создания на диске временных таблиц
и другие
Что мы тестируем
Тесты времени выполнения страниц и использования памяти
от pinba:
• Пиковое время выполнения страницы вирт. хоста
• Пиковое использование памяти вирт. хоста
• Среднее время выполнения страниц вирт. хоста с
   префиксом (по разделам)
• Среднее использование памяти вирт. хостом
• Среднее время выполнения агентов (после
   fastcgi_finish_request)
Дополнительно выводим гистограмму распределения хитов
по ступенькам времени (по pinba и по суточным логам)
Что мы тестируем
Тесты состояния амазона и превышения лимитов:
• Проверяем превышения ключевых лимитов амазона
• Число живых машин за балансировщиками
• Планируем проверять показатели нагрузки от CloudWatch –
  их, однако, очень мало
• Пинг на машину мониторинга nagios в другом регионе
  амазона и обратно (мониторинг мониторинга )
Что мы тестируем
Тесты выполнения бизнес-операций и обработчиков событий:
• Скрипты бэкапов и обработчики обновляют лог-файл
  (проверка времени модификации)
• Скрипты бэкапов и обработчики в обязательном порядке
  имеют лог ошибок (2> или error_log) – он должен быть
  пустым

Лог ошибок очень помогает при работе с иногда
«нестабильным» API амазона:
- Недоступность веб-сервиса
- Недоступность ресурса, хотя уже имеется его ID
Администрирование через тестирование
Перед добавлением любого сервиса или обработчика в
обязательном порядке:
• Добавляется тест на проверку его «живости», иногда на
   число процессов с данным именем и т.п.
• Добавляется тест на наличие и своевременное обновление
   лог-файла обработчика/сервиса
• Добавляется тест на нулевой размер лога ошибок
Сейчас в системе: около 1000 тестов, 5 сервисных групп, 4
групп хостов.
 Это конечно замедляет, однако позволяет уверенно двигаться
вперед, менять конфигурацию, проводить эксперименты.
Обработчики
Обработчики стараются вернуть систему в рабочее состояние:
• При недоступности memcached(ов) делается временное
  переключение трафика в другой ДЦ
• При крахе машины MySQL или процесса, репликации –
  временное переключение трафика в другой ДЦ
• Проводится простая «реанимация» (рестарт memcached) и
  т.п.
• Если все сервисы поднялись – трафик возвращается
  обратно
Обработчики для nagios написаны на bash, PHP/MySQL.
Pacemaker/Heartbeat vs Nagios
Было несколько безуспешных подходов понять стройность и
красоту – Pacemaker/Heartbeat. Документация – ужасна.

Пока нет доверия DRBD.

Пишем свою простую автоматику на базе Nagios/PHP/MySQL и
AWS 

Используем для кластера AutoScaling, шарды MySQL Master-
Master (Active-Passive) и переключение трафика на
балансировщиках (можно также Elastic IP). Картинка – ниже.
Архитектура «Битрикс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
Спасибо за внимание
Попробуйте http://www.bitrix24.ru
   12 человек/5ГБ - бесплатно



    Александр Сербул

         1С-Битрикс
     serbul@1c-bitrix.ru
        @AlexSerbul

More Related Content

Viewers also liked

Sign Me Up
Sign Me UpSign Me Up
Sign Me Up
Andrew Mayorov
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложенийAndrew Mayorov
 
Alexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphicsAlexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphicsAndrew Mayorov
 
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Andrew Mayorov
 
Roman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureRoman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureAndrew Mayorov
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиКак сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиAndrew Mayorov
 
Victor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsVictor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsAndrew Mayorov
 
Построение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БДПостроение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БД
Andrew Mayorov
 
Xslt
XsltXslt
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?
Andrew Mayorov
 
об удобстве иерархических структур данных
об удобстве иерархических структур данныхоб удобстве иерархических структур данных
об удобстве иерархических структур данных
Andrew Mayorov
 
(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)
Internews Ukraine
 
Banana Shelf Life Testing
Banana Shelf Life TestingBanana Shelf Life Testing
Banana Shelf Life Testing
shubhamchandra
 

Viewers also liked (16)

Sign Me Up
Sign Me UpSign Me Up
Sign Me Up
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложений
 
Alexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphicsAlexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphics
 
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
 
Roman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureRoman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows Azure
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиКак сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпути
 
Victor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsVictor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platforms
 
Построение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БДПостроение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БД
 
Xslt
XsltXslt
Xslt
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?
 
Asad C.V
Asad C.VAsad C.V
Asad C.V
 
об удобстве иерархических структур данных
об удобстве иерархических структур данныхоб удобстве иерархических структур данных
об удобстве иерархических структур данных
 
(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)
 
Banana Shelf Life Testing
Banana Shelf Life TestingBanana Shelf Life Testing
Banana Shelf Life Testing
 

Similar to Alexander Serbul - Development and administration through testing - cloud service "Bitrix24" in Amazon

Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Ontico
 
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...it-people
 
Облачная инфраструктура Amazon We
Облачная инфраструктура Amazon WeОблачная инфраструктура Amazon We
Облачная инфраструктура Amazon WeLeonid Vygovskiy
 
Ukraine, Kharkiv, Java Club. Day 2
Ukraine, Kharkiv, Java Club. Day 2Ukraine, Kharkiv, Java Club. Day 2
Ukraine, Kharkiv, Java Club. Day 2
Andrew Gusev
 
Веб-кластер
Веб-кластерВеб-кластер
Веб-кластер
1С-Битрикс
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
Интеграция сайта с облачным хранилищем (Александр Демидов)
Интеграция сайта с облачным хранилищем (Александр Демидов)Интеграция сайта с облачным хранилищем (Александр Демидов)
Интеграция сайта с облачным хранилищем (Александр Демидов)Ontico
 
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)Ontico
 
Презентация технологии веб-кластеров
Презентация технологии веб-кластеров  Презентация технологии веб-кластеров
Презентация технологии веб-кластеров
1С-Битрикс
 
14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark
Roman Brovko
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Uptime community
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Uptime Community
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Sql Server Data Services
Sql Server Data ServicesSql Server Data Services
Sql Server Data ServicesMedia Gorod
 
Partly cloudy. Построение отказоустойчивых систем в aws минимальными средства...
Partly cloudy. Построение отказоустойчивых систем в aws минимальными средства...Partly cloudy. Построение отказоустойчивых систем в aws минимальными средства...
Partly cloudy. Построение отказоустойчивых систем в aws минимальными средства...Ontico
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
Alexandre Kalendarev
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
Timur Safin
 

Similar to Alexander Serbul - Development and administration through testing - cloud service "Bitrix24" in Amazon (20)

Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
 
В облаке AWS
В облаке AWSВ облаке AWS
В облаке AWS
 
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
 
Облачная инфраструктура Amazon We
Облачная инфраструктура Amazon WeОблачная инфраструктура Amazon We
Облачная инфраструктура Amazon We
 
Ukraine, Kharkiv, Java Club. Day 2
Ukraine, Kharkiv, Java Club. Day 2Ukraine, Kharkiv, Java Club. Day 2
Ukraine, Kharkiv, Java Club. Day 2
 
Веб-кластер
Веб-кластерВеб-кластер
Веб-кластер
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
Интеграция сайта с облачным хранилищем (Александр Демидов)
Интеграция сайта с облачным хранилищем (Александр Демидов)Интеграция сайта с облачным хранилищем (Александр Демидов)
Интеграция сайта с облачным хранилищем (Александр Демидов)
 
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
Проектируем облачный веб-сервис "по-взрослому" (Сергей Рыжиков)
 
Презентация технологии веб-кластеров
Презентация технологии веб-кластеров  Презентация технологии веб-кластеров
Презентация технологии веб-кластеров
 
02 1c-bitrix-cloud-storage
02 1c-bitrix-cloud-storage02 1c-bitrix-cloud-storage
02 1c-bitrix-cloud-storage
 
14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Sql Server Data Services
Sql Server Data ServicesSql Server Data Services
Sql Server Data Services
 
Partly cloudy. Построение отказоустойчивых систем в aws минимальными средства...
Partly cloudy. Построение отказоустойчивых систем в aws минимальными средства...Partly cloudy. Построение отказоустойчивых систем в aws минимальными средства...
Partly cloudy. Построение отказоустойчивых систем в aws минимальными средства...
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
 

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 – подстраивая функционал под свои задачи • Автоматическое увеличение числа машин при росте нагрузки • Автоматическая замена вышедших из строя машин • Переключение трафика в другой ДЦ при аварии сервиса или для проведения регламентных работ
  • 22. Балансировка/Переключение трафика AWS SDK for PHP: AmazonELB:: set_load_balancer_listener_ssl_certificate ( $load_balancer_name, $load_balancer_port, $ssl_certificate_id, $opt ) AmazonELB:: configure_health_check ( $load_balancer_name, $health_check, $opt ) AmazonELB::enable_availability_zones_for_load_balancer ( $load_balancer_name, $availability_zones, $opt ) AmazonELB::register_instances_with_load_balancer ( $load_balancer_name, $instances, $opt ) AmazonAS:: update_auto_scaling_group ( $auto_scaling_group_name, $opt ) AmazonAS: set_desired_capacity ( $auto_scaling_group_name, $desired_capacity, $opt ) и другие.
  • 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