Про Cosmos — Serverless платформа от Netflix

На этой неделе на хайпе статья Нетфликса про их новую Serverless платформу Cosmos — https://netflixtechblog.com/the-netflix-cosmos-platform-35c14d9351ad. Я решил описать основные моменты из этой статьи — возможно обсудим её в следующем выпуске подкаста.

Проблема:

Была 7-ми летняя система для кодирования видео. Система из микросервисов. Сложно поддерживать и никто не знает как пилить фичи.

Решение:

Сделать платформу Cosmos — это Microservice + Workflow + Serverless. Платформа должна поддерживать 2 типа приложение — latency-sensitive workloads и high throughput services.

Cosmos — основные цели:

  1. Observability — нам нужны логи, трейсинги и мониторинг из коробки.
  2. Modularity — нужен opinionated фреймворк для поддержания единой структуры
  3. Productivity — мы должны уметь комфортно локально разрабатывать и тестировать приложения на платформе.
  4. Delivery — Написанные приложения на платформе должны легко деплоиться в прод. Кроме того, интеграционные тесты должны легко запускатьсятам, при необходимости.

Архитектура

Платформа Cosmos состоит из 2 слоев, каждый из которых состоит из 3 блоков.

  1. Логика делится на API, workflow и serverless functions. Каждый компонент скейлится независимо. Они сами знают, как скейлится (API — на основе метрик с беленсера, функции — на основе размера очереди).
  2. Логика делится на application и platform. Приложение ничего не знает про скейлинг, это абстракция от платформы.

Платформа Cosmos состоит из 3 компонентов. Они общаются черех асинхронную очередь Timestone. Компоненты:

  1. Optimus — API слой, трансформирующий запросы в бизнес сущности платформы
  2. Plato — workflow движок, написанный на DSL (Groovy). Состоит из 4 элементов — match condition, action for execution, success handler, error handler.
  3. Stratum — serverless движок для запуска serverless нагрузок. Построен на Titus

Latency-sensitive applications:

  1. Resource pools — можно резервировать ресурсы под себя
  2. Warm capacity — можно часть ресурсов держать гретыми всегда
  3. Micro-batches — Stratum может уменьшать количество запусков контейнеров благодаря батчам.
  4. Priority — Приоритетами можно лоу летенси выставлять на первые места для выполнения

Взаимодействие Платформенных команд и Прикладных программистов.

  1. Все должны поменять мышление.
  2. Приладные программисты жертвую гибкость и получают стабильность и удобный способ разработки ПО.
  3. Платформенные программисты должны делать всё для повышения dev expirience

Категории: Программирование