SlideShare a Scribd company logo
Prom.ua
ВIталIй Харитонський
Request Lifecycle 

у Prom.ua
План
I. Мережі, датацентри, фронтенди
II. Гейтвей сервіси
III. Всередині кластера
IV. Всередині сервіса
V. Які проблеми все це вирішує/Що робити далі?
N. Інтро
N
N
Чому це може бути цікаво?
- досвід це не тільки те що ви зробили, але ще й наслідки того як ви це
зробили
- це не детальний розбір одного загального компонента, сервіса чи
фреймворка, але послідовність кроків для отримання хайлод-
мікросервіс-орієнтед-обзервабл-аркітекче в нашому конкретному кейсі
- більшість з того про що я буду розповідати це інхауз рішення, тобто
ніякого клауда або зовнішніх інтеграцій
2008
bare-metal
Apache
Monolithic Python app
2012
bare-metal
nginx
Monolithic Python app
App wrapper
Simple micro-services
2014
bare-metal
nginx
Monolithic Python app
Simple micro-services
App wrapper
Containers(vagga)
t, р.
Як розвивалася архітектура Prom.ua
t, р.
2016
bare-metal
nginx
Monolithic Python app
Simple micro-services
Containers(vagga)
CI/CI(GitLab)
Orchestration(verwalter)
2019
bare-metal
nginx
envoy/istio
Monolithic Python app
Complex micro-services
Containers(docker)
CI/CI(GitLab)
Orchestration(k8s)
2021
bare-metal
VM(OpenStack)
nginx
envoy/istio
Frontend NodeJS app
Backend Python app
Complex micro-services
Containers(docker)
CI/CI(GitLab)
Orchestration(k8s)
Як розвивалася архітектура Prom.ua
Які навантаження
- 9к rps на всі домени prom.ua і сайтів
- 5.6к rps на бекенди(моноліт + сервіси)
- 8.3к rps на CDN з зображеннями
- ~20 млн. переглядів сторінок за добу
- 3 млн. унікальних юзерів на добу
- до 6.5 Gb/s вихідного трафіка
- до 500 нод в кластері k8s
- до 140 нод пошукового кластера(ElasticSearch)
- до 35 серверів баз даних
- до 300 Gb в різних мемкешах, редісах, тощо.
- до 110 Тб зображень
Який об’єм інфраструктури
"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy
I
DNS
SSL
WAAP
ROUTE
LUA
AUTH
INGRESS
FRONT
API
NET
API
API
LB
DNS
- 53.541 доменів
- інтеграція з PowerDNS
- власна панель керування доменом
- переключення між майданчиками за
допомогою API & GUI
PowerDNS
App
Control
Plane
Ns1/Ns2
Мережа
- автономна система
- інтеграція з декількома провайдерами
- 6 Gb/s вихідного трафіка
Evo
FIORD
RETN
VOLZ
Gigatrans
Giganet-ix
Мережа
- 3 дц
- “пласка” структура мережі
- адресація подів без NAT
- адресація сервісів в k8s без iptables
Evo DC
Dc III
Dc II
Dc I
Nginx
bare metal
App pod
k8s
IP
User
device
IP
Вхід в ДЦ
- TCP Load Balancer
- попадаємо на 1 з 8 фронтендів - nginx
- SSL Offload
TCP LB
nginx nginx
TCP TCP
HTTP
SSL
- 50k + сертифікатів
- інтеграція з LetsEncrypt/ZeroSSL за
допомогою мікросервіса
- синхронізація нових сертифікатів по rsync
- регулярне оновлення всіх доменів
- додавання нового SSL сертифіката
одним викликом API
Lets Encrypt/Zero SSL
nginx
Evo SSL
rsync
Логіка фронтенду
- Lua
- auth_request
- WebDav
- X-Accel-Redirect
- Ingress discovery за допомогою
интеграції з k8s api
nginx
Auth Service
auth_request
Control
Plane
WebDAV
Логіка фронтенду
- X-Accel-Redirect
- Ingress discovery за допомогою
интеграції з k8s api
nginx
k8s operator
backend push API
Backend
X-Accel-Redirect
Метрики фронтенду
- парсинг логів nginx
- віддача метрик в Prometheus
- метрики по статуса
- метрики по юзерагентам
- метрики по горячим хостам/ендпоінтам
nginx
Log Parser
Prometheus
Metric Agg
Метрики фронтенду
Метрики фронтенду
Метрики фронтенду
Метрики фронтенду
II
II
IPS
- рейт ліміти
- CAPTCHA-challenge
- WAF(частково)
- інтеграція з мобільним додатком
- чорні списки ботнетів
- захист від фейкових ботів
- захист зовнішніх доменів
nginx
IPS
Можна?
Push
Service
"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy
Susanin
- роутінг
- розділення трафіка
- редіректи трафіка між датацентрами
- CORS Offloading
nginx
Susanin
Куди?
App
domains
Susanin
App(Python) App(Golang)
prom.ua/track
1%
100%
Concierge
- аутентифікація
- single-sign-on
- user data storage
nginx
Concierge
Хто?
App
users
Concierge
App(Python)
auth inside
App(Golang)
auth outside
prom.ua/track
Nginx Concierge
auth
auth
Users
cookie
cookie
III
Envoy/Istio
- роутінг між мікросервісами
- дебаг режим
- canary режим
- розділення на приватне/публічне апі
- метрики latency
- grpc load-balancing
Envoy
Istio Pilot(k8s
operator)
VirtualService/
Gateway
Envoy
Catalog
Site Admin Bots
Debug Canary
Nginx
Susanin
headers
Shopping
Cart
Tracking
Розділення запитів
Розділення запитів
IV
SSR
- server-side rendering
- static resources preload
- apollo/graphql api
- html-streaming(in-progress)
- route bypass SSR(nodejs)
App(python)
Susanin+nginx+envoy
App(python)
In app
WSGI
Request
Thread
Event Loop
Thread
Event Loop
Middleware
FeatureFlags
Readonly
Tracing
Sentry
Apm/Debug
GraphQL API
- single backend to rule them all
- доступ до вкладених сутностей
- multi-threaded
- синхронна обробка запиту
- асинхронні запити до зовнішніх ресурсів
Mobile Desktop Internal
Shopping cart
GraphQL
API
VI
Які проблеми вирішує така архітектура
- резервування мережі за допомогою незалежної ASN
- гнучкість http-load balancer + lua
- прозорість метрик фронтендів, гнучка передача даних з бекенда в лог
- повна автоматизація випуску сертифікатів і керування DNS
- обмежений захист від DDOS для необмеженої кількості трафіку/доменів
- гнучка логіка роутінгу з можливістю додавати будь які фічі в т.ч. з даними
з бази
- загальний service-middleware для аутентифікації, zero-cost авторизація
- ізоляція різних частин моноліта для мінімізації впливу помилок різних
частей
- розділення бекенда і фронтенда на різні deploy unit
Що можна було б покращити?
- перейти на асинхроні бібліотеки для всіх зовнішнів запитів
- перейти на більш простий і надійний Nginx Ingress Controller
- отримувати трейсинг логів з урахуваннням ingress
- розбити моноліт на різні функціональні частини замість штучного
розділення трафіка
- отримувати більше ріалтайм телеметрії з основного бекенда(профайлінг,
трейсінг)
- інтегруватися з трейсінгом і APM Sentry
- додати API Gateway для GraphQL
"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy

