我目前正在尝试创建一个有趣的跟踪工具(它支持 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 发出请求需要多长时间?
我想知道是否有可能解决这些问题,我的思考过程是否正确,以及这种架构是否具有特色。