写点什么

CQRS 和事件源框架 Axon 的基本概念和未来

  • 2018-09-29
  • 本文字数:1462 字

    阅读完需:约 5 分钟

Axon Framework 的应用正在迅速增加,最近达到了 100 万的下载量。在最近的阿姆斯特丹事件驱动微服务大会上, Allard Buijze 在演讲中介绍了 Axon 的基本概念、历史和未来。该框架面向以 DDD 事件源 CQRS 为基础的系统。

Buijze 一开始就指出,事件非常特殊;它们描述了发生过的事情,并且是系统历史的一部分。我们可以从过去中发现问题,我们可以设定对未来的期望。在 Buijze 看来,就是这点推动了事件源实践——使用事件作为应用程序的事实来源,而不仅仅是作为意外结果。

Buijze 还指出,重要的是,服务在消费自己的事件——这在事件源中非常重要。如果服务是基于内部数据而不是事件进行决策,那么你所做的就不是完全的事件源。你有一个事件驱动的架构,但是你不能保证事件是服务中发生的事情的真实表示。

根据 Buijze 的经验,有很多基于实体服务的微服务架构,他将这种设计技术称为“名词驱动设计(noun-driven design)”。其思想是在描述新系统的文档中找出所有的名词,它们将成为服务,而所有的动词将成为API 调用。这种技术很可能会导致分布式的大泥球,所有的服务都相互依赖。如果一个服务宕机,整个系统将无法使用。

Buijze 希望我们从单体而不是微服务入手。尽管更难扩展,但它们更容易部署和重构。他指出,我们不应该将好的单体与大泥球混为一谈。他建议的策略是从单体入手,但要确保内部结构明确定义。随着时间的推移,当过多的人不得不使用代码的相同部分时,就应该提取出一些组件,最好不要修改其他部分。随着时间的推移和需求的增加,会有越来越多的组件被提取出来。

为了帮助提取组件,位置透明性非常重要,Buijze 指出,Axon 的主要特性不是 CQRS,而是应用程序中组件之间的位置透明性。如果两个组件不知道它们各自的位置,那么你就可以修改那个位置。这还意味着,你不必知道某个操作在哪个服务中——你只需发送一条消息,它自己会找到它的目的地。

组件既不应该知道也不应该对与它交互的组件的位置做出任何假设。

事件很重要,但 Buijze 指出,组件发送的消息有三种类型,并强调,事件与消息不是一回事:

  • 事件就是已发生的事情。它们被分发给所有处理程序,不返回任何结果。

  • 命令是你希望系统执行的操作。它们会被路由到单个处理程序并返回一个结果。

  • 查询用于你想知道什么的时候。它们会返回一个结果。

为了兑现位置透明的承诺,并使用这些不同类型的消息, AxonHub 于 2017 年(在去年的大会上)发布。Buijze 将其描述为一个消息传递平台,它能够理解不同类型的消息,而不是内容,并能够将不同的类型路由到正确的目的地。他指出,“集线器(hub)”的概念与微服务的智能端点和哑管道概念类似,虽然在本例中管道知道消息类型。

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

今年早些时候,Axon 团队发布了 AxonDB ,这是一个专门设计的事件存储。AxonHub 使用该存储存储事件,为此,他们已经决定将这两个产品合并到此次大会期间宣布的 Axon Server 中。该服务器既有开源版本,也有企业版本。

Axon 的下一个版本 4 正在开发,第一个里程碑已于最近发布。产品发布预计在10 月18 日。

Axon Framework 是面向 JVM 平台的开源产品,由Allard Buijze 在2009 年创建。2017 年7 月,一家单独的公司 AxonIQ 成立,专门从事 Axon 产品开发。

查看英文原文: Basic Concepts and the Future of Axon, a CQRS and Event Sourcing Framework

2018-09-29 09:225405
用户头像

发布了 1008 篇内容, 共 427.5 次阅读, 收获喜欢 346 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