More Related Content

PPTX
Oleksandr Brychuk "UniSender architecture. Growth from 100kk to 1.5kkk letter...
Fwdays
 
PPTX
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
OdessaJS Conf
 
PPTX
Борис Могила "Isomorphic React apps in production"
Fwdays
 
PPTX
G rpc lection1_theory_bkp2
eleksdev
 
PPTX
Kotlin для розробки Android
UP2IT
 
PPTX
Як покращити Python web UI тести
RomanPobotin1
 
PPTX
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QAFest
 
PDF
JSLab. Роман Якобчук. "Flux в стиле FRP: связываем React и Bacon"
GeeksLab Odessa
 
Oleksandr Brychuk "UniSender architecture. Growth from 100kk to 1.5kkk letter...
Fwdays
 
'GOLANG USAGE IN DEVELOPMENT OF NODE.JS APPLICATIONS (NODE.JS: IN GO WE TRUST...
OdessaJS Conf
 
Борис Могила "Isomorphic React apps in production"
Fwdays
 
G rpc lection1_theory_bkp2
eleksdev
 
Kotlin для розробки Android
UP2IT
 
Як покращити Python web UI тести
RomanPobotin1
 
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QAFest
 
JSLab. Роман Якобчук. "Flux в стиле FRP: связываем React и Bacon"
GeeksLab Odessa
 

