TGViewer
Техлидошная | Golang Infra Dev | Project Leading Техлидошная | Golang Infra Dev | Project Leading @devlead · 519 subscribers
Post #209 1.28K
Плагинизация и расширение возможностей envoy

Envoy - это действительно стандарт на сегодняшний день для использования в качестве сайдкаров, и не только. Одно из главных его преимуществ - это xDS протокол для конфигурации прокси на лету. Именно на этом построена работа таких инструментов, как Istio. Общая механика такова - пишем yaml манифесты с правилами роутинга, безопасности и прочим, а Istio конфигурирует нужные сайдкары в нужных подах.

Принцип обработки запроса у Envoy - это цепочка фильтров, которые по сути являются middleware. Из коробки доступны множество различных фильтров на любой вкус. Однако, все равно рано или поздно их может не хватить. Это произошло и со мной, когда потребовалось накрутить кэширование для авторизационных запросов для снижения latency. Существует несколько способов создания собственного фильтра:

➡️ C++ - это максимально эффективный способ с точки зрения возможностей, но также и максимально травмирующий :). Однако, если в вашей команде есть c++ разработчики, то проблем возникнуть не должно.
➡️ Golang - наша любимая "гошечка". Все достаточно просто: пишем код на основе предоставленных интерфейсов, собираем so, добавляем в образ - готово. Ограничений в функциональности не встретил.
➡️ Wasm - там тоже есть go, но только tiny-go. Это уже ограничение, например, в сетевых запросах, дополнительный latency до 6мс (по заверениям авторов Istio, но надо тестировать самостоятельно), что может быть достаточно заметно для нагруженных частей проекта. Находил тесты производительности, которые также заставляли сомневаться.
➡️ Lua - простой как палка, есть все что необходимо в плане функционала, код работает из коробки, даже не надо образ дополнять. Но Envoy буферизует запрос перед тем как отдать его в lua код (перед сетевыми запросами). Можно столкнуться, например, с проблемой "too large body".

Эти методы расширения - те, с которыми мне пришлось столкнуться ближе всего. Для простых задач я буду продолжать использовать Lua, но если логика чуть сложнее, чем изменение заголовков, то я буду смотреть в сторону Golang.
  • 👍 3
  • 👎 1
More from @devlead
  1. Nov 7, 2024Всем привет. Знаю, что поиск работы в так называемом "бигтехе" для многих вопрос актуальны…
  2. Oct 24, 2024Наткнулся на шикарный гайд по профилированию go приложений от Dave Cheney. Все понятно и р…
  3. Sep 2, 2024Наткнулся на классную штуку. Визуализация алгоритмов https://www.cs.usfca.edu/~galles/visu…
  4. Aug 12, 2024Запустили менторскую программу, и теперь нас можно найти на Getmentor и Solvery. Наши опыт…
  5. Aug 12, 2024Авито запартнерилось с GetMentor и Solvery Теперь можно сразу посмотреть всех доступных ме…
  6. Aug 6, 2024📖 Наглядные и подробные интерактивные руководства об устройстве TLS протоколов: - версия…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →