Расскажу, как мы на Lalafo переписывали монолит на микросервисную архитектуру.
Поговорим о том, что зашло на микросервисах, а что - не очень. Как мы экспериментируем с архитектурой, как мы тюним и мониторим приложения. Как происходила миграция и через какие испытания мы прошли. Сравним наш старый монолит с новой микросервисной архитектурой.
Поделюсь мыслями о том, на сколько рационально следовать всем рекомендациям по построению микросервисной архитектуры. И как в конечном итоге микросервисная архитектура отразилась на процессах в компании.
2. Lalafo
● 3 млн уникальных пользователей в месяц и 700 тысяч
новых объявлений
● За 1.5 года стали №1 МОБИЛЬНЫМ маркетплейсом
на 3 рынках
● ±900 Request/sec в пиках
● Out 100 Mbps/In 75 Mbps
3. Монолит
- Монолит содержал в себе код от разных команд и
разным уровнем квалификации
- Частые падения
- Долгое время внедрение фичи
- Отсуствие гибкости
- Отсуствие авто тестов
- Каждый рынок в своей БД
- Проблемы с конфигами
- Масштибирование и безнес требование
4.
5. Миграция
● Объеденить 7 БД от монолитов
● Разнести данные по 10+ микросервисам
● Повторить старую API для backward compatibility
● Сделать безшовный переход
● Сохранить SEO трафик
10. Как это работает?
● Категория №1: Идеально
● Категория №2: Хочется объединить несколько
микросервисов в один
● Категория №3: Нужно переосмыслять один или
несколько микросервисов (переписать)
25. Monolith /
Super
Microservice /
Service
Microservice A
Microservice B
Microservice M Microservice I
Microservice G
Microservice F
Microservice EMicroservice C
Microservice D
Microservice J
Microservice L
Microservice K
26. Модель от Twitter
Front microservices
Microservice A
Microservice B
Microservice I
Microservice G
Microservice FMicroservice EMicroservice C Microservice D
Clients
29. Микросервисная коммуникация
● Http (REST RPC)
● Queue Message bus (RebbitMQ Kafka)
● Protobuf MessagePack Other binary protocols
● Perssistent connection: WEB Sockets, TCP/UDP Socket,
Unix Socket,
30. Наше общение между микросервисами
● REST API with http-cache
● Queue Rebbit MQ Kafka
● Global events with Kafka (Message BusEvent-drive)
31.
32. Стабильность
● Теоретическая стабильность микросервисов на
порядок выше монолита
● Реальная стабильность выше монолита и требует
трудозатрат
● Для максимально стабильности нужно тестировать с
разными набором отключенных микросервисов
● Для максимальной стабильности нужно много
серверов
34. Плюсы которые для меня самые ценные
- Внедрение новых людей
- Переписывать весь проект не надо
- Fast CI
- Время на внедрение нового функционала
- Backwards compatibility всего приложения
- Возможность масштабироватся
- Стоимость ошибки
- Идеальная экосистема для эксперементов
35. Один в поле не воин
● Активные и пассивные микросервисы
● Один разработчик = один активный микросервис
● Один разработчик = 3 пассивных микросервисов
● Активные и пассивные микросервисы
36. Все подвластно времени
● Все те же проблемы что и на монолите только микро
масштаба
● Микросервисы вырастают и нужно разбивать на
несколько микросервисов
39. Выводы
● Микро проблемы лучше чем большие проблемы на
монолите
● Контейнеризация и авто тесты must have
● Легкое масштабирование как проекта так и команды
● Легкость интеграции новых технологий
● Плавная миграция с монолита лучше чем force
● Мощная и продвинутая система мониторинга
● Хороший системный администратор или DevOps