Стартапы в Amazon Web Services – тонкости, подводные...
Transcript of Стартапы в Amazon Web Services – тонкости, подводные...
Девятая независимая научно-практическая конференция «Разработка ПО 2013» 23 - 25 октября, Москва
Александр Сербул
Стартапы в Amazon Web Services –
тонкости, подводные камни, рецепты
1С-Битрикс
О чем поговорим
Стартап – глазами инвестора
Стартап – глазами технического директора
Быстрый старт, инкрементальное развитие
А требования – постоянно меняются
Технологические риски – и бизнес-задачи
Werner Vogels - VP and CTO of Amazon.com
О чем поговорим
Стартап – веб-приложение
Выбор технологий: unix/nginx/PHP/memcached/MySQL – кратко,
узкие места
Развитие архитектуры стартапа – как обычно и
как полезно
Облако для стартапа – возможности и
ограничения
Чем особенно полезен Amazon Web Services
Риски AWS – как не сломать «спину»
Стеки ПО и риски стартапа
Выбираем платформу для стартапа…
Java, C++, Node.js, Python/Django, Ruby on Rails
LAMP: linux, nginx, php-fpm, MySQL, memcached…
Кадровые риски. Где искать разработчиков, когда
и кого
Эксплуатация и сисадмины
Требования меняются постоянно…
Гибкая разработка – поможет ли?
Простая архитектура – о чем это?
Компоненты, модули, философия unix
Клиентов становится все больше…
Быстрая отдача тяжелого контента, CDN
Быстрая загрузка страниц в браузер
Быстрая работа мобильных приложений
SLA – как удержать?
Пиковые нагрузки – теория и практика
Клиентов становится все больше…
Объем данных растет. Быстро.
В одну БД данные не помещаются
БД-кластер? А не страшно?
Разные регионы, latency
Теорема CAP
Поможет ли NoSQL?
Риски:
Eventual consistency
Агрессивная денормализация
Проблемы со сложными запросами
Усложнение приложения-клиента
Репликация – как «продержаться»,
не разделяя данные
Разделяем данные клиентов
Вертикальный шардинг
Горизонтальный шардинг
База данных MySQL
База данных MySQL 1
База данных MySQL 2
База данных MySQL
База данных MySQL 1
База данных MySQL 2
Аккаунты a-m
Аккаунты n-z
Когда всё «упало» и «пропало»
Виды аварий
Мониторинг – мы или клиенты?
Скорость восстановления после сбоя
Распределенные данные, целостность и
резервирование
SLA и ответственность перед клиентами
Требования к стартапу
Высокая производительность
Интеграция с CDN
Поддержка мобильных устройств
Поддержка протоколов – WebDAV, long pooling,
WebSockets, spdy и т.п.
Масштабируемость при росте нагрузке – быстро и
дешево, автоматически
Защищенные соединения - SSL
Простой и эффективный мониторинг состояния
Отказоустойчивость при авариях, быстрое
восстановление, автоматически
Простота резервирования информации
Требования к стартапу
А еще нужен быстрый поиск по веб-проекту
… с учетом прав
… с умной фильтрацией
А еще хочется, чтобы эксплуатировал систему один человек, а
не отдел системного администрирования.
Требования к стартапу
На пути к веб-кластеру. Один сервер.
Сервер
RDBMS(MySQL)
Web server (Apache+PHP)
Сервер
RDBMS(MySQL)
Appl. server - Web (Apache+PHP)
Rev. proxy server (Nginx)
Сервер
RDBMS(MySQL)
Appl. server – FastCGI (PHP-FPM)
Rev. proxy server (Nginx)
На пути к веб-кластеру. Вынос компонентов
на серверы.
Сервер баз данных
Сервер статики
Rev. proxy server (Nginx)
Сервер приложений
RDBMS(MySQL) Appl. server (PHP-FPM)
Стат. файлы
Типичный веб-кластер
SLAVE
SLAVE
Сервер
Сервер
Сервер базы данных: MASTER
Rev. proxy server (nginx + http_upstream_module)
Серверы приложений
RDBMS(MySQL) Appl. server (PHP-FPM)
Стат. файлы
Серверы баз данных: SLAVE
RDBMS(MySQL)
Диспетчер SQL запросов
Общие сессии
Общие файлы
Сессии, кеши, NoSQL
Кластер memcached – для кэша, сессий
Согласованность кэшей
Управляемость кэшей
NoSQL - нужен ли и когда?
HandlerSocket
Веб-кластер в AWS – Битрикс24
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
Dynamic Static
CDN
js, css
imag
es (
clie
nts
)
imag
es (
clie
nts
)
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
Производительность
EC2 (elastic compute cloud) – виртуалки, %stolen CPU
Нужны мощнее? VPC (virtual private cloud): сеть 10Gb,
hardware vpn, firewalls
Region = группа связанных датацентров, SLA = 99,95%
ДЦ1 ДЦ2
Балансировщик (ELB)
Группа автомасштабирования (AutoScaling)
CNAME к «myproj-1873425.us-east-
1.elb.amazonaws.com», SSL-терминация
Производительность
ELB (elastic load balancing) – tcp/http балансировщик
EBS (elastic block store) – заметно уступают
«железным» дискам
Software RAID 10
Provisioned IOPS EBS – тысячи IOPS («SSD-диски»)
Percona Server – быстрая загрузка InnoDB buffer pool
страниц при старте.
Поддержка протоколов
ELB – только недавно стал поддерживать WebDAV
ELB – нет поддержки spdy
Long pooling и ELB
ELB tcp-proxy и адреса клиентов
UDP
Ступенчатый трафик и ELB
Мониторинг проблем
Отказоустойчивость
ELB + AutoScaling + CloudWatch
2 и более датацентров (AZ)
Балансировищки – тоже ломаются
Инкрементальные снепшоты серверов (раз в N мин)
Route 53:
- DNS-failover, автопроверка серверов
- сервера на разных континентах
- UDP трафик
Мониторинг - CloudWatch
Полностью обойтись только встроенным
мониторингом – скорее нельзя
Довольно «молодой»
Не хватает ряда важных, привычных метрик
Гибкий, алерты, графики, агрегация
Автоматизация AutoScaling
Мониторинг - CloudWatch
Region = группа связанных датацентров
ДЦ1 ДЦ2
Балансировщик (ELB)
Группа автомасштабирования (AutoScaling)
Мониторинг (CloudWatch)
Образ машины (AMI)
Масштабируемость данных
S3 (simple storage service)
Любой объем данных
Локальная папка через fuse
Временные токены (IAM)
Плюшки типа статических сайтов
Интеграция с CDN – CloudFront
CDN - CloudFront
abc123.cloudfront.net
А в России – пока нет точки раздачи
Настройка политик кэширования
Свои SSL сертификаты
Раздача потоков RTMP
Управление через API
Можно раздавать из s3, своих серверов, ELB
Производительность MySQL
AWS RDS (relation database service)
Master-Slave репликация – можно читать быстро
2 датацентра (az)
Автопереключение при аварии, бэкапы,
восстановление
Отсутствие гибкости при настройке
Были проблемы при авариях региона
Мы – не используем RDS
Производительность MySQL
Master-Master (Active - Pasive)
Переключаем трафик между ДЦ - сами
Percona XtraDB
Master-Master
(Active/Passive)
Мас
шта
би
ро
ван
ие
MyS
QL
ДЦ1 ДЦ2
Резервирование данных
Снепшоты серверов в s3
Инкрементальный бэкап – “из коробки”
Автоматическая консолидация данных
Перенос данных из s3 в s3
Glacier
Регионы и данные
Резервное копирование MySQL
Автоматизация резервирования – AWS SDK …
Резервирование данных
Дата-центр 1
Веб-проект
Дата-центр 2
RDBMS(MySQL) Slave
«Горячий» бэкап
RDBMS(MySQL) Master
S3 снепшот S3 снепшот S3 снепшот
Резервирование данных
Дата-центр 2
RDBMS(MySQL) Master
S3 снепшот S3 снепшот S3 снепшот
Веб-проект
«Эластичный» IP, не поменялся
Полезные веб-сервисы
ElastiCache – кластерный кэш:
- медленнее memcached
CloudSearch – поисковый движок с фасетами:
- нет поддержки морфологии
- не автоматизируется stemming
Альтернативы: sphinx, lucene
SQS (simple queue service) – middleware, очереди
сообщений, распределенное демультиплексирование
IAM (Identity and Access Management) – права,
временные токены
Полезные веб-сервисы
DynamoDB – «законодатель» NoSQL:
- SSD-хранилище
- до 40к запросов в секунду на запись/чтение
SimpleDB
CloudFormation
Выбор региона AWS
Latency
AWS нет в России, оплата
«Технологичные» регионы – в США
Стоимость и наличие reserved-instances
Стоимость spot-instances – как эффективно
сэкономить
Выбор региона AWS
Latency
AWS нет в России, оплата
«Технологичные» регионы – в США
Стоимость и наличие reserved-instances
Стоимость spot-instances – как эффективно
сэкономить
Ужасы …
Когда все «упало»
status.aws.amazon.com
Что может упасть, «когда и почему»
Архитектура стартапа с учетом возможного падения
любого узла
Свой мониторинг амазона – nagios/zabbix
Форумы – быстро отвечают и помогают
Прогресс восстановления после аварии
Платная техподдержка
Спасибо за внимание! Вопросы?
Александр Сербул
AlexSerbul