• 使用 CRUD,当您通过创建、更新、删除进行状态更改时,您并没有明确捕获它发生的原因。例如,如果您正在对客户执行更新,为什么会发生这种情况?他们的地址变了吗?他们的贴现率有变化吗?使用基于 CRUD 的方法,您并不确切知道,您必须根据所做的更改来暗示它。使用 CQRS,您的所有命令都
  • 我一直觉得事件溯源很吸引人。我们在开发人员的大部分时间里都在将数据保存在数据库表中——以一种完全不同的方式来做这件事似乎几乎是深不可测的。然而,这就是事件溯源。它有明显的好处,但还有许多潜在的问题。首先,您需要确定事件溯源是否适合您要解决的问题。为您的系统决定是使用事件源还是基于 C
  • 在事件驱动的微服务架构中,领域事件的概念是每个服务行为的核心。随着微服务架构的日益流行,诸如CQRS(命令查询职责分离)与事件溯源相结合的流行实践在应用程序中变得越来越普遍。此参考架构和示例项目演示了一个使用 Spring Boot 和 Spring Cloud 的事件驱动微服务架构 icon
  • 项目的结构与讨论空格与制表符或缩进大小一样敏感。当我们进入某人的公寓时,即使它是根据宜家的默认设置进行装饰的,它看起来也总是有些不同。这是绝对合理的。不同的公寓大小和房间布局会有所不同。它类似于我们的软件项目。每个都有略微不同的假设和特征,但可以区分出一些共同的特征,对吗?和 icon
  • Akka Serverless 是一种平台即服务,它结合了 API 优先、无数据库编程和无服务器运行时。开发人员不必设置和调整数据库、维护和供应服务器、配置或运行计算集群。开发人员唯一负责的是构建无服务器服务。相比之下,Akka Serverless 提供了高级数据访问模式,如 icon
  • 当您开发信息系统以自动化业务活动时,您正在对业务进行建模。您设计的抽象、您实现的行为以及您构建的 UI 交互都反映了业务——它们共同构成了域的模型。 fmodel库包 icon
  • 事件溯源是高性能协作域的一种很好的架构风格,可以保证它增加的复杂性。但正如我之前所说,就像任何其他原则或实践一样,即使是事件溯源也有利有弊。而且它不是顶级架构。您系统的某些部分可能会从中受益,但其他部分可能不会。话虽如此,如果您需要事件溯源,并且您有一个现有的、更传统的(又名 CRUD)应用 icon
  • 如何应用变更数据捕获CDC将数据从生产数据库可靠地迁移到其他系统?OLTP 数据库中积累的操作数据通常需要取出来执行事务处理以外的有用任务。这包括将数据移出数据仓库、更新缓存、仪表板等。更改数据捕获 (CDC)是观察写入数据库的所有数据更改并以可以将它们复制到下游系统以用于其 icon
  • CQRS(命令查询职责分离)的核心有一个简单的目标:将读取和写入分离为单独的模型。这个简单的想法可以采用多种形式,具体取决于使用它的上下文以及所使用的实现选择。这篇文章试图分析 CQRS 的各种形状,以及所有这些形状如何支持解耦读写的中心思想。世界变得复杂了。信息系统不再只是简单的 icon
  • Eventuate是解决微服务架构中固有的分布式数据管理问题的平台,使您能够专注于业务逻辑。Eventuate包括: Eventuate Tram - 使用传统(例如 JPA/JDBC 和实体框架)持久性的服务框架。您可以轻松地将 Eventuate Tram 添加到 icon
  • Wix.com是一个基于云计算的Web开发平台,它允许用户通过使用他们的在线拖放工具来创建HTML5网站和移动网站。WIX的产品愿景是朝着反应式Reactive函数发展,这意味着在正确的上下文中实时对多个领域事件做出反应。问题在于,我们的单体应用被设计为经典的 CRUD 系统,在发生 icon
  • 当我们开始用事件建模我们的系统时,我们很容易掉入陷阱。我们习惯于从数据模型的角度来看待我们的功能:当你手里拿着一个关系数据库时,你会看到到处都是表格,因为 icon
  • 事件溯源从业者使用事件捕获方法(如事件风暴和事件建模)设计他们的领域。这项工作的输出通常是真实或数字白板上的大量便利贴。从这个模型中,开发人员必须填写很多关于命令、事件和读取模型的细节来构建一个工作系统。这个映射过程是手动的,发生在他们的脑海中。人工检查和测试套件可确保代码与即时贴匹配。这个 icon
  • 软件系统是社会技术的,当我们从社会技术角度看待软件时,我们开始意识到软件开发和运营中固有的复杂性。我们正在构建和运行的系统不断被不同的人修改,在不同的背景下,在不同的时间,他们可能会也可能不会直接与你沟通交流这种变动。这种紧急的协作可以带来独特的挑战。在我职业生涯的早期,我认为软件系 icon
  • 牛津词典将“数据”定义为:“收集在一起的事实”。(注:世界是由事实组成的:#维特根斯坦   )如果我们改为使用应用程序架构师的专业语言,“数据”可以更准确地定义为:“折叠fold在一起的事件”。“折叠”表示按时间顺序合并特定实体的(状态改变)事件以计算最新的实体“状态” icon
  • Elasticseach 并不真正支持更新。在 Elasticsearch 中,更新总是意味着删除+创建,持续不断的文档更新可能会使 Elasticsearch 集群瘫痪。幸运的是,有办法避免这种情况。最终的解决方案包括使用事件溯源设计模式将所有需要保存的更改转换为事件。此案例的应用 icon
  • “来自事件的状态”假设一个现有的事件流,不管它是如何产生的,并从中预测状态。没有新事件添加到流;“作为状态的事件”是关于作为唯一事实来源的事件。换句话说,新事件被添加到流中,但它们受业务规则的约束,这些规则依赖于先前的事件作为它们的输入(而不是状态作为输入)。现在我们应该如何 icon
  • 存储和发送不可变数据是一个不可阻挡的趋势。我们需要不变性来进行远距离协调,并且随着存储变得更便宜,我们可以承受不变性。这篇文章是对利用不变性的重复计算模式的一个有趣的抽样。不久之前,计算成本还是高昂都 ,磁盘存储成本高,DRAM(动态随机存取 icon