58
Проектирование высоконагруженного масштабируемого отказоустойчивого веб-сервиса в облаке на примере Amazon Александр Демидов, Александр Сербул «1С-Битрикс»

Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

  • Upload
    ontico

  • View
    1.897

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Проектирование высоконагруженного масштабируемого отказоустойчивого веб-

сервиса в облаке на примере Amazon

Александр Демидов,Александр Сербул

«1С-Битрикс»

Page 2: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Выбор платформы для разворачивания инфраструктуры

Минусы размещения на собственном оборудовании:

«Когда мы только начинали работу над стартапом (FriendFeed), нам нужно было решить, покупать собственные серверы или же выбрать одного из «облачных» хостинг-провайдеров – таких как Amazon (AWS). Мы выбрали первое – решили приобрести собственные серверы. Оглядываясь назад, я думаю, что это было большой ошибкой»

Брет Тейлор, технический директор Facebook

Необходимы вложения в инфраструктуру на старте проектаСложность масштабированияСложность администрирования (в случае размещения в территориально удаленных датацентрах)Сложность резервирования на уровне ДЦСоздание всех сопутствующих сервисов с нуля

Page 3: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Почему Amazon Web Services? Приложения тоже имеют «нормальные формы»

Многие этого не понимают

Риск изобретения неудачного велосипеда

Риск: «Зачем делать просто, если можно сложно?»

Используем опыт взрослых расширяемых архитектур

Page 4: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Почему Amazon Web Services? Архитектор собирает костяк проекта «из «LEGO»

Основные усилия тратим на нестандартный функционал

Page 5: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Почему Amazon Web Services?

Page 6: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Почему Amazon Web Services? Можно легко мигрировать машины и сервисы между датацентрами

Спасает при авариях

Page 7: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Amazon Elastic Compute Cloud EC2) и вертикальное масштабирование

Практически моментальная доступность необходимого количества виртуальных машин (instances) нужной конфигурации (от 613 Мб до 68 Гб RAM, от 1 до до 33.5 ECU CPU)

Множество готовых образов систем (различные дистрибутивы Linux, Microsoft Windows Server, OpenSolaris)

Высокая доступность (99.95% - Amazon EC2 SLA)

Возможность использования дисков различной конфигурации (Amazon Elastic Block Store (EBS))

Возможность размещения виртуальных машин в разных датацентрах (регионах)

Безопасность: удобный файрвол для групп виртуальных машин

Page 8: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Запуск новой машиныВыбор образа (стандартные – Linux, Windows; собственные ранее созданные; community)

Выбор типа машины

Выбор AZ

Public / private key

Security group

Другие опции (termination protection, набор дисков, shutdown behavior и т.д.)

Page 9: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

«Подводный камень» № 1

EC2 – практически тот же VPS

Нет «волшебного ползунка», чтобы гибко задать конфигурацию – как на старте, так и в процессе работы

Нет моментального вертикального масштабирования

Page 10: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

«Подводный камень» № 2

steal

Page 11: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

EC2 и IP

ec2-23-23-231-56.compute-1.amazonaws.com 10.10.26.123

23.23.231.56

Только 1 внешний IP у каждой машины

Разный резолвинг внутри и снаружи

Внутренний и внешний IP не постоянны (кроме использования Elastic IP)

При организации рассылок – не забывайте про IN PTR

Page 12: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Elastic IP

EC2

EC2

Elastic IP:23.34.176.15

Page 13: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

#!/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 stoppingdo 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

Page 14: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Облачные диски - EBS Elastic Block Store: 1GB – 1TB

До 1000 IOPS/диск

AFR (annual failure rate) ~0.1-0.5% (при регулярных снепшотах)

IO: десятки MB/sec – серьезно уступают «железным»

Хорошо помогает софтварный рейд (md)

raid0 или raid0+1?

Диски живут в одном «ДЦ», а их снепшоты между «ДЦ», на уровне региона

Page 15: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Снэпшоты - EBSДелать снепшоты рейдов можно и нужно

Нет инструментов очистки устаревших снепшотов и образов машин, их нужно писать

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

Page 16: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

AMI – образы машин AMI – набор данных, описывающих параметры машины + загрузочный образ

