服务网格(比如Istio)与基于事件驱动架构的微服务之间的区别

5

大家好,我有一个关于微服务中服务之间通信架构的问题。

Istio或任何服务网格可以使微服务的路由、发现和弹性通信易于管理。然而,它并没有涵盖跨越多个微服务的重要事务方面(一种分布式事务),这在基于事件的微服务体系结构中得到了很好的包含。但是,显然,事件驱动的架构缺少服务网格很好涵盖的方面。因此,我想知道哪种方法更好,或者是否可以将服务网格与事件驱动架构混合使用,以利用两种模式的优势。但如果这种混合是可能的,那么事件驱动总线(如Kafka)会不会干扰Istio使用的边车代理/控制平面的内部工作模式。


Apache ServiceMix和Service Mesh用于相同的事情吗? - Mrityunjay
完全不同的事情 - Ewoks
3个回答

10
你把几件事情搞混了。
Istio,Linkerd等解决了云原生、容器化微服务中出现的一些基本设计/架构问题。例如,服务发现、断路器等。这些问题过去通常是使用嵌入在应用程序中的库(如Spring Cloud、Hystrix、Ribbon等)来解决的。服务网格在容器世界的范例内解决了这个问题。
但服务网格不能解决其他使用Kafka或任何其他消息代理解决的服务间数据交换问题。你的微服务可以是事件驱动的,也可以不是——服务网格不会干涉这一点。

感谢senseiwu的回答,但这都是关于服务间通信的问题,无论是使用Istio还是涉及Kafka。这肯定不是苹果对比橙子,我可以清楚地看到一些重叠。请帮助我回答一个属于这种重叠的问题——Istio如何知道放在Kafka中的事件,从而调用相应的服务? - Pramod Sharma
1
他们确实都是 - 但完全是为不同的目的,对吧?当您的服务需要在彼此之间交换域数据时,它们会与 Kafka brokers 进行交互,而 istio 只能让您管理服务之间的流量。这有意义吗? - senseiwu
Istio 对 Kafka 事件将一无所知。 - Jocke
Senseiwu: 是的,当它是 Kafka 时,它就是领域数据,但向前思考一步...基于 Kafka 中存在的状态也会发生服务调用...例如,为了实现 SAGA 模式,需要调用服务来进行补偿交易...你不认为这属于路由吗? - Pramod Sharma
@senseiwu:等待您对上面评论的回复。您的答案可能会解决我的疑惑。 - Pramod Sharma
显示剩余2条评论

6

Service Mesh和事件驱动架构(例如Apache Kafka)是互补且正交的:

  • Apache Kafka解耦了服务,包括事件流和请求-响应
  • Kubernetes为Kafka生态系统提供了云原生基础设施
  • 服务网格在生态系统/组织范围内帮助实现安全性和可观察性
  • 服务网格框架(如Envoy和Istio)位于Kafka上面的层级中,并且与Kafka的目标正交

请查看我编写的以下资料(博客文章、幻灯片和视频记录),其中详细介绍了这些概念及其组合:

博客文章:使用Apache Kafka、Kubernetes和Envoy、Istio、Linkerd实现服务网格和云原生微服务

幻灯片:Kafka、Kubernetes、Envoy和Istio

视频记录:Service Mesh和事件驱动架构(例如Apache Kafka)


-1

您的问题是服务网格没有覆盖跨越多个微服务的重要事务方面(一种分布式事务),这在微服务的基于事件的架构中得到了很好的包含,但并非如此。服务网格在处理分布式微服务通信方面表现良好,但它只支持同步RESTful和常规请求-响应交互,并不支持异步、事件驱动的交互,也不适合将云原生微服务与传统应用程序连接起来。对于事件驱动的架构,您需要查看像“事件网格”这样的系统,而不是服务网格。请查看链接...

https://solace.com/use-cases/event-mesh/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接