What's hot (10)

PPTX
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JSFestUA
 
ODP
Grok web application framework
Quintagroup
 
PPTX
Web service lecture
eleksdev
 
PDF
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
OdessaJS Conf
 
PPTX
Presentation
Andrew Zak
 
PPTX
11 web services
eleksdev
 
PDF
Як прокачати трьох студентів за п’ять тижнів
Artem Henvald
 
PDF
Як прокачати трьох студентів за п’ять тижнів
Stfalcon Meetups
 
PPTX
Aspnet core
eleksdev
 
PDF
Alexey Borisenko - Network Programmability using Python
PyCon Odessa
 
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JSFestUA
 
Grok web application framework
Quintagroup
 
Web service lecture
eleksdev
 
'Why svelte' by BORYS MOHYLA at OdessaJS'2020
OdessaJS Conf
 
Presentation
Andrew Zak
 
11 web services
eleksdev
 
Як прокачати трьох студентів за п’ять тижнів
Artem Henvald
 
Як прокачати трьох студентів за п’ять тижнів
Stfalcon Meetups
 
Aspnet core
eleksdev
 
Alexey Borisenko - Network Programmability using Python
PyCon Odessa
 
Ad

Similar to "Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy (20)

PPTX
СВЯТ ЛОГІН «Що можна витягнути з мобільних додатків»
QADay
 
PPTX
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
Fwdays
 
PDF
"Rethinking Continuous Delivery", Andrii Nasinnyk
Fwdays
 
PDF
NSP та MWG - захист мережевого трафіку
Vladyslav Radetsky
 
PDF
Робота із malware. McAfee ATD+TIE+DXL/OpenDXL
Vladyslav Radetsky
 
PDF
"gRPC-based microservice communication: pros and cons based on our experience...
Fwdays
 
PPTX
"Using AI to Automate Operational Processes at MK-Consulting", Maxim Korzhene...
Fwdays
 
PPTX
Rpc
eleksdev
 
PPT
5 Підсистема введення/виведення. OPC
Пупена Александр
 
PDF
Android Platform Architecture
Pavel Bashmakov
 
PDF
"Simplifying the Complex: Effective Management of Large-Scale PHP Projects", ...
Fwdays
 
PDF
Fog computing - Туманні обчислення в ОТ
APPAU_Ukraine
 
PDF
I gov chernihiv-ihub
vasya_bh
 
PDF
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
Fwdays
 
PDF
Корнілов Андрій
Oleg Nazarevych
 
PPTX
ASP.Net basics
Victor Matyushevskyy
 
PPTX
Курсовий проєкт Мережеві технології.pptx
aud309ithai
 
PPTX
IR System
snipter
 
СВЯТ ЛОГІН «Що можна витягнути з мобільних додатків»
QADay
 
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
Fwdays
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
Fwdays
 
NSP та MWG - захист мережевого трафіку
Vladyslav Radetsky
 
Робота із malware. McAfee ATD+TIE+DXL/OpenDXL
Vladyslav Radetsky
 
"gRPC-based microservice communication: pros and cons based on our experience...
Fwdays
 
"Using AI to Automate Operational Processes at MK-Consulting", Maxim Korzhene...
Fwdays
 
5 Підсистема введення/виведення. OPC
Пупена Александр
 
Android Platform Architecture
Pavel Bashmakov
 
"Simplifying the Complex: Effective Management of Large-Scale PHP Projects", ...
Fwdays
 
Fog computing - Туманні обчислення в ОТ
APPAU_Ukraine
 
