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

Михаил Кабищев — Эволюция платформы Ozon

Ozon Tech
December 12, 2022

Михаил Кабищев — Эволюция платформы Ozon

Ozon Tech

December 12, 2022
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. Ozon образца 2018 2 < 100 человек в IT Всем

    известный «онлайн-магазин книжек» Все на Windows • бэкенд на .NET • огромные монолиты MSSQL • десктопные приложения на Delphi • прочие прелести жизни…
  2. Ozon образца 2022 3 4K человек Один из лидеров e-com’a

    в России ~ 3500 сервисов 3 дата-центра 5кк RPS-нагрузка на наши сервисы
  3. 4 • Платформа • Конвенции и стандарты • Создание сервиса

    • Деплой • Service mesh • Observability • Managed services О чем мы сегодня поговорим
  4. 6 1. Продуктовые команды должны решать продуктовые задачи 2. Максимальная

    абстракция и унификация инфраструктуры 3. Решение самых популярных кейсов 4. Стандартизация 5. Change management 6. Снижение time-to-market Зачем нужна платформа?
  5. 11 1. Именование 2. Версионирование 3. Конфигурация 4. Протоколы 5.

    Observability Конвенция по микросервисам Наша конституция
  6. 12 1. Версии языка, компилятора и т.д. 2. Ограничение версий

    библиотек и модулей 3. Codestyle 4. Best practices Конвенция по языкам и технологиям
  7. 15 • Структура проекта • Платформенные файлы (k8s, gitlab-ci) •

    Методы-заглушки • RPC: gRPC, gRPC-Gateway, Swagger • Rate-limit, circuit-breaker, … • Онлайн-конфигурация • Телеметрия на все случаи жизни Генераторы сервисов
  8. 17 • Где хранить контракты? • Кто и как их

    должен генерировать? Клиенты к другим сервисам
  9. 19 • Не было никаких правил по написанию proto •

    Кто-то генерировал клиенты сам и раздавал как зависимости • Кто-то копировал proto из чужих репозиториев к себе • Не работал gRPC-reflection Генерация клиентов
  10. 20 2020: Protogen Первый шаг к стандартизации Правила хранения и

    написания proto-файлов Резолвинг зависимостей Генерации на стороне сервиса клиента cli-утилита
  11. 21 2022: Mimir Серверная эволюция protogen’a Отправляешь в него proto

    + необходимые зависимости Получаешь архив с каталогом proto Генерация происходит локально
  12. 31 • Задержки есть, но они нас устраивают • Ничего

    дополнительного делать не надо 2018: Ingress
  13. 34 • Ингресс используется как ингресс • Нет дополнительных задержек

    • Нету сайдкаров, все реализовано в виде библиотеки 2020: Warden
  14. 35 • Единый discovery для всего Warden • сервисы •

    Postgres • Redis/Memcached • Kafka • Разные алгоритмы балансировки • WRR • P2C • Канареечные деплои • Тестирование новых версий • Локализация трафика • Subsetting
  15. 37 Тестирование новой версии service 1 service 2 ver A

    service 2 ver B service 3 x-o3-meshversion: service2=B
  16. 38 Тестирование новой версии service 1 service 2 ver A

    service 2 ver B service 3 x-o3-meshversion: service2=B,service4=D service 4 ver C service 4 ver D
  17. 39 Subsetting service 1 service 2 service 2 service 2

    service 2 service 2 service 2 service 2 service 2 service 2 service 1 service 1
  18. 54 Базовые алерты • Десятки базовых алертов • состояние контейнеров

    • системные метрики • RPC • базы • … • Нужно только настроить пороговые значения
  19. 55 Трейсинг • 2018: Начинали с ванильного jaeger’a • 2019:

    Переписали бэкенд по свои нужды • 2020: Перешли на opentelemetry Что умеем: • Хранить все трейсы за 10-15 минут • Делать умное семплирование • Считать критический путь и много другой информации https://www.youtube.com/watch?v=GlHLuoVHFpE
  20. 57 Критический путь Определение: спан A находится на критическом пути

    в момент времени t тогда и только тогда, когда уменьшение его длины в момент времени t уменьшит общее время запроса.
  21. Инфра все делает очень долго… 63 © Из разговоров в

    коридорах продуктовой разработки
  22. 65 • Для разработки Что-то-as-a-Service • уменьшение времени реагирования •

    уменьшение влияния человеческого фактора • мониторинг, алерты • контроль доступа • Для платформы • стандартизация использования • разработка «от железа до библиотеки»
  23. 67 • Redis • Memcached • Kafka • PostgreSQL •

    S3 Какие ресурсы у нас уже есть?
  24. 69 • Каждый ресурс принадлежит сервису • Каждый сервис принадлежит

    команде • У каждой команды есть квоты • Есть бюджет и планирование • Разработчики запускают/удаляют/ресурсы без нашей помощи Managed services
  25. 70 • Платформа — фундамент для всей разработки • Разработка

    — главный клиент • Стандартизация и унификация — наше все • Не можешь победить — возглавь Заключение