SlideShare a Scribd company logo
1 of 31
От Legacy до High-load
Эволюция веб-приложения
Евгений Лысенко
Concert.ua
ОТ LEGACY ДО
HIGH-LOADЭВОЛЮЦИЯ ВЕБ-
ПРИЛОЖЕНИЯ
КТО МЫ?
С ЧЕГО НАЧИНАЛСЯ
CONCERT.UA?
Билетная система v-Ticket была создана для продажи билетов на события
VIRUS Music в 2010 году
ЧЕМ МЫ
ЗАНИМАЕМСЯ?
• IT-development
• Аналитика
ЧТО БЫЛО ПОД
КАПОТОМ В 2010?
Software stack:
• FreeBSD 8
• PHP5.2
• MySQL 5.1
• Apache 2.2 + mod_php
ИНТЕГРАЦИЯ С
ВНЕШНИМИ
СЕРВИСАМИ
Other
ticketing
systems
SMS
gateway
Payment
gateways
Delivery
service
Misc adv
networks
РОЖДЕНИЕ
CONCERT.UA
В 2012 мы разделили билетную систему
и продающий сайт и начали продвигать
Concert.ua как самостоятельный бренд
РАЗДЕЛЕНИЕ
ОБЯЗАННОСТЕЙ
НАЧАЛЬНАЯ
АРХИТЕКТУРА
ПРОЕКТА
Б.К.Г.
НАГРУЗКА НА 2012
3000 посещений
300 билетов в 200 заказах
…в сутки
ПЕРИОД РОСТА
ВСКРЫВШИЕСЯ
ПРОБЛЕМЫ
Неуклюжий самописный фреймворк
Отсутствие документации и комментариев
Синхронная обработка всего
Проект был не по канонам ООП и MVC
Зависимости впаяны в репозиторий
Непродуманная схема данных в db
Почти полное отсутствие индексов в db
Прямые SQL-запросы из контроллеров
Отсутствовала полноценная корзина
Не обрабатывались многие ошибки
AJAX-запросы не авторизовывались
Довольно часто получались дубли мест
Поиск по названию занимал до 30 сек
Типичное время отклика было 3-10 сек
Разнились цифры в отчётах
ГДЕ ВЫХОД?
ВАРИАНТЫ РЕШЕНИЯ
1. Эволюционный путь
2. Революционный путь
3. Параллельная реальность
УСПЕХИ В ЭВОЛЮЦИИ
 Поиск событий и площадок через ElasticSearch
 Созданы индексы в db
 Хранение сессий и кеш сущностей в Redis
 Тюнинг apache и добавление nginx как reverse proxy
 Добавлены обработчики ошибок
 Исправлены злостные просчёты в схеме данных
