axon框架创始人谈微服务与事件驱动

Allard Buijze在最近的阿姆斯特丹事件驱动微服务会议上的演讲中指出,Axon Framework的应用正在快速增长,最近下载量达到100万次,他在会上描述了Axon的基本概念,历史和未来,这是一个系统框架,基于DDD,事件溯源和CQRS。

Axon Framework是JVM平台的开源产品,由Allard Buijze于2009年创立。2017年7月,成立了一家独立公司AxonIQ,专门与Axon产品合作。

Buijze首先指出事件非常特殊; 他们是描述了发生的事情,并且是系统历史的一部分。我们可以根据事件找到过去的问题,我们可以设定对未来的期望。使用事件推动事件溯源 ,不仅仅把事件用于大数据处理或监控等次要功能,而是作为应用程序中的事实来源(替代数据库)。

Buijze还指出,服务消费使用事件的模式非常重要 - 这在事件溯源中至关重要。如果您的服务是根据内部数据而不是根据事件做出决策,那么您就无法实现完整的事件溯源。虽然你有一个事件驱动架构,但却无法保证事件是服务中发生事情的真实表示。

有许多基于实体服务的微服务架构(一个总服务调用许多微服务),他将这种设计技术称为名词驱动设计,想法是找到描述新系统的文档中的所有名词,这些名词对应一个服务,所有动词都成为API调用。这种技术可能会产生分布式的大泥球,所有服务都相互依赖。如果一个服务发生故障,整个系统将无法使用。

他希望从单体开始而不是从微服务开始新系统,这样更易于部署和重构,虽然难以扩展,他指出我们不应该将一块好的巨石单体与一大块泥球混淆,要确保内部有明确定义的结构。随着时间的推移,当有太多人不得不使用代码的相同部分时,则需要提取一些组件,最好不要更改其他部分。随着时间的推移和需求的增加,越来越多的组件可以搬出。

为了帮助提取组件,位置透明度非常重要,Buijze指出Axon的主要特征不是CQRS,它是应用程序内部组件之间的位置透明性。如果两个组件不知道它们各自的位置,则可以更改该位置。这也意味着您不必知道特定操作在哪个服务中 - 您只需发送消息并找到其目的地。

组件既不应该知道也不应该对它与之交互的组件的位置做出任何假设
事件很重要,但Buijze指出,组件有理由发送三类不同消息,并强调事件与消息不同:

1. 事件是,当发生了事件,它们被分发给所有处理器,不返回任何结果。

2.命令是指你希望系统执行某些操作的意图。它们被路由到某个处理器并返回结果。

3.查询是指你想知道的事情,并返回结果。

为了支持位置透明度的承诺并使用这些不同类型的消息,AxonHub于2017年在去年的会议上发布。Buijze将其描述为一种消息传递平台,它可以了解不同消息的类型,但不是消息内容,并且能够将不同类型的消息路由到正确的目的地。他指出,即使在这种情况下管道知道消息类型,这些集中式管道的思想也是符合智能终端和哑管道的微服务通讯定义。

展望未来,Buijze认为微服务将继续发展下去,他还认为Axon组件工作方式和通信方式在无服务器环境中非常有用。他们朝这个方向迈出的第一步将是提供SaaS解决方案,但他也指出他们需要学习更多知识,并且还需要做更多工作才能有效地使用无服务器环境。

今年早些时候,Axon团队发布了AxonDB,这是一个专门建造的事件存储。该商店被AxonHub用于存储事件,因此他们决定将这两种产品合并到会议期间宣布的Axon Server中。该服务器既可用作开源,也可用作企业版。

下一版Axon 版本4的工作正在进行中,最近发布了第一个里程碑。产品发布计划于10月18日开始。

原文