Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

840 views

Published on

  • Be the first to comment

  • Be the first to like this

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

  1. 1. Александр СербулРуководитель направления контроля качества интеграции и внедренийАрхитектура Битрикс24в Amazon Web Services– изнутри, с пристрастием
  2. 2. Битрикс24www.bitrix24.ruСоциальный интранетСтруктура компании, календариРабота с задачамиДокументы, поискУправление временемCRMБитрикс24.Диски многое другое.
  3. 3. Технологические целиВысокая отказоустойчивостьВысокая, «неограниченная» производительностьАвтомасштабированиеПростота развития, прозрачность архитектурыНе усложнять без необходимости 
  4. 4. Битрикс24 – в цифрах• Зарегистрировано компаний: 54 000 +• Каждый день используют 4 000 + компаний• Еще 2 100 + компаний - через день• 1 600 + сотрудников в максимальнойкомпании• 22 Гб - максимальный размериспользованного пространства компаний• Общий размер файлов в облаке Amazon –790 Гб• 10 000 000 программных страниц в день• Максимальное число подключенныхинтернет-магазинов к одной CRM – 12
  5. 5. S3Elastic Load BalancingWeb 1Elastic Load BalancingDynamicWeb N…CloudWatch+AutoScalingWeb 1 Web 2 Web N…CloudWatch+AutoScalingАрхитектура – с птичьего полетаS3management,monitoring,backupStaticCDNjs, cssDynamicStaticCDNjs, cssimages(clients)images(clients)localcachelocalcachelocalcachelocalcachelocalcachecontrol cache: memcachedmysqldmysqldmysqldmysqldmysqldmysqldmaster-master replicationmaster-master replicationmaster-master replicationmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldcontrol cache: memcachedcontrol cache: memcachedcontrol cache: memcachedcontrol cache: memcachedcontrol cache: memcachedWeb 2localcache
  6. 6. AWS – это «живые»паттерны проектированияПриложения тоже имеют «нормальные формы»Многие этого не понимаютРиск изобретения неудачного велосипедаРиск: «Зачем делать просто, если можно сложно?»Используем опыт взрослых расширяемых архитектур
  7. 7. Собираем из «кубиков»Архитектор собирает костяк проекта «из «LEGO»Основные усилия тратим на нестандартный функционал
  8. 8. Собираем из «кубиков»
  9. 9. Несколько датацентровМожно быстро мигрировать машины, данные и сервисымежду датацентрамиСпасает при авариях
  10. 10. Свобода перемещения IP-адресовEC2EC2Elastic IP:23.34.176.15
  11. 11. #!/bin/shNODE_INSTANCE_ID=$1# http://aws.amazon.com/ec2/instance-types/NODE_TARGET_TYPE=m2.2xlargeNODE_ELASTIC_IP=$2ec2-stop-instances $NODE_INSTANCE_IDwhile ec2-describe-instances $NODE_INSTANCE_ID | grep -q stoppingdosleep 5echo Waitingdoneec2-modify-instance-attribute --instance-type $NODE_TARGET_TYPE $NODE_INSTANCE_IDec2-start-instances $NODE_INSTANCE_IDec2-associate-address $NODE_ELASTIC_IP -i $NODE_INSTANCE_ID
  12. 12. ДискиElastic Block Store: 1GB – 1TBБлочное устройствоAFR (annual failure rate) ~0.1-0.5% (при регулярныхснепшотах)IO: десятки MB/sec – серьезно уступают «железным»Хорошо помогает софтварный рейд (md)raid0 или raid0+1?Диски живут в одном «ДЦ», а их снепшоты между «ДЦ», науровне региона«Provisioned EBS»: до 4000 IOPS/диск
  13. 13. Снепшоты данных и серверовДелать снепшоты рейдов можно и нужноНет инструментов очистки устаревших снепшотов и образовмашин, их нужно писать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
  14. 14. Сервер веб-приложенийPHP + APCМодифицированный «1C-Битрикс:Корпоративный портал» - кластернаяредакцияnginxСервер веб-приложенийБалансировщик ELB (SSL)Сервер MySQLMySQL (Percona/XtraDB)Кэш данных (чтение): APCКэш данных (запись): memcachedИзменяемые файлыSimple Storage Service (s3)
  15. 15. Кластер серверов веб-приложенийRegion = группа связанных датацентровДЦ1 ДЦ2Балансировщик (ELB)Группа автомасштабирования (AutoScaling)Мониторинг (CloudWatch)Образ машины (AMI)
  16. 16. Автомасштабирование
  17. 17. Балансировка
  18. 18. Работа с файлами в s3API хранилища для «прозрачной» работы с файламиAPI для разработчиков (не используем стандартныефункции для работы с файлами)Избегаем «диких» файлов«Прозрачность» для всех модулей системыТаблица с данными обо всех подключенных хранилищахТаблица со списком файлов, и указанием, где они хранятся(можно сразу хранить дополнительную информацию)Не используем file_size, getimagesize и т.п. – сохраняем вседанные при аплоаде
  19. 19. Раздача статики: s3 + CDNВеб-сервер
  20. 20. Временные токены к s3 и др.Раньше для каждой учетки - новый IAM пользователь,получаем AccessKey, SecretKey. Но есть лимит: макс. 15 000(по умолчанию – 5 000)Сейчас используем Security Token Service (STS) – временныеучетные записиПрава внутри одной директории:PutObjectGetObjectDeleteObject
  21. 21. Масштабирование БДДЦ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)Миллионы таблиц,десятки тысяч баз данных
  22. 22. Бэкап БДДиск (EBS)Буферы MySQL(InnoDB) в памятиUnix: ec2-consistent-snapshotили:“FLUSH TABLES WITH READLOCK”fsfreeze –f mountpoint (LinuxExt3/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 = SimpleStorage Service)Снепшоты.Автоматически:консолидация бэкапов,сохранение толькоинкрементов
  23. 23. Обновление кластераWeb 1Web 2Web NСерверобновленийНовыйобраз AMIElasticLoadBalancingКак ставитьобновления нанодах, недопустиврассинхрони-зации данных(веб и база)?
  24. 24. Обновление кластераКак ставить обновления на серверах, не допустиврассинхронизации данных (веб и база):Каждое клиентское приложение работает с собственной базой.Все обновления ставятся на выделенный instance, куда не приходитнагрузка.Из этого инстанса делается новый образ AMI.Последовательно каждая машина помечается «плохой», при этомновые веб-ноды стартуют уже из нового образа.В веб-приложении существует механизм проверки соответствия версииПО и базы.Если клиентский запрос приходит на ноду с новым ПО, а база ещестарая, по первому хиту происходит обновление.
  25. 25. МониторингЛучше – стандартные решения (Nagios, Zabbix и т.п.), а несамописные.Дежурная смена и/или мгновенные уведомления.Мониторить – всё.Но – аккуратно. Тысячи уведомлений будут бесполезны.Автоматизация типовых реакций.Мониторить систему мониторинга.В идеальном мире – распределенная система мониторинга.«Мониторинг безопасности» – изменения файлов и т.п.
  26. 26. Мониторинг - тестNagiosAWS SDK for PHPТестТестТестТестОбработчик событияОбработчик событияОбработчик событияCloudWatch -автомасштабированиеОбработчик событияЯдроПрослойкавспомогательного кода(PHP, bash)Утилиты AWSдля консолиAPI АмазонаТест nagiosPinbaТест
  27. 27. Мониторинг - обработчикNagiosAWS SDK for PHPТестТестТестТестОбработчик событияОбработчик событияОбработчик событияCloudWatch -автомасштабированиеОбработчик событияЯдроОбработчик событияПрослойка вспомогательного кода (PHP, bash)Утилиты AWSдля консолиAPI Амазона
  28. 28. Мониторинг и аналитикаВ CloudWatch недостаточно возможностей, но используем егомаксимальноAWS SDK for PHP и вообще работа с API амазона не всегдапрямолинейна – нужна прослойкаДля основного мониторинга и активной обратной связииспользуем Nagios и его обработчики событийДля аналитики в основном используем Munin, часть данныхберем из CloudWatchПрисматриваемся к gearman, используем SQS (сервис очередейAWS)
  29. 29. S3Elastic Load BalancingWeb 1Elastic Load BalancingDynamicWeb N…CloudWatch+AutoScalingWeb 1 Web 2 Web N…CloudWatch+AutoScalingАрхитектура – с птичьего полетаS3management,monitoring,backupStaticCDNjs, cssDynamicStaticCDNjs, cssimages(clients)images(clients)localcachelocalcachelocalcachelocalcachelocalcachecontrol cache: memcachedmysqldmysqldmysqldmysqldmysqldmysqldmaster-master replicationmaster-master replicationmaster-master replicationmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldmysqldcontrol cache: memcachedcontrol cache: memcachedcontrol cache: memcachedcontrol cache: memcachedcontrol cache: memcachedWeb 2localcache
  30. 30. Спасибо за внимание!Вопросы?Александр Сербулserbul@1c-bitrix.ru@AlexSerbul

×