Делать снепшоты машин целиком – гораздо удобнее, чем по одному диску

Машина переносится между «датацентрами» - целиком

Page 17: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Auto Scaling

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

ДЦ1 ДЦ2

Балансировщик (ELB)

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

Мониторинг (CloudWatch)

Образ машины (AMI)Образ машины (AMI)

Page 18: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Auto Scaling

Page 19: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Elastic Load Balancing

Page 20: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Elastic Load Balancing

Page 21: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Elastic Load Balancing – SSL

Page 22: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Elastic Load Balancing – особенности

Level 7 (HTTP) балансировщик «пропускает» не все методы: например, не работают REPORT, SEARCH, MKCALENDAR (WebDav, CalDav и т.п.)

Level 4 (TCP) не передает на бэкенд (EC2) real IP

При нагрузочном тестировании нельзя давать нагрузку «ступенькой» - только постепенное плавное увеличение

Page 23: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Amazon Simple Storage Service (S3)

Разные типы хранилищ (наличие Reduced Redundancy Storage – RRS)

SDK: Java, .NET, PHP, Ruby, iOS, Android

S3tools, s3fs, сторонние клиенты

Доступность – 99.99%

Надежность – 99.999999999%

ACL

Версионность

Если каждая веб-нода становится «расходным материалом», где хранить статический контент?

Page 24: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Интеграция приложения с S3API хранилища для «прозрачной» работы с файлами

API для разработчиков (не используем стандартные функции для работы с файлами)

Избегаем «диких» файлов

«Прозрачность» для всех модулей системы

Таблица с данными обо всех подключенных хранилищах

Таблица со списком файлов, и указанием, где они хранятся (можно сразу хранить дополнительную информацию)

Не используем file_size, getimagesize и т.п. – сохраняем все данные при аплоаде

Page 25: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

S3 + CDN

Веб-сервер

Page 26: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Изоляция данных пользователей в S3Раньше - новый IAM пользователь, получаем AccessKey, SecretKey. Но есть лимит: макс. 15 000 (по умолчанию – 5 000)

Используем Security Token Service (STS) – временные учетные записи

Права внутри одной директории:

PutObject

GetObject

DeleteObject

Page 27: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Деплой и обновления системного ПО

Web 1

Web 2

Web N

Сервер обновлений

Новый образ AMI

ElasticLoad

Balancing

Как ставить обновления на нодах, не допустив рассинхрони-зации данных (веб и база)?

Page 28: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Как работают обновления ПОКак ставить обновления на нодах, не допустив рассинхронизации данных (веб и база)

Каждое клиентское приложение работает с собственной базой.Все обновления ставятся на выделенный instance, куда не приходит нагрузка.Из этого инстанса делается новый образ AMI.Последовательно каждая машина помечается «плохой», при этом новые веб-ноды стартуют уже из нового образа.В веб-приложении существует механизм проверки соответствия версии ПО и базы.Если клиентский запрос приходит на ноду с новым ПО, а база еще старая, по первому хиту происходит обновление.

Page 29: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

База – RDS или не RDS?У Amazon есть сервис RDS (Relational Database Service). Можно использовать MySQL или Oracle. Стоит ли использовать?

Недостаточно гибкая система (нет полноценного root в базе)НепрозрачноРиск долгого даунтайма Двойная стоимость машин при использовании Multi-AZПри этом – неэффективное использование ресурсов

Page 30: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Конфигурация машин c базами MySQL

Виртуальная машина (EC2) - m2.2xlarge:

34.2 GB of memory13 EC2 Compute Units (4 virtual cores with 3.25 EC2 Compute Units each)64-bit platformI/O Performance: HighEBS-Optimized Available: No

Диск может оказаться «узким» местом…

Page 31: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Software RAID

Page 32: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

# cat /proc/partitionsmajor minor #blocks name

202 16 880737792 xvdb 202 144 157286400 xvdj 202 128 157286400 xvdi 202 112 157286400 xvdh 202 96 157286400 xvdg 202 0 8388608 xvda 202 1 112423 xvda1 202 2 5253255 xvda2 202 3 3020220 xvda3 202 224 524288000 xvdo 202 208 157286400 xvdn 202 192 157286400 xvdm 202 176 157286400 xvdl 202 160 157286400 xvdk 9 0 629139456 md0

