Проблемы с архитектурой gRPC (gRPC, nginx, docker)

В настоящее время я пытаюсь создать инструмент трассировки для развлечения (который поддерживает трассировку gRPC) и был смущен тем, правильно ли я думал об этой архитектуре. Инструмент трассировки отслеживает весь рабочий процесс / путь запроса (с момента, когда пользователь нажимает кнопку, до момента, когда запрос переходит на шлюз API, между микросервисами и обратно.

Допустим, приложение представляет собой книжный магазин, и оно разбито на 2 микросервиса, возможно, учетную запись и книги. Допустим, есть пользовательский интерфейс, и когда вы нажимаете кнопку, он позволяет пользователю добавить книгу в избранное. Я использую только 2 микросервиса, чтобы упростить этот пример.

**Different parts of the Fake/Mock up application**
UI -> 
nginx -> I wanted to use this as an API Gateway.
microservice 1 -> (Contains data for all Users of a bookstore) 
microservice 2 -> (Contains data for all the books) 

** Итак, моя цель - найти способ отследить этот запрос. Итак, мы можем представить, что запрос идет к nginx

введите описание изображения здесь

Проблема №1: когда запрос поступает в nginx, это HTTP. Круто, но когда запрос отправляется на микросервис, это вызов grpc (или по http2). Может ли nginx получить HTTP-запрос, а затем отправить этот запрос по http2 ...? Не уверен, правильно ли я это формулирую. Я знаю, что nginx plus поддерживает http2. Я также знаю, что у grpc тоже есть шлюз grpc.

Проблема №2: контейнеризация. Должен ли я помещать в контейнер оба микросервиса по отдельности, или мне придется помещать в контейнер весь контейнер докеров. Просто связать nginx и докер?

Проблема №3: ​​ при трассировке запросов gRPC (выясняя, сколько времени выполняется запрос) я подумываю использовать для этого средство ведения журнала промежуточного программного обеспечения или API трассировки (opentracing, jaegar и т. д.). . Как еще я мог бы выяснить, сколько времени требуется gRPC для выполнения запросов?

Мне было интересно, можно ли решить эти проблемы, верен ли мой мыслительный процесс и является ли эта архитектура особенностью.


person TheRoadLessTaken    schedule 13.07.2020    source источник


Ответы (1)


Большинство отраслевых решений реализовано на основе решения для оркестрации контейнеров (Kubernetes, Docker Swarm и т. Д.).
Обычно не рекомендуется создавать контейнеры и управлять обратным прокси самостоятельно.
Обратный прокси-сервер должен быть в курсе всех статусов контейнеров (подключившись к оркестратору) и динамически обновлять его конфигурацию при создании, сбое или перемещении контейнера (из-за того, что машина выходит из строя).
Kubernetes обрабатывает GRPC, используя ячеистые сети. Ознакомьтесь с услугой kubernetes mesh.
Если вы решили использовать Traefik и Docker Swarm, ознакомьтесь с Поддержка traefik h2c.
В заключение рассмотрите более современные альтернативы Nginx, если вы хотите сбалансировать нагрузку на GRPC.

person HosseinAgha    schedule 13.07.2020