Я бы в любом случае шёл от потребностей и проблем. Стоит помнить, сейчас эта технология действительно набирает популярность и многие её начинают внедрять или хотят внедрить, но она решает определённые проблемы. Один из очень широко распространённых кейсов для внедрения, это улучшение обсервабилити – понимания того, как вообще взаимодействуют все кубики внутри нашей большой системы. И с помощью service mesh мы унифицированно получаем возможность сделать сразу и полностью на всю систему. Это один из кейсов решения.
То, что Иван говорил по поводу надёжности и устойчивости сетевого взаимодействия, которые мы получаем при переходе на микросервисную архитектуру. Также это одна из проблем, которую можно решить с помощью service mesh, внедрением таких подходов, как Circuit Breaker, автоматические ретраи, то есть паттерны сетевого взаимодействия, причём всё это вне нашей бизнес-логики, вне наших кубиков, единым образом на всю систему.
Имея эти проблемы в нашей системе, мы их как раз можем решить, внедряя service mesh. Очевидно, что решение этих кейсов — это плюсы, и с точки зрения простоты, и особенностей того, как мы можем поставить в свою систему service mesh. Потому что, например, если нам нужно по всей системе настроить какой-то унифицированный мониторинг, сделать так, чтобы у нас со всех сервисов собирались какие-нибудь общие метрики: по задержке, запросам, ошибкам и так далее, это может быть реально сложной задачей. И не в гомогенной среде её может быть сложно решить. В случае с service mesh мы получаем возможность это сделать проще путем того, что добавляем эти прокси-контейнеры и получаем возможность настроить всё по всей системе унифицировано. Это, наверное, одна из ключевых особенностей service mesh.
Я ещё люблю такое определение, что по факту service mesh — это технология, которая могла бы быть полностью решена внутри бизнес-приложений, но из-за сложности, что мы не можем в сотни и тысячи компонентов нашей системы добавлять какую-то единую логику и получать какую-то фичу, мы его просто выносим на другой уровень взаимодействия через эти service proxy и получаем все возможности, которые могли бы реализовать в самих приложениях. И в гетерогенных системах это действительно оказывается очень полезно. Это большой плюс.
Из минусов я бы выделил перформанс. При внедрении нужно точно оценивать то, как взаимодействуют кусочки системы. Например, есть достаточно узкие кейсы, но когда у нас очень большое количество сетевого синхронного взаимодействия, например, по HTTP протоколу внутри системы, то мы получаем дополнительные входы через каждый сервисный прокси. В большинстве случаев это не проблема, но это стоит иметь в виду, внедряя эту технологию, понимать, что она несёт определённый оверхэд в нашу систему, и мы добавляем в неё каждый узел.
И второй минус, который, наверное, даже более жирный, нежели первый, — это сложность конфигурации и внедрения из тех имплементаций, которые сейчас есть. Несмотря на то, что технология уже не очень молодая, до сих пор её не так просто внедрить на большую или среднего размера систему. Это происходит из-за того, что есть большое количество возможностей, большие развесистые конфигурации — порог входа и внедрения этой технологии в систему достаточно высокий.