Design patterns 事件驱动的Kubernetes服务

Design patterns 事件驱动的Kubernetes服务,design-patterns,kubernetes,message-queue,grpc,messaging,Design Patterns,Kubernetes,Message Queue,Grpc,Messaging,我正在寻找一个跨服务通信解决方案 我有1个服务和多个POD,其中有一个传入的gRPC流。最初的请求调用外部资源,最终通过状态消息触发对该服务的请求。这是在一个单独的线程上,对于这个例子,最后转到Pod B。我希望PodA用这个状态消息来响应。我已经尝试用下面的工作流程来演示这一点 这里显而易见的解决方案是添加某种消息传递模式,但我想寻求帮助以确定哪种方法是最好的。下面的示例引入了一个服务网格侧车,它将外部请求路由到一个队列,然后Pod a将订阅该队列。如果使用AMQP,我可能会考虑使用 任何

我正在寻找一个跨服务通信解决方案

我有1个服务和多个POD,其中有一个传入的gRPC流。最初的请求调用外部资源,最终通过状态消息触发对该服务的请求。这是在一个单独的线程上,对于这个例子,最后转到Pod B。我希望PodA用这个状态消息来响应。我已经尝试用下面的工作流程来演示这一点

这里显而易见的解决方案是添加某种消息传递模式,但我想寻求帮助以确定哪种方法是最好的。下面的示例引入了一个服务网格侧车,它将外部请求路由到一个队列,然后Pod a将订阅该队列。如果使用AMQP,我可能会考虑使用


任何需要的进一步信息,请让我知道。

两个微服务之间的Pub-Sub通信是一种良好的通信模式。这本书准确地描述了这一点,以及在某些情况下使用此模式优于请求-响应的优势。见第12章

12.2从请求/响应转向事件驱动

12.3事件日志

12.4活动来源

这可以通过多种技术实现,但使用是一个很好的选择。卡夫卡也是一个分布式系统,专为云计算而设计,类似于库伯内特斯(Kubernetes)中使用的原理

你的例子


要将此应用于您的示例,队列是Kafka代理(或RabbitMQ?),您需要一种将数据从外部资源发布到代理的方法。如果外部资源总是回复请求来自的pod,则侧车可能是一个解决方案。如果可以配置“回复地址”,则这可能是一个独立的“适配器服务”,例如,如果Kafka被用作代理。可能有相应的代理,例如RabbitMQ。

您的POD和外部服务之间的通信是异步的吗?是的,但响应不会返回状态。作为从外部资源触发的事件的结果,状态被推送到服务A。