I gov chernihiv-ihub
vasya_bh
 
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
Fwdays
 
Корнілов Андрій
Oleg Nazarevych
 
ASP.Net basics
Victor Matyushevskyy
 
Курсовий проєкт Мережеві технології.pptx
aud309ithai
 
IR System
snipter
 
Ad

More from Fwdays (20)

PDF
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
Fwdays
 
PDF
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
Fwdays
 
PPTX
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
Fwdays
 
PPTX
"Як ми переписали Сільпо на Angular", Євген Русаков
Fwdays
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
"Validation and Observability of AI Agents", Oleksandr Denisyuk
Fwdays
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PPTX
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
Fwdays
 
PPTX
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
Fwdays
 
PDF
"AI is already here. What will happen to your team (and your role) tomorrow?"...
Fwdays
 
PPTX
"Is it worth investing in AI in 2025?", Alexander Sharko
Fwdays
 
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
PDF
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
PDF
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
PDF
"Scaling in space and time with Temporal", Andriy Lupa .pdf
Fwdays
 
PPTX
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
Fwdays
 
PPTX
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
Fwdays
 
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
PPTX
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
Fwdays
 
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
Fwdays
 
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
Fwdays
 
"Як ми переписали Сільпо на Angular", Євген Русаков
Fwdays
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
"Validation and Observability of AI Agents", Oleksandr Denisyuk
Fwdays
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
Fwdays
 
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
Fwdays
 
"AI is already here. What will happen to your team (and your role) tomorrow?"...
Fwdays
 
"Is it worth investing in AI in 2025?", Alexander Sharko
Fwdays
 
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
"Scaling in space and time with Temporal", Andriy Lupa .pdf
Fwdays
 
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
Fwdays
 
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
Fwdays
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 

