Service Mesh на стероидах. Часть 1: как построить управляемое взаимодействие между сотнями микросервисами Архитектуры, масштабируемость

Доклад принят в программу конференции
Алексей Ефимов
Netcracker

Системный архитектор, руководитель отдела Cloud Core.
Пришел в Netcracker из аэрокосмической отрасли уже больше 15 лет назад. Участвовал как архитектор в разработке десятка продуктов и их внедрении по всему миру. Всегда тяготел к построению крупных низкоуровневых платформ и фреймворков. На волне интереса к облакам в 2015 году стоял у истоков следующего поколения продуктов — Netcracker Cloud Native, реализовав системную архитектуру и ядро решения. С тех пор руководит отделом, который разрабатывает это ядро.

Тезисы

Доклад основан на кейсе по разработке Enterprise-grade-приложения, состоящего из десятков приложений, слабо связанных друг с другом, разрабатываемых разными командами, с разными моделями релиза и т.д. Суммарно размер такого решения может составлять несколько сотен различных юнитов, преимущественно микросервисов. Между этими юнитам нужно построить управляемое взаимодействие, учитывая множество специфических ограничений и условий, таких как:
• распределенность микросервисов по различным дата-центрам,
• поддержка "session stickiness",
• поддержка canary- и blue-green-модели,
• для входящих потоков нужно чётко разделять — какие API публикуются из приложения для каких клиентов
• multitenancy,
• и этот список можно продолжать.

На помощь приходит такая концепция, как Service Mesh и идея применить "микросервисную модель" и к структуре Service Mesh. В результате был разработан Non Uniform Service Mesh (NUM), который представляет собой продукт и набор паттернов его применения.

В докладе я на примере крупного приложения разберу типовые паттерны применения NUM:
• интеграция разнородных приложений в единый service mesh и управление связями,
• реализация application security (authentication, M2M),
• условная маршрутизация запросов в зависимости от бизнес-параметра,
• "stickiness" между микросервисом (kubernetes pod) и запросом (ордером, пользователем, HTTP-сессией),
• выкатывание обновлений по canary-модели,
• multitenancy с применением модели instance per tenant и shared multitenant instance,
• кастомизация логики гейтвея,
• интеграция с 3rd party-системами (серверная, южная).

Другие доклады секции Архитектуры, масштабируемость