rrs*_*hah 11 vert.x apache-kafka microservices
我正在评估 vert.x 框架,看看我是否可以减少使用 spring boot 开发的微服务之间基于 Kafka 的通信。
问题是:我可以用 vert.x 事件总线替换 1. Kafka 和 2. 带有基于 vert.x 的 verticles 的 spring boot 微服务吗?
任何指针都会有很大帮助。
提前致谢。
Idr*_*ann 14
为了快速回答,我会说这取决于您的需求。
是的,事件总线可以是使用异步和非阻塞范式处理微服务顶点之间本地通信的好方法。
但在某些情况下,您可能需要:
在这些情况下,我更愿意选择 Apache Kafka 而不是本机 eventbus 或旧的 fascioned JMS 兼容系统。
不禁止在同一个微服务架构中根据自己的实际需要同时使用eventbus和kafka。例如,您可以让一个 kafka 消费者组读取 kafka 主题来处理扩展、监控、故障恢复和回复机制,然后通过 eventbus 处理子垂直之间的通信。
我将澄清可扩展性和监控部分,并解释为什么我认为通过原生事件总线和 vert.x 集群模式使用 Kafka 处理它更简单:Kafka 允许我们实时了解(通过 JMX 指标)和describe
命令):
因此,可以使用 ElasticStack 或 Prometheus+Grafana 解决方案来监控这些指标并使用它们来处理动态可扩展性(当您知道需要临时增加消费者数量时,例如根据滞后指标和分区和主机的 cpu/ram/swap 指标)。
要回答 vert.x 或 SpringBoot 的第二个问题,我的回答不是很客观,但我会投票支持 vert.x,因为它在 JVM 上的表现,尤其是它的简单性。我有点厌倦了 Spring 工厂及其庞大的抽象层,这些抽象层将大量问题隐藏在引发大量 AOP 的大量注释下。
此外,在微服务的 Java 世界中,还有其他 SpringBoot 替代方案,例如Microprofile 的不同实现(例如thorntail 项目)。
小智 7
事件总线不是持久的。您应该使用它来进行快速的 verticle 到 verticle 通信,更一般地,用于在您知道发生崩溃时可能会丢失事件的情况下分派事件。
Kafka 流是持久性的,您应该在那里发送事件,因为您希望其他(可能是非 Vert.x)应用程序使用它们,和/或因为您希望确保这些事件在发生故障时不会丢失。
反应式(读作“可扩展且容错”)Vert.x 应用程序通常结合使用事件总线和一些可复制消息系统(如 AMQP/Kafka 等)。
归档时间: |
|
查看次数: |
3519 次 |
最近记录: |