Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Максим Пугачев (IPONWEB), Современная архитекту...

CodeFest
January 31, 2018

Максим Пугачев (IPONWEB), Современная архитектура платформы RTB, CodeFest 2017

https://2017.codefest.ru/lecture/1178

Постоянная эволюция на рынке онлайн-рекламы требует постоянной эволюции технологий, которые лежат в основе. Как работает современная “programmatic buying” платформа? Как обеспечить гибкость *aaS, основанной на облаках, и кастомизацию для десятков клиентов, в то же время, оставаясь в рамках единого стека?

Несмотря на то, что u-Platform состоит из многих частей, я расскажу вкратце о каждой из них, и более подробно рассмотрю компонент, который обеспечивает тот самый highload:

● Архитектура сервера
● Lua и многопоточность: схема работы внутри рабочего потока, coroutines и yield запросы, sandboxing
● Как гарантировать время обработки запроса
● Интеграция с внешними сервисами
● MongoDB и сопутствующий ворох проблем

CodeFest

January 31, 2018
Tweet

More Decks by CodeFest

Other Decks in Programming

Transcript

  1. IPONWEB • Cloud-based SaaS model • Платформа — набор базовых

    компонентов и сервисов с возможностью кастомизации под каждого клиента
  2. u-Server • Проприетарный HTTP сервер, написанный с нуля около 10

    лет назад • Lua в качестве бизнес-логики
  3. Архитектура • Многопоточность + libevent • Разделение потоков на типы:

    Main, Communication, ServiceWorker, Worker • Main: все ”тяжелые” задачи на перезагрузку/обновление данных, запись данных на диск и т.п.
  4. Архитектура • Communication: общение с внешним миром (HTTP, Database), постановка

    задач для ServiceWorker/Worker • ServiceWorker: обслуживание ”административных” запросов
  5. Архитектура • Communication: общение с внешним миром (HTTP, Database), постановка

    задач для ServiceWorker/Worker • ServiceWorker: обслуживание ”административных” запросов • Worker: бизнес-логика
  6. Minor Перезагрузка конфигурации Перезагрузка Lua sandbox Shutdown Normal MongoDB API

    Новая Lua coroutine Urgent MongoDB API (find + next) HTTP request Timeouts (HTTP + MongoDB) Timers
  7. Minor Перезагрузка конфигурации Перезагрузка Lua sandbox Shutdown Normal MongoDB API

    Новая Lua coroutine Urgent MongoDB API (find + next) HTTP request Timeouts (HTTP + MongoDB) Timers Critical MongoDB reply HTTP response
  8. Архитектура • Приоритеты задач: minor, normal, urgent, critical • coroutines

    (Lua thread) и yield запросы • Гарантия времени выполнения запроса
  9. Архитектура • Приоритеты задач: minor, normal, urgent, critical • coroutines

    (Lua thread) и yield запросы • Гарантия времени выполнения запроса • Sandboxing
  10. Выводы • Не бойтесь менять архитектуру в процессе разработки. Это

    неизбежно • Ограничивайте свободу действий разработчика и/или пользователя, если это необходимо. Даже если они с этим не согласны
  11. Выводы • Не бойтесь менять архитектуру в процессе разработки. Это

    неизбежно • Ограничивайте свободу действий разработчика и/или пользователя, если это необходимо. Даже если они с этим не согласны • Заимствуйте опыт коллег из других областей