"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy

  • 2. План I. Мережі, датацентри, фронтенди II. Гейтвей сервіси III. Всередині кластера IV. Всередині сервіса V. Які проблеми все це вирішує/Що робити далі? N. Інтро
  • 3. N
  • 4. N
  • 5. Чому це може бути цікаво? - досвід це не тільки те що ви зробили, але ще й наслідки того як ви це зробили - це не детальний розбір одного загального компонента, сервіса чи фреймворка, але послідовність кроків для отримання хайлод- мікросервіс-орієнтед-обзервабл-аркітекче в нашому конкретному кейсі - більшість з того про що я буду розповідати це інхауз рішення, тобто ніякого клауда або зовнішніх інтеграцій
  • 6. 2008 bare-metal Apache Monolithic Python app 2012 bare-metal nginx Monolithic Python app App wrapper Simple micro-services 2014 bare-metal nginx Monolithic Python app Simple micro-services App wrapper Containers(vagga) t, р. Як розвивалася архітектура Prom.ua
  • 7. t, р. 2016 bare-metal nginx Monolithic Python app Simple micro-services Containers(vagga) CI/CI(GitLab) Orchestration(verwalter) 2019 bare-metal nginx envoy/istio Monolithic Python app Complex micro-services Containers(docker) CI/CI(GitLab) Orchestration(k8s) 2021 bare-metal VM(OpenStack) nginx envoy/istio Frontend NodeJS app Backend Python app Complex micro-services Containers(docker) CI/CI(GitLab) Orchestration(k8s) Як розвивалася архітектура Prom.ua
  • 8. Які навантаження - 9к rps на всі домени prom.ua і сайтів - 5.6к rps на бекенди(моноліт + сервіси) - 8.3к rps на CDN з зображеннями - ~20 млн. переглядів сторінок за добу - 3 млн. унікальних юзерів на добу - до 6.5 Gb/s вихідного трафіка
  • 9. - до 500 нод в кластері k8s - до 140 нод пошукового кластера(ElasticSearch) - до 35 серверів баз даних - до 300 Gb в різних мемкешах, редісах, тощо. - до 110 Тб зображень Який об’єм інфраструктури
  • 11. I
  • 13. DNS - 53.541 доменів - інтеграція з PowerDNS - власна панель керування доменом - переключення між майданчиками за допомогою API & GUI PowerDNS App Control Plane Ns1/Ns2
  • 14. Мережа - автономна система - інтеграція з декількома провайдерами - 6 Gb/s вихідного трафіка Evo FIORD RETN VOLZ Gigatrans Giganet-ix
  • 15. Мережа - 3 дц - “пласка” структура мережі - адресація подів без NAT - адресація сервісів в k8s без iptables Evo DC Dc III Dc II Dc I Nginx bare metal App pod k8s IP User device IP
  • 16. Вхід в ДЦ - TCP Load Balancer - попадаємо на 1 з 8 фронтендів - nginx - SSL Offload TCP LB nginx nginx TCP TCP HTTP
  • 17. SSL - 50k + сертифікатів - інтеграція з LetsEncrypt/ZeroSSL за допомогою мікросервіса - синхронізація нових сертифікатів по rsync - регулярне оновлення всіх доменів - додавання нового SSL сертифіката одним викликом API Lets Encrypt/Zero SSL nginx Evo SSL rsync
  • 18. Логіка фронтенду - Lua - auth_request - WebDav - X-Accel-Redirect - Ingress discovery за допомогою интеграції з k8s api nginx Auth Service auth_request Control Plane WebDAV
  • 19. Логіка фронтенду - X-Accel-Redirect - Ingress discovery за допомогою интеграції з k8s api nginx k8s operator backend push API Backend X-Accel-Redirect
  • 20. Метрики фронтенду - парсинг логів nginx - віддача метрик в Prometheus - метрики по статуса - метрики по юзерагентам - метрики по горячим хостам/ендпоінтам nginx Log Parser Prometheus Metric Agg
  • 25. II II
  • 26. IPS - рейт ліміти - CAPTCHA-challenge - WAF(частково) - інтеграція з мобільним додатком - чорні списки ботнетів - захист від фейкових ботів - захист зовнішніх доменів nginx IPS Можна? Push Service
  • 28. Susanin - роутінг - розділення трафіка - редіректи трафіка між датацентрами - CORS Offloading nginx Susanin Куди? App domains
  • 30. Concierge - аутентифікація - single-sign-on - user data storage nginx Concierge Хто? App users
  • 32. III
  • 33. Envoy/Istio - роутінг між мікросервісами - дебаг режим - canary режим - розділення на приватне/публічне апі - метрики latency - grpc load-balancing Envoy Istio Pilot(k8s operator) VirtualService/ Gateway
  • 34. Envoy Catalog Site Admin Bots Debug Canary Nginx Susanin headers Shopping Cart Tracking
  • 37. IV
  • 38. SSR - server-side rendering - static resources preload - apollo/graphql api - html-streaming(in-progress) - route bypass SSR(nodejs) App(python) Susanin+nginx+envoy App(python)
  • 41. GraphQL API - single backend to rule them all - доступ до вкладених сутностей - multi-threaded - синхронна обробка запиту - асинхронні запити до зовнішніх ресурсів Mobile Desktop Internal Shopping cart GraphQL API
  • 42. VI
  • 43. Які проблеми вирішує така архітектура - резервування мережі за допомогою незалежної ASN - гнучкість http-load balancer + lua - прозорість метрик фронтендів, гнучка передача даних з бекенда в лог - повна автоматизація випуску сертифікатів і керування DNS - обмежений захист від DDOS для необмеженої кількості трафіку/доменів - гнучка логіка роутінгу з можливістю додавати будь які фічі в т.ч. з даними з бази - загальний service-middleware для аутентифікації, zero-cost авторизація - ізоляція різних частин моноліта для мінімізації впливу помилок різних частей - розділення бекенда і фронтенда на різні deploy unit
  • 44. Що можна було б покращити? - перейти на асинхроні бібліотеки для всіх зовнішнів запитів - перейти на більш простий і надійний Nginx Ingress Controller - отримувати трейсинг логів з урахуваннням ingress - розбити моноліт на різні функціональні частини замість штучного розділення трафіка - отримувати більше ріалтайм телеметрії з основного бекенда(профайлінг, трейсінг) - інтегруватися з трейсінгом і APM Sentry - додати API Gateway для GraphQL