Что такое сервис-меш и как он реализуется
Что проверяют
Понимаете ли вы, что меш это перенос сетевой логики из библиотек в инфраструктуру, и чем за перенос платят. Для Java-разработчика вопрос практический: какая часть кода вокруг устойчивости и безопасности после внедрения меша становится лишней, а какая остаётся в приложении навсегда.
Как отвечать
Сервис-меш это слой, который перехватывает трафик между сервисами и управляет им отдельно от кода. Классическая реализация: рядом с каждым экземпляром ставится прокси, весь входящий и исходящий трафик заворачивается в него правилами сети, а управляющий слой раздаёт этим прокси конфигурацию. Есть и вариант без отдельного прокси на каждый экземпляр, когда часть работы уносится на уровень узла.
Что меш берёт на себя: взаимный TLS и идентичность сервисов, авторизацию вызовов, таймауты, повторы, размыкатель и отсев больных экземпляров, разделение трафика для канареек и зеркалирование, а также метрики по каждому вызову без правок в коде.
Цену назвать не менее важно: два лишних прокси на каждый вызов, память и процессор под них, отдельный управляющий слой и с ним новый класс инцидентов вроде порядка запуска прокси и приложения. Из реализаций уместно упомянуть Istio и Linkerd.
Хороший финал это сравнение с библиотечным подходом. Пока сервисы на одном стеке, устойчивость дешевле держать библиотекой. Меш выигрывает, когда языков много и политику нужно применить ко всем одинаково.
Где спотыкаются
Думают, что меш делает сквозную трассировку сам. Прокси создаст свои отрезки, но связать входящий запрос с исходящим может только приложение, прокинув заголовки контекста. Без этого цепочка рвётся на каждом сервисе.
Оставляют повторы в коде и включают их же в меше. Уровни перемножаются, и медленный сервис получает лавину вместо разгрузки. Повторы и таймауты должны жить на одном уровне и с ограниченным бюджетом.
Внедряют меш ради взаимного TLS в системе из нескольких сервисов. Стоимость эксплуатации и новая точка отказа перевешивают выгоду, а ту же задачу закрывает шлюз или обычный TLS между сервисами.