Page 33: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

# mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/xvd[g-j]

# mkfs.ext4 /dev/md0

/etc/fstab

/dev/md0 /mnt/raid10 ext4 defaults,noatime,nodiratime,data=writeback,barrier=0 0 0

# mount /mnt/raid10

Page 34: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Software RAID – тесты sysbench

Режим random read/write. При увеличении количества потоков единичный диск почти сразу достигает «потолка», производительность RAID растет.

Page 35: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

MySQL? Percona Server!Оптимизирован для работы с медленными дискамиБыстрый рестарт базы (Fast Shut-Down, Buffer Pool Pre-Load)Множество счетчиков и расширенных отчетовXtraDB Storage EngineXtraBackupBLOB, TEXT в таблицах MEMORY (HEAP)

Page 36: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

MySQL? Percona Server!mysql> SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;+----------------+-------+----------------+| time | count | total |+----------------+-------+----------------+| 0.000001 | 0 | 0.000000 || 0.000010 | 2011 | 0.007438 || 0.000100 | 12706 | 0.513395 || 0.001000 | 4624 | 1.636106 || 0.010000 | 2994 | 12.395174 || 0.100000 | 200 | 6.225339 || 1.000000 | 33 | 5.480764 || 10.000000 | 1 | 2.374067 || 100.000000 | 0 | 0.000000 || 1000.000000 | 0 | 0.000000 || 10000.000000 | 0 | 0.000000 || 100000.000000 | 0 | 0.000000 || 1000000.000000 | 0 | 0.000000 || TOO LONG | 0 | TOO LONG |+----------------+-------+----------------+14 rows in set (0.00 sec)

Page 37: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Используем master-master репликацию в MySQL

Особенности настройки MySQL:auto_increment_incrementauto_increment_offset

Базы в разных датацентрах синхронны, при этом независимы друг от друга: потеря связности между датацентрами может составлять часы, данные синхронизируются после восстановления.Пользователь и все сотрудники этой компании работают в одном датацентре за счет управления балансировщиком.

Page 38: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Вертикальное масштабирование базы

CloudWatch

MySQLmaster

MySQLslave

Веб-нодаБалансировка SQL

Elastic IP

Мониторим состояние master через CloudWatchЕсть slave – минимальной конфигурации – работающий в режиме только бэкапаПри необходимости масштабирования меняем тип машины у slave (вертикальное масштабирование)Останавливаем master, делаем slave мастеромПереключаем IP (Amazon Elastic IP) на машину с новым мастеромВеб-ноды не требуют переконфигурирования и продолжают работать без даунтайма

Для вертикального масштабирования используем slave, потом переключаем его в master

Page 39: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Горизонтальное масштабирование базы

ДЦ1 ДЦ2

Балансировщики (ELB)

AutoScaling

Мониторинг (CloudWatch)

Образ машины (AMI)Образ машины (AMI)

Percona XtraDB Master-Master (Active/Passive)

Percona XtraDB Master-Master (Active/Passive)

Масштабирование PHP

Вер

тика

льн

ый

шар

дин

г

DB1 (Passive)

DB1(Active)

DB2(Passive)

DB2(Active)

DB3(Passive)

DB3(Active)

Миллионы таблиц,десятки тысяч баз данных

Page 40: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Бэкап MySQL

Диск (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)

Снепшоты.

Автоматически: консолидация бэкапов, сохранение только инкрементов

Page 41: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Бэкап MySQLРецепта «100% целостного» снепшота файлов MySQL похоже нет, нужно колдовать

Percona XtraBackup – инкрементальный бинарный бэкап

Нужно немало времени на подготовку бинарного бэкапа к «чистому» быстрому восстановлению

Логический бэкап снимаем со слейвов

Случались тотальные разрушения raid10 при аварии в амазоне – бинарный бэкап (или снепшот машины) + бинлоги

Page 42: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Организация системы мониторинга

Лучше – стандартные решения (Nagios, Zabbix и т.п.), а не самописные.

Дежурная смена и/или мгновенные уведомления.

Мониторить – всё.

Но – аккуратно. Тысячи уведомлений будут бесполезны.

