0

我目前正在尝试创建一个有趣的跟踪工具(它支持 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:容器化。我必须单独容器化这两个微服务,还是必须容器化整个 docker 容器本身。连接nginx和docker简单吗?

关注点 3:在跟踪 gRPC 请求时(了解请求完成的时间),我正在考虑使用中间件记录器或跟踪 API(opentracing、jaegar 等)来执行此操作。我怎么才能知道 gRPC 发出请求需要多长时间?

我想知道是否有可能解决这些问题,我的思考过程是否正确,以及这种架构是否具有特色。

4

1 回答 1

0

业内大多数解决方案都是在容器编排解决方案(Kubernetes、Docker Swarm 等)之上实现的。
自己“容器化”和管理反向代理通常不是一个好主意。
反向代理应该知道所有容器的状态(通过挂钩编排器)并在容器创建、崩溃或重新定位(由于机器停止服务)时动态更新其配置。
Kubernetes 使用网状网络处理 GRPC。请看一下kubernetes 服务网格
如果您决定使用 Traefik 和 Docker Swarm,请查看traefik h2c 支持
总之,当您想要对 GRPC 进行负载平衡时,请考虑使用更现代的 Nginx 替代方案。

于 2020-07-13T05:49:08.520 回答