耗时半年,堪称奇迹!阿里架构师整合出258W字Java全栈面试题

钟奕礼

Java 程序员 架构 面试 计算机

把凭据嵌入源代码,来看看你的代码里有这样的操作吗?

鉴释

代码安全

MES、ERP和低代码下的智慧工厂

优秀

低代码 ERP mes

阿里内部最新出炉“SpringCloudAlibaba笔记”号称微服务界的里程碑!

Java 编程 架构 微服务 计算机

从零开始学习3D可视化之数据对接(2)

ThingJS数字孪生引擎

大前端 数据 可视化 数字孪生

真的强!来自扫地僧总结的39W字上千道Java一线大厂面试题手册,成功助我拿下蚂蚁金服offer!

钟奕礼

Java 编程 程序员 架构 面试

提升源代码安全管控,从源头保护敏感数据

鉴释

数据安全

ES本地debug详解

泽睿

ES 搜索引擎;

给需要关心安全的技术人员的一些建议

鉴释

网络安全 安全

漏洞非小事,金融服务机构如何对抗代码缺陷?

鉴释

金融科技 代码安全检测

真香!180页100+题15W+字解析的《Java高级面试指南》,果断收下

Java 编程 程序员 架构师

彩印图文版《Elasticsearch实战》文档,阿里内部共享,堪称精品

白亦杨

Java 编程 程序员 架构师 计算机

5000页?一份字节跳动Java面试全解手册发布!瞬间登顶各大搜索栏

钟奕礼

Java 编程 程序员 架构 面试

阿里秋招面试必问的几个知识点:Spring+Redis+MySQL+HashMap+多线程,不看我真的怕你后悔

Java 程序员 架构 面试 计算机

C/C++Linux服务器开发高级架构师/Linux后台开发架构师丨高级进阶

Linux服务器开发

架构师 Linux服务器开发 Linux后台开发 后台开发架构师 服务器开发架构师

不保护数据的代价!

鉴释

数据 数据安全

赖建新:关于静态代码分析的问与答

鉴释

静态代码分析

阿里集团业务驱动的升级 —— 聊一聊Dubbo 3.0 的演进思路

阿里巴巴中间件

云计算 阿里云 云原生 dubbo 中间件

新时代程序员都用什么写代码?

程序员鱼皮

Java Python 大前端 Web 开发工具

抓住“开源盛世“,这个工具你必须了解一下

鉴释

开源 代码安全

字节大牛的1850页Leetcode刷题笔记外泄!用实力折服众人

进击的王小二

Java 面试 算法 LeetCode

Kubernetes实战:高可用集群的搭建和部署

华为云开发者联盟

Kubernetes 高可用 集群 高可用集群 apiserver

如何利用FL Studio中文版做出失真效果

懒得勤快

鉴释人物 | 专访产品开发总监吴翔:DevSecOps的竞技之道

鉴释

敏捷开发 应用安全 软件安全 软件质量与安全

鉴释获得 A+ 轮融资,将加强对新技术的投资并扩展中国团队规模

鉴释

企业融资 创业公司

Linkflow签约未卡VETRESKA,精细化运营赋能品牌成功破圈,开启种草新模式

Linkflow

即时通信 IM 产品怎么选? 本文超详细解说,马住!

腾讯云音视频

因聚而生 | 图扑受邀参加“生态融合,智创未来”大会

一只数据鲸鱼

数据可视化 数字孪生 智慧工业 智能制造

“Talk is cheap, show me the code”你一行代码有多少漏洞?

鉴释

代码质量 静态代码分析

iOS面试·一个iOS程序员的BAT面试全记录(内含百度+网易+阿里面试真题)

iOSer

ios 面试 iOS 知识体系

IDC报告深度解析:谁将领跑中国RPA市场?

ToB行业头条

RPA IDC

CQRS和事件源框架Axon的基本概念和未来_语言 & 开发_Jan Stenberg_InfoQ精选文章