F*CK-UP: SERVICE
OUTAGE ;-(
ТРАНСФОРМАЦИЯ:
PHASE 1
 Переход на PHP7
 Замена Apache на nginx + PHP-FPM для legacy
 Переписывание Frontstore на Yii2
 Внедрение билетного ядра vCORE
 Создание экосистемы stateless-сервисов
 Очереди на RabbitMQ
 Разделение монолитной DB
EUROVISION SONG
CONTEST 2017
Переезд в облако Digital Ocean
Тонкая настройка CloudFlare
Anti-scalper Lua-скрипты для nginx
Боевое крещение ядра vCORE
Queue-It сервис электронных очередей
ТРАНСФОРМАЦИЯ:
PHASE 2
 dRPC-архитектура ядра vCORE на основе WAMP v2 (Crossbar)
 New-gen v-Ticket Frontend (Angular, WAMP v2 over WSS)
 Storage service: хранение изображений и документов
 Sentry: централизованный сбор ошибок и исключений
 Analytics service: сбор и агрегация big data
 ELK-стек: сбор логов со всех служб
 Prometheus: слежение за heart-beat критических служб
 Контейнеризация приложений и сервисов
MariaDB 1
MariaDB 2
MariaDB 5
MariaDB 3
MariaDB 4
Block storage
bi-daily backups
Galera Cluster
MySQL
MaxScale 1
MaxScale 2
CloudFlare
Concert.ua
Load Balancer
CloudFlare
v-Ticket
HTTPS
Balancer-1
Internal DNS1
HTTPS
WSS
WS
Balancer-2
Internal DNS2
PHP Session storage
application cache
Redis
HTTP
concertua-app01
concertua-app02
concertua-app03
(staging)
Concert.ua cluster
HTTP
vticket-app00
(API)
vticket-app01
vticket-app02
v-Ticket legacy cluster
MySQL
Block storage
volume-01-fra1
storage1
(static & logs)
NFS
Redis
PHP Session storage
application cache
ElasticSearch 1 ElasticSearch 2 ElasticSearch 3
ElasticSearch cluster
RabbitMQ srv1
Crossbar srv1
PostgreSQLPostgreSQL
Exim 1
HAProxy
Exim 2 Exim 3
Mail out cluster
AMQP
AMQP
SMTP
WAMP
over WS or TCP
SMTP
MySQL
Redis
 AMQP
vticket-core01 SMTP
MySQL
Redis
RabbitMQ
storage.concert.ua
HTTPS
CloudFlare
storage.concert.ua
HTTP
HTTP
HTTP
sentry.concert.ua
HTTPS
CloudFlare
sentry.concert.ua
vticket-worker01
vsync-common-dispatcher
vsync-common
ticket-renderer
sms-sender
email-sender
ladesk-worker
order-operation-migrator
core-auth-service
google-analytics-worker
vticket-worker02
vsync-common-dispatcher
vsync-common
ticket-renderer
sms-sender
email-sender
ladesk-worker
order-operation-migrator
core-auth-service
google-analytics-worker
Redis srv2Redis srv1
ТЕКУЩАЯ
АРХИТЕКТУРА
IMAGE & DOC
STORAGE
 Абстракция от физического хранилища
 CRUD по RESTful интерфейсу
 Автоматический ресайз картинок по конфигурации
 Возможность миграции между физическими хранилищами
IMAGE & DOC
STORAGE – SAVE
pic1.jpg
Storage Service
Physical Storage
HTTP PUT SAVE
IMAGE & DOC
STORAGE – FETCH
pic1.jpg:31-event-poster
Storage Service
Physical Storage
HTTP GET TRY FETCH
SAVE
RPC WITH
CROSSBAR.IO (WAMP)
IMAGINE DRAGONS
2018
Полностью новый сайт
Queue-It сервис электронных очередей
 Абсолютный рекорд Украины:
50% стадиона за 6 часов
 Concert.ua продал 84%
Sales
Concert.ua Others
НАГРУЗКА НА 2018
50000-80000 посещений
5000 билетов в 3000 заказах
в сутки
Билетный сайт №2 по посещаемости в СНГ
ОТРАЖЕНИЕ DDOS
o CloudFlare: WAF, Rate Limiter, Country Block, Load Balancer
o Распознавание паттернов атаки
o Правила на nginx (ограничения PUT/POST, referrer и т.п.)
o Кастомные правила WAF на CloudFlare
o Barracuda Cloudgen Firewall или a10 WAF
ВЫВОДЫ
 При проектировании архитектуры стоит держать в голове вопрос: «Как это
будет работать завтра?»
 Переделывать рабочий проект намного дольше, дороже и сложнее,
нежели написать такой с нуля
 PHP-приложение может стабильно работать в качестве демона и даже
мульти-процессно
 WS стабильно работает даже в условиях DDOS
 Оправдано дальнейшее дробление сервисов на более мелкие
Yevgen Lysenko "From Legacy to High-Load: Evolution of web-application"

More Related Content

What's hot

алексей лукацкий 1
алексей лукацкий 1алексей лукацкий 1
алексей лукацкий 1
Positive Hack Days
 
Технологии и архитектура систем ВКС
Технологии и архитектура систем ВКСТехнологии и архитектура систем ВКС
Технологии и архитектура систем ВКС
Andrew Vlaskin
 

What's hot (12)

алексей лукацкий 1
алексей лукацкий 1алексей лукацкий 1
алексей лукацкий 1
 
Облака в вашей компании: обозначаем цели, определяем методы
Облака в вашей компании: обозначаем цели, определяем методыОблака в вашей компании: обозначаем цели, определяем методы
Облака в вашей компании: обозначаем цели, определяем методы
 
Plug computer -- freedombox
Plug computer -- freedomboxPlug computer -- freedombox
Plug computer -- freedombox
 
Чем отличаются InterBase и Firebird (Russian), 2008
Чем отличаются InterBase и Firebird (Russian), 2008Чем отличаются InterBase и Firebird (Russian), 2008
Чем отличаются InterBase и Firebird (Russian), 2008
 
Обеспечение безопасности данных в облаке КРОК
Обеспечение безопасности данных в облаке КРОКОбеспечение безопасности данных в облаке КРОК
Обеспечение безопасности данных в облаке КРОК
 
Совместный вебинар Citrix и «С-Терра СиЭсПи», 26.04.2016
Совместный вебинар Citrix и «С-Терра СиЭсПи», 26.04.2016Совместный вебинар Citrix и «С-Терра СиЭсПи», 26.04.2016
Совместный вебинар Citrix и «С-Терра СиЭсПи», 26.04.2016
 
Совместный вебинар Orange и «С-Терра СиЭсПи», 28.06.2016
Совместный вебинар Orange и «С-Терра СиЭсПи», 28.06.2016 Совместный вебинар Orange и «С-Терра СиЭсПи», 28.06.2016
Совместный вебинар Orange и «С-Терра СиЭсПи», 28.06.2016
 
Доклад С-Терра на Код ИБ, Казань, 2016
Доклад С-Терра на Код ИБ, Казань, 2016Доклад С-Терра на Код ИБ, Казань, 2016
Доклад С-Терра на Код ИБ, Казань, 2016
 
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...
 
Решения крок для учебных заведений
Решения крок для учебных заведенийРешения крок для учебных заведений
Решения крок для учебных заведений
 
Эдуард Горбунов - Ростелеком, новые услуги для продвижения бизнеса. КИТ-форум...
Эдуард Горбунов - Ростелеком, новые услуги для продвижения бизнеса. КИТ-форум...Эдуард Горбунов - Ростелеком, новые услуги для продвижения бизнеса. КИТ-форум...
Эдуард Горбунов - Ростелеком, новые услуги для продвижения бизнеса. КИТ-форум...
 
Технологии и архитектура систем ВКС
Технологии и архитектура систем ВКСТехнологии и архитектура систем ВКС
Технологии и архитектура систем ВКС
 

Similar to Yevgen Lysenko "From Legacy to High-Load: Evolution of web-application"

Антон Петров "ЦОД во "времена перемен"
Антон Петров "ЦОД во "времена перемен"Антон Петров "ЦОД во "времена перемен"
Антон Петров "ЦОД во "времена перемен"
Anton Petrov
 
Программируемые и программно- определяемые сети
Программируемые и программно- определяемые сети Программируемые и программно- определяемые сети
Программируемые и программно- определяемые сети
Cisco Russia
 
Построение ИТ инфраструктуры организации на платформе Майкрософт 23.07.2010
Построение ИТ инфраструктуры организации на платформе Майкрософт 23.07.2010Построение ИТ инфраструктуры организации на платформе Майкрософт 23.07.2010
Построение ИТ инфраструктуры организации на платформе Майкрософт 23.07.2010
ebuc
 

Similar to Yevgen Lysenko "From Legacy to High-Load: Evolution of web-application" (20)

Using Sentry for error collection and analysis in a distributed system - Yevg...
Using Sentry for error collection and analysis in a distributed system - Yevg...Using Sentry for error collection and analysis in a distributed system - Yevg...
Using Sentry for error collection and analysis in a distributed system - Yevg...
 
Microsoft Virtualization(Plex)
Microsoft Virtualization(Plex)Microsoft Virtualization(Plex)
Microsoft Virtualization(Plex)
 
Инфраструктура как сервис. Практика использования.
Инфраструктура как сервис. Практика использования.Инфраструктура как сервис. Практика использования.
Инфраструктура как сервис. Практика использования.
 
КРИ 2014: Расширение возможностей вашей игры с помощью Microsoft Azure
КРИ 2014: Расширение возможностей вашей игры с помощью Microsoft AzureКРИ 2014: Расширение возможностей вашей игры с помощью Microsoft Azure
КРИ 2014: Расширение возможностей вашей игры с помощью Microsoft Azure
 
Развитие программной платформы Cisco WAN Automation Engine
Развитие программной платформы Cisco WAN Automation EngineРазвитие программной платформы Cisco WAN Automation Engine
Развитие программной платформы Cisco WAN Automation Engine
 
F5 Value for VMware RUS
F5 Value for VMware RUSF5 Value for VMware RUS
F5 Value for VMware RUS
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
IT-инфраструктура
IT-инфраструктураIT-инфраструктура
IT-инфраструктура
 
ПТА-2016 - Доклад про Advantech PaaS
ПТА-2016 - Доклад про Advantech PaaSПТА-2016 - Доклад про Advantech PaaS
ПТА-2016 - Доклад про Advantech PaaS
 
Антон Петров "ЦОД во "времена перемен"
Антон Петров "ЦОД во "времена перемен"Антон Петров "ЦОД во "времена перемен"
Антон Петров "ЦОД во "времена перемен"
 
Защита корпорации на платформе Palo Alto Networks
Защита корпорации на платформе Palo Alto Networks Защита корпорации на платформе Palo Alto Networks
Защита корпорации на платформе Palo Alto Networks
 
Контроль услуг и приложений в центрах обработки данных нового поколения
Контроль услуг и приложений в центрах обработки данных нового поколенияКонтроль услуг и приложений в центрах обработки данных нового поколения
Контроль услуг и приложений в центрах обработки данных нового поколения
 
Программируемые и программно- определяемые сети
Программируемые и программно- определяемые сети Программируемые и программно- определяемые сети
Программируемые и программно- определяемые сети
 
ExtremeManagement XMC (formerly NetSight)
ExtremeManagement XMC (formerly NetSight)ExtremeManagement XMC (formerly NetSight)
ExtremeManagement XMC (formerly NetSight)
 
iWAN: Мониторинг, контроль и оптимизация работы приложений для распределенных...
iWAN: Мониторинг, контроль и оптимизация работы приложений для распределенных...iWAN: Мониторинг, контроль и оптимизация работы приложений для распределенных...
iWAN: Мониторинг, контроль и оптимизация работы приложений для распределенных...
 
Построение ИТ инфраструктуры организации на платформе Майкрософт 23.07.2010
Построение ИТ инфраструктуры организации на платформе Майкрософт 23.07.2010Построение ИТ инфраструктуры организации на платформе Майкрософт 23.07.2010
Построение ИТ инфраструктуры организации на платформе Майкрософт 23.07.2010
 
Темное настоящее и светлое будущее WebRTC
Темное настоящее и светлое будущее WebRTCТемное настоящее и светлое будущее WebRTC
Темное настоящее и светлое будущее WebRTC
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014
 
"Как заработать на внедрении отечественной системы ВКС в условиях импортозаме...
"Как заработать на внедрении отечественной системы ВКС в условиях импортозаме..."Как заработать на внедрении отечественной системы ВКС в условиях импортозаме...
"Как заработать на внедрении отечественной системы ВКС в условиях импортозаме...
 
Реальный кейс создания и сопровождения облачной ИТ-инфраструктуры компании ма...
Реальный кейс создания и сопровождения облачной ИТ-инфраструктуры компании ма...Реальный кейс создания и сопровождения облачной ИТ-инфраструктуры компании ма...
Реальный кейс создания и сопровождения облачной ИТ-инфраструктуры компании ма...
 

More from Fwdays

More from Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

Yevgen Lysenko "From Legacy to High-Load: Evolution of web-application"

  • 1. От Legacy до High-load Эволюция веб-приложения Евгений Лысенко Concert.ua
  • 2. ОТ LEGACY ДО HIGH-LOADЭВОЛЮЦИЯ ВЕБ- ПРИЛОЖЕНИЯ
  • 4.
  • 5. С ЧЕГО НАЧИНАЛСЯ CONCERT.UA? Билетная система v-Ticket была создана для продажи билетов на события VIRUS Music в 2010 году
  • 7. ЧТО БЫЛО ПОД КАПОТОМ В 2010? Software stack: • FreeBSD 8 • PHP5.2 • MySQL 5.1 • Apache 2.2 + mod_php
  • 9. РОЖДЕНИЕ CONCERT.UA В 2012 мы разделили билетную систему и продающий сайт и начали продвигать Concert.ua как самостоятельный бренд
  • 12. НАГРУЗКА НА 2012 3000 посещений 300 билетов в 200 заказах …в сутки
  • 14. ВСКРЫВШИЕСЯ ПРОБЛЕМЫ Неуклюжий самописный фреймворк Отсутствие документации и комментариев Синхронная обработка всего Проект был не по канонам ООП и MVC Зависимости впаяны в репозиторий Непродуманная схема данных в db Почти полное отсутствие индексов в db Прямые SQL-запросы из контроллеров Отсутствовала полноценная корзина Не обрабатывались многие ошибки AJAX-запросы не авторизовывались Довольно часто получались дубли мест Поиск по названию занимал до 30 сек Типичное время отклика было 3-10 сек Разнились цифры в отчётах
  • 16. ВАРИАНТЫ РЕШЕНИЯ 1. Эволюционный путь 2. Революционный путь 3. Параллельная реальность
  • 17. УСПЕХИ В ЭВОЛЮЦИИ  Поиск событий и площадок через ElasticSearch  Созданы индексы в db  Хранение сессий и кеш сущностей в Redis  Тюнинг apache и добавление nginx как reverse proxy  Добавлены обработчики ошибок  Исправлены злостные просчёты в схеме данных
  • 19. ТРАНСФОРМАЦИЯ: PHASE 1  Переход на PHP7  Замена Apache на nginx + PHP-FPM для legacy  Переписывание Frontstore на Yii2  Внедрение билетного ядра vCORE  Создание экосистемы stateless-сервисов  Очереди на RabbitMQ  Разделение монолитной DB
  • 20. EUROVISION SONG CONTEST 2017 Переезд в облако Digital Ocean Тонкая настройка CloudFlare Anti-scalper Lua-скрипты для nginx Боевое крещение ядра vCORE Queue-It сервис электронных очередей
  • 21. ТРАНСФОРМАЦИЯ: PHASE 2  dRPC-архитектура ядра vCORE на основе WAMP v2 (Crossbar)  New-gen v-Ticket Frontend (Angular, WAMP v2 over WSS)  Storage service: хранение изображений и документов  Sentry: централизованный сбор ошибок и исключений  Analytics service: сбор и агрегация big data  ELK-стек: сбор логов со всех служб  Prometheus: слежение за heart-beat критических служб  Контейнеризация приложений и сервисов
  • 22. MariaDB 1 MariaDB 2 MariaDB 5 MariaDB 3 MariaDB 4 Block storage bi-daily backups Galera Cluster MySQL MaxScale 1 MaxScale 2 CloudFlare Concert.ua Load Balancer CloudFlare v-Ticket HTTPS Balancer-1 Internal DNS1 HTTPS WSS WS Balancer-2 Internal DNS2 PHP Session storage application cache Redis HTTP concertua-app01 concertua-app02 concertua-app03 (staging) Concert.ua cluster HTTP vticket-app00 (API) vticket-app01 vticket-app02 v-Ticket legacy cluster MySQL Block storage volume-01-fra1 storage1 (static & logs) NFS Redis PHP Session storage application cache ElasticSearch 1 ElasticSearch 2 ElasticSearch 3 ElasticSearch cluster RabbitMQ srv1 Crossbar srv1 PostgreSQLPostgreSQL Exim 1 HAProxy Exim 2 Exim 3 Mail out cluster AMQP AMQP SMTP WAMP over WS or TCP SMTP MySQL Redis  AMQP vticket-core01 SMTP MySQL Redis RabbitMQ storage.concert.ua HTTPS CloudFlare storage.concert.ua HTTP HTTP HTTP sentry.concert.ua HTTPS CloudFlare sentry.concert.ua vticket-worker01 vsync-common-dispatcher vsync-common ticket-renderer sms-sender email-sender ladesk-worker order-operation-migrator core-auth-service google-analytics-worker vticket-worker02 vsync-common-dispatcher vsync-common ticket-renderer sms-sender email-sender ladesk-worker order-operation-migrator core-auth-service google-analytics-worker Redis srv2Redis srv1 ТЕКУЩАЯ АРХИТЕКТУРА
  • 23. IMAGE & DOC STORAGE  Абстракция от физического хранилища  CRUD по RESTful интерфейсу  Автоматический ресайз картинок по конфигурации  Возможность миграции между физическими хранилищами
  • 24. IMAGE & DOC STORAGE – SAVE pic1.jpg Storage Service Physical Storage HTTP PUT SAVE
  • 25. IMAGE & DOC STORAGE – FETCH pic1.jpg:31-event-poster Storage Service Physical Storage HTTP GET TRY FETCH SAVE
  • 27. IMAGINE DRAGONS 2018 Полностью новый сайт Queue-It сервис электронных очередей  Абсолютный рекорд Украины: 50% стадиона за 6 часов  Concert.ua продал 84% Sales Concert.ua Others
  • 28. НАГРУЗКА НА 2018 50000-80000 посещений 5000 билетов в 3000 заказах в сутки Билетный сайт №2 по посещаемости в СНГ
  • 29. ОТРАЖЕНИЕ DDOS o CloudFlare: WAF, Rate Limiter, Country Block, Load Balancer o Распознавание паттернов атаки o Правила на nginx (ограничения PUT/POST, referrer и т.п.) o Кастомные правила WAF на CloudFlare o Barracuda Cloudgen Firewall или a10 WAF
  • 30. ВЫВОДЫ  При проектировании архитектуры стоит держать в голове вопрос: «Как это будет работать завтра?»  Переделывать рабочий проект намного дольше, дороже и сложнее, нежели написать такой с нуля  PHP-приложение может стабильно работать в качестве демона и даже мульти-процессно  WS стабильно работает даже в условиях DDOS  Оправдано дальнейшее дробление сервисов на более мелкие

Editor's Notes

  1. Меня зовут Евгений Лысенко, я со-владелец и CTO компании Concert.ua и со-основатель всего холдинга VIRUS Music, куда входит Concert.ua Concert.ua сейчас является лидером билетного рынка страны Рассказ о нас, был бы не полным, если бы я вкратце не рассказал о наших корнях
  2. 1999 – музыкальный рекорд-лейбл 2003 – онлайн рейтинг 2006 – начали проводить большие события: Godskitchen, фестиваль Global Gathering, Пиратская Станция, A State Of Trance, Tiesto Club Life и многие другие 2011 – провели первый Sensation 2012 – билетный оператор Concert.ua
  3. Так как мы были сфокусированы на проведении событий, разработка софта для нас не была профильной и первую версию системы для нас целиком реализовала аутсорс компания
  4. Бизнес канва Александра Остервальдера
  5. Классические, общепринятые технологии, принятые без зазора на будущее и без рассмотрения альтернатив Hardware: апп-сервер с 2мя 4х ядерными камнями Xeon, с 24ГБ памяти и Raid 1 Дб-сервер с 2мя 4х ядерными камнями Xeon с 16ГБ памяти и Raid10 на 15K SAS-дисках
  6. По RESTful или SOAP API В первые пару лет было всего пару внешних билетных партнёров, сейчас их уже несколько десятков
  7. Получив боевой опыт на продаже собственных событий, мы решили предложить этот продукт широкому рынку Однако мы быстро поняли, что v-Ticket – плохой консюмерский бренд и придумали бренд понятный для широкой аудитории
  8. Concert.ua – frontstore, витрина. Хранит внешнее представление ассортимента, подборки, рейтинга, консюмеров, процессит оплаты V-Ticket – склад, система. Хранит залы, продажи, билетную массу, биллинговую информацию и многое другое
  9. Как и многие стартаты – Большой Комок Грязи Монолитный кусок кода, где всё исполнялось синхронно Всего пара-тройка крон-джобов Скорее класс-ориентированное программирование, нежели ООП Назвать продукт соответствующим парадигме MVC тоже не получалось
  10. ~2-3 посещения в минуту В пиковые моменты продаж бывало до 10 посещений в минуту
  11. Активная работа над брендом и его продвижение принесли плоды и трафик и продажи пошли вверх С 2014 года мы в среднем утраиваем свой оборот каждый год
  12. Начал расти трафик и продажи, начали расти нагрузки и проявляться проблемы одна за другой Торможение файловой системы из 21млн файлов в тмп-папке с ШК При отказе некоторых сервисов наше приложение тоже прекращало адекватно работать – например при отказе SMS-шлюза становилось невозможным оформить заказ Приложение прогрессивно замедлялось с ростом базы Проблемы начали накапливаться как снежный ком В 2014 году было принято решение забрать разработку продукта in-house Оказалось что репозиторий проекта не соответствовал файлам на продакшене
  13. Сложная ситуация: с одной стороны трафик рос и бизнес требовал новых фич, с другой проект явно подходил к грани, за которую физически не мог перешагнуть Нужно было срочно что-то менять Код был полностью связан, как лапша в тарелке и пере Невозможно переписать модуль за модулем, поскольку не было никаких модулей Попытки переписать какую либо часть часто приводили к полной неработоспособностия Каждая решённая проблема вскрывала новые и новые проблемы
  14. 1. Решение проблемы за проблемой, до исправления всех детских болезней Позже стало понятно, что этот вариант не сможет исправить фундаментальные промахи в проектировании программной архитектуры 2. Создание полностью новой системы с нуля. Дальнейшая интеграция со всеми сервисами, включая свою старую систему и постепенный перевод клиентов Был создан прототип новой системы. Даже был внедрён в автоматизации одной из площадок. Но бизнес интересы текущей системы всегда были в приоритете и новая система так и не смогла догнать по функционалу старую 3. Выстраивание новой системы на базе старых данных, но не кода Построение нового билетного ядра (VCORE), на его базе нового Frontstore, разбиение системы на микросервисы, а монолитную DB на части
  15. Эти меры несколько улучшили картину и на какое-то время оттянули, как стало ясно позднее, неизбежное
  16. Старт продаж Depeche Mode – Global Spirit Tour 19.07.2017 на НСК Олимпийский 500-800 одновременных чел на сайте положили сервис из-за отсутствия индекса, используемого при определённом джойне Синтетические нагрузочные тесты эту проблему не выявили Репутационный удар и финансовые потери К тому времени начали писать новое билетное ядро для создания Параллельной Реальности
  17. Базы: Galera Cluster, PostgreSQL, ElasticSearch, Redis Сервис-воркеры на основе ReactPHP: Ticket renderer, Apple Wallet renderer, Email sender, SMS sender, vSync worker, LAdesk worker, fin-transaction worker, etc Воркеры стабильно работают и довольно редко текут по памяти. Проблем с ними у нас нет. Мы любим Symfony, но Yii2 оказался самым быстрым PHP-фрейморком из протестированных нами, кроме Phalcon (который имеет свои сложности, в частности с дебагом)
  18. Продали все доступные билеты на финал за первые 15 минут продаж На старте, на странице продажи финала было одновременно до 3200 человек Электронная очередь доходила до 12 500 чел Среднее время отклика системы стало 150-200мс даже в моменты пиковой нагрузки Как работает электронная очередь… Всё это позволило продать билетов на ЕВ более чем на 70млн грн
  19. Ядро, как центральный элемент экосистемы использует Identity Service, который выдаёт JWT-удостоверения пользователям бекофиса Используем Pub/Sub возможности WAMP/Crossbar С ядром мы пошли дальше и помимо того, что его инстансы работают как демон, само ядро имеет хост-процесс, поддерживающий пулл воркер-процессов. Воркеры порождаются/уничтожаются по необходимости
  20. Верхняя часть отвечает за frontstore, нижняя – склад и службы Эта диаграмма не полная. Здесь нет нашего сервиса аналитики: Amazon Kinesis, Amazon Athena, Lambda и API Gateway В процессе переезда на AWS Для более быстрой масштабируемости планируем миграцию на Aurora Serverless
  21. Так как мы имеем дело с большим кол-вом визуального контента, для нас важно иметь подходящее, гибкое хранилище изображений Хранилище полностью автономно от приложения FlySystem – Возможно использование таких хранилищ: Local File system, AWS S3, DO Spaces, Azure, Memory, Migration Adapter Intervention Image для работы над картинками Может хранить любые BLOB-объекты, не только картинки
  22. Как это работает?
  23. Также через адаптер можно проводить онлайн миграцию в другое хранилище
  24. Электронная очередь доходила до 52500 чел Выручка за первые 6 часов превысила 1 млн долларов Фан-зона была раскуплена за первые 2 часа И всё это за 8 месяцев до концерта – удивительно
  25. Наш успех не остался не замеченным и майка лидера привлекла к себе внимание во всех его проявлениях В том числе и DDOS атака в этом июне, длившаяся 1,5 месяца с небольшими перерывами Альтернатива CF – Imperva Incapsula Готовиться к атакам нужно заранее, иначе справится с ней будет сложнее Интересный факт: поднятые WS-соединения оставались рабочими даже в пиках DDOS
  26. За последние пару лет нами написано немало полезных инструментов и мы обсуждаем возможность выпуска некоторых из них в Open Source Например: vORM, Vinjecto, SeatyJS