Как разработать сервис и не разбиться о монолитЭлементы архитектуры
Пару лет назад мы в Авито решили распилить монолит на микросервисы и с энтузиазмом принялись за эту задачу, которую, как мы думали, легко затащим за год. На деле всё оказалось куда сложнее. Мы даже не представляли поначалу, что нам предстоит.
В этом докладе я собрал самое важное из того опыта, что мы получили в процессе распила монолита и выноса бизнес-логики в отдельные сервисы.
Я покажу, как выглядит шаблон сервиса, к которому мы пришли в итоге (отказоустойчивого, модульного и лёгкого в разработке). А также поделюсь нашими tips & tricks:
* как оптимизировать перформанс (отдельный пул воркеров, параллельные запросы, сокращение трафика на нижележащие сервисы, чрезмерное логирование);
* как вынести легаси, которое невозможно просто взять и вынести;
* как решить проблемы нестандартных протоколов обмена данными, вендоризации тонны пакетов, отсутствия кэширования в сервисах;
* как интегрировать сервис с другими микросервисами.
Кроме того, я расскажу как мы мониторим, тестируем (канареечный релиз, сверка трафика, плавный ввод), выкатываем и обеспечиваем отказоустойчивость новых сервисов.