美文网首页java
使用CQRS和Serverless构建事件驱动微服务

使用CQRS和Serverless构建事件驱动微服务

作者: liseri | 来源:发表于2017-08-11 06:29 被阅读54次

    翻译自
    Building Event-driven Microservices Using CQRS and Serverless-January 31, 2017

    什么是事件驱动架构[

    事件驱动架构将领域事件看作为顶级元素,这其实并不是什么新鲜概念,自有软件起就已经存在了。现在,随着微服务的流行,人们对事件驱动在分布式系统中的应用越来越感兴趣。

    CQRS

    CQRS是Command Query Responsibility Segregation的缩写,是事件驱动架构领域中一个应用比较广泛的概念。是一种关注读写分享的架构方式。

    此处输入图片的描述此处输入图片的描述

    CQRS中,作为输入的领域事件与领域模型在结构上是不同的。
    Example 1. Account aggregate

    {
      "createdAt": 1481351048967,
      "lastModified": 1481351049385,
      "userId": 1,
      "accountNumber": "123456",
      "defaultAccount": true,
      "status": "ACCOUNT_ACTIVE"
    }
    

    如果我们要想改变account的状态,一般我们是直接修改对象的status字段,但在CQRS中我们可以发送如下的一个事件
    Example 2. Account event

    {
      "createdAt": 1481353397395,
      "lastModified": 1481353397395,
      "type": "ACCOUNT_SUSPENDED",
      "accountNumber": "123456"
    }
    

    修改完成后,可以将这种变更反应到查询模型上


    此处输入图片的描述此处输入图片的描述

    以上是对CQRS的一个简单说明

    CQRS和微服务

    CQRS和微服务结合后会变得复杂,下图是一个实现系统。

    此处输入图片的描述此处输入图片的描述

    上图中,将一个微服务分成了command-side query-side event-processor三部分,每个部分都可以独立部署。

    command-side

    command-side开放rest api给用户,用户请求触发command, command触发action,action触发domain event; domain event存储在event store中。Event store是一个结合数据库和消息网关的概念(典型的实现如Eventuate)。领域事件保存事件的时间序列,通过历史事件重放能够重建系统的当前状态。

    此处输入图片的描述此处输入图片的描述

    event-processor

    事件处理器是无状态的,监听来自event store的事件,并处理。

    此处输入图片的描述此处输入图片的描述

    query-side

    此处输入图片的描述此处输入图片的描述

    分布式的单体应用还是微服务

    两者最大的区别是微服务中的单个服务是能够独立进化的。

    Serverless

    无服务,一般是指FaaS(Function as a Service),直接将逻辑部署为函数,不需要安全与管理专门的服务器或容器。使用无服务函数的一个好处是其将事件作为顶级元素的概念。

    微服务与Serverless

    微服务可以由一组Serverless来构建。

    此处输入图片的描述此处输入图片的描述

    Cloud-native CQRS

    我们来构建一个云原生CQRS应用,包括事件驱动微服务和无服务函数。

    此处输入图片的描述此处输入图片的描述

    相关文章

      网友评论

        本文标题:使用CQRS和Serverless构建事件驱动微服务

        本文链接:https://www.haomeiwen.com/subject/pbzkrxtx.html