Дорога к микросервисной архитектуре
Transcript of Дорога к микросервисной архитектуре
![Page 1: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/1.jpg)
Дорога к микро-сервисам
Василий Васильков, Ecwid
![Page 2: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/2.jpg)
Ecwid
• SaaS-платформа для создания интернет-магазинов
• ~750.000 клиентов
• ~100.000.000 посетителей в месяц
• 80 человек в команде
• Ульяновск, Казань, Самара и San Diego
![Page 3: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/3.jpg)
Как начинали
• Начали с трех сервисов• Через три года их стало десять• Это не так много, но…
![Page 4: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/4.jpg)
Проблемы
• Четыре разных протокола меж-сервисного “общения”
• Три разных “каркаса” для создания сервисов
• Три разных стратегии обновления• Три разных формата пакетов и способов старта на production
Всей команде приходится знать и помнить про эти отличия
![Page 5: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/5.jpg)
Следствия
• Время создания нового сервиса очень большое (дни)• Подготовка к деплою очень долгая (дни)
• Время разработки и поддержки увеличивается
![Page 6: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/6.jpg)
Планы
• За первые годы мы сделали 10 сервисов
• За следующий год мы хотим +25
![Page 7: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/7.jpg)
Как быть?
• Единый RPC
• Единая инфраструктура
![Page 8: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/8.jpg)
Единый RPC
• Сервисам нужны разные способы “общаться” друг с другом:
• SYNC (обычный вызов точка-точка)
• ASYNC (отложенный вызов через очередь сообщений)
• STREAM (broadcast, pub-sub, один сервис сразу всем)
![Page 9: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/9.jpg)
sync
![Page 10: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/10.jpg)
async
![Page 11: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/11.jpg)
stream
![Page 12: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/12.jpg)
Единый RPC
• Повтор неудачного запроса N раз к разным серверам.
Это должен делать сам протокол.
![Page 13: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/13.jpg)
retry with backoff
![Page 14: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/14.jpg)
Единый RPC
• Быстрая сериализация• Forward/backward совместимая
![Page 15: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/15.jpg)
protobuf vs JAXB
• Быстрее, но не очень (в 2-5 раз)
• Меньше, но не очень (в полтора раза)
• Проще• Внутри это обычный объект• Есть куча кода, готового для
JAXB-сериализации
XML
![Page 16: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/16.jpg)
protobuf vs JAXB
• Быстрее, но не очень (в 2-5 раз)
• Меньше, но не очень (в полтора раза)
• Проще• Внутри это обычный объект• Есть куча кода, готового для
JAXB-сериализации
XML
Хорошо, дайте два
![Page 17: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/17.jpg)
Единый RPC
• Простая реализация• …и использование
![Page 18: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/18.jpg)
Реализация
• Или слишком просто или АДЪ
• Наша реализация: ~60 классов, 3k loc
![Page 19: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/19.jpg)
Пример
![Page 20: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/20.jpg)
Пример
• Асинхронный вызов с аргументами будет сериализован и отправлен в очередь• Будет ждать пока один из серверов-адресатов не пойдет разбирать эту очередь и выполнять отложенные вызовы
![Page 21: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/21.jpg)
Единая инфраструктура
• У любого сервиса есть общие части. Это НЕ бизнес-логика!
• Писать в каждом сервисе с нуля?
• Copy-Paste Driven Development?
![Page 22: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/22.jpg)
Единая инфраструктура
![Page 23: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/23.jpg)
![Page 24: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/24.jpg)
Единая инфраструктура
• Все вместе занимает примерно 1.000 строк кода
• 30 сервисов - 30.000 строк одинакового кода?
• Тупо? Тупо!
![Page 25: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/25.jpg)
![Page 26: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/26.jpg)
Единая инфраструктура
![Page 27: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/27.jpg)
Единая инфраструктура
• Разработчики довольны• А админы?
![Page 28: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/28.jpg)
Единая инфраструктура
• Пакеты всех сервисов идентичны service.propertiesstartup.shlib/*.jar
• Запуск любого сервиса выполняется одними и теми же скриптами (уже написанными :)
• Логи в известном месте в известном формате
• Требования к любой машине понятны: linux, jdk, consul
![Page 29: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/29.jpg)
Единая инфраструктура
• Базовые метрики (HTTP, PostgreSQL) всегда идут в graphite
• У всех сервисов единые служебные endpoint’ы:/self-test/warmup/version
• Сервисы сами регистрируют себя в consul и поддерживают
состояние живой/нет, не надо писать отдельных скриптов
![Page 30: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/30.jpg)
• В проекте 30+ сервисов, как с ними работать?
Локальная разработка
![Page 31: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/31.jpg)
Локальная разработка
![Page 32: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/32.jpg)
Итог
• Беспощадная стандартизация• На всех уровнях, не только для разработки• Огромный простор для дальнейших оптимизаций
![Page 33: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/33.jpg)
![Page 34: Дорога к микросервисной архитектуре](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a78c321a28ab306e8b4754/html5/thumbnails/34.jpg)
Вопросы?
Василий Васильков, @2vgv