Автоматизация типовых реакций.

Мониторить систему мониторинга.

В идеальном мире – распределенная система мониторинга.

«Мониторинг безопасности» – изменения файлов и т.п.

Page 43: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Мониторинг операционной системыМесто на дисках

Очередь выполнения

Размер и использование swap

И т.д.

Page 44: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Мониторинг MySQLКлючевые тесты

Page 45: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Автоматика – структура тестаNagios

AWS SDK for PHP

Тест

Тест

Тест

Тест

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

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

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

CloudWatch - автомасштабирование

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

Ядро

Прослойка вспомогательного кода (PHP, bash)

Утилиты AWSдля консоли

API Амазона

Тест nagios

Pinba

Тест

Page 46: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Автоматика – обработчикNagios

AWS SDK for PHP

Тест

Тест

Тест

Тест

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

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

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

CloudWatch - автомасштабирование

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

Ядро

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

Прослойка вспомогательного кода (PHP, bash)

Утилиты AWSдля консоли

API Амазона

Page 47: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

АвтоматикаВ CloudWatch недостаточно возможностей, но используем его максимально

AWS SDK for PHP и вообще работа с API амазона не всегда прямолинейна – нужна прослойка

Для основного мониторинга и активной обратной связи используем Nagios и его обработчики событий

Для аналитики в основном используем Munin, часть данных берем из CloudWatch

Присматриваемся к gearman, SQS

Page 48: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Аналитика

Page 49: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Аналитика – со стороны пользователяМало знать «среднюю температуру по больнице» и мониторить только главную страницу сайта

Гистограммы распределения времени хитов, памяти, кодам ответа и т.п. – из логов (awk-скрипт), pinba или других инструментов

Page 50: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Пользовательская аналитика – в графиках

Гистограмма времени обработки запросов (Percona)

Page 51: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Пользовательская аналитика – в графиках

Число ошибок в хитах за 15 минут - меньше L (из pinba)

Макс. время хита (тэга) – меньше M сек.

Макс. использование памяти хитом – меньше N МБ

Page 52: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Итог

Page 53: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Масштабируемость под высокие нагрузки

CloudWatch + Auto Scaling

Web 1

Очень высокая посещаемость

Elastic Load Balancing

Web 2 Web N…

Используем связку Elastic Load Balancing + CloudWatch + Auto Scaling

Page 54: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Отказоустойчивость узлов

MySQLmaster

ElasticLoad Balancing

Web N…

Web 1

Web 2

MySQLmaster

Web 1

Web 2

Web N…

master-master репликация

S3

management, monitoring,

MySQL backup

Датацентр 1 в регионе US East (Virginia)

Мониторинг и масштабирование – CloudWatch + AutoScaling

Датацентр 2 в регионе US East (Virginia)

Мониторинг и масштабирование – CloudWatch + AutoScaling

Page 55: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Отказоустойчивость узлов

MySQLmaster

ElasticLoad Balancing

Web N…

Web 1

Web 2

MySQLmaster

Web 1

Web 2

Web N…

master-master репликация

S3

management, monitoring,

MySQL backup

Датацентр 1 в регионе US East (Virginia)

Мониторинг и масштабирование – CloudWatch + AutoScaling

Датацентр 2 в регионе US East (Virginia)

Мониторинг и масштабирование – CloudWatch + AutoScaling

Page 56: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Отказоустойчивость ДЦ

MySQLmaster

ElasticLoad Balancing

Web N…

Web 1

Web 2

MySQLmaster

Web 1

Web 2

Web N…

master-master репликация

S3

management, monitoring,

MySQL backup

Датацентр 1 в регионе US East (Virginia)

Мониторинг и масштабирование – CloudWatch + AutoScaling

Датацентр 2 в регионе US East (Virginia)

Мониторинг и масштабирование – CloudWatch + AutoScaling

Page 57: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Надежность «облака»Само по себе «облако» не надежнее традиционного хостинга и собственного оборудования. «Облако» дает возможность организовать надежную инфраструктуру.

Page 58: Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на примере Amazon (Александр

Спасибо за внимание!

Вопросы?

Александр Демидов

[email protected]

@demidov

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

[email protected]

@AlexSerbul