文档章节

Microservice Architecture Tech Resources

D
 DoIt
发布于 2017/05/15 14:40
字数 778
阅读 2
收藏 1

https://github.com/benwilcock/microservice-sampler

1.微服务使用Java+SpringBoot开发
http://projects.spring.io/spring-boot/
2.CQRS 操作和读取分离+Event Sourcing(ES)则使用Axon Framework V2 + MongoDB + RabbitMQ实现
http://www.axonframework.org/
https://www.mongodb.com/
https://www.rabbitmq.com/
3.编译,装配和运行则使用Docker容器完成
http://docker.com/
4.集中配置和服务注册管理则使用Spring Cloud
http://cloud.spring.io/
5.API说明使用Swagger和SpringFox
http://swagger.io/
http://springfox.github.io/springfox/docs/current/


CQRS架构模式将操作和查询分离到两个不同的组件来实现:
command-side microservice
query-side microservice
这些微服务有单一的责任,自己独立的数据存储,可以被部署并毫无影响的扩容。

CQRS/ES 架构
首先顶层是Client Facade/Gateway(Optional) 用于接收客户端的交互,然后将交互内容分为Commands类型和Queries类型
然后路由它们到相应的API调用。
Command Processor 一般处理的是写入逻辑,它的处理结果是创建Events,然后将Events保存到Event Store
然后推送给事件交换中间件,事件中间件是基于事件的发布预定机制Event Exchange

查询服务组件则是对外提供多视图或者联合查询视图, Materialised View,属于读逻辑。
查询的是View Store,它会从事件交互中间件上获取相应的事件来保持数据的一致性。

这两个组件都是通过SpringBoot框架来实现的。
而它们之间的交互则完全是事件驱动的。使用RabbitMQ messaging来在微服务组件之间传递events.
消息系统在流程,微服务,以及遗留系统之间传递事件提供了一个可扩展方法。

Command-Side Microservice:
Commands 是些改变状态的行为,command-side 微服务中包含所有的领域逻辑和业务规则。
Commands用于添加新产品,或者改变已有产品的状态。
这些命令在一个特定产品上执行的结果是 生成一些力 Events, 这些事件会通过Axon Framework 保存到MongoDB里。
然后通过RabbitMQ 消息传递给其它处理过程。

在事件源中,事件仅仅是系统状态的记录。它们被用来描述系统并根据需要为任意的实体重建当前状态。
主要是通过在某一时点上开始重放所有事件来完成。 这听起来好像很费劲,但是其实事件非常简单。
其实它执行的很快,我们甚至还可使用snapshots 的方式来回滚,然后执行那个时点以后的所有事件记录。

Query-side Microservice
扮演的是一个事件监听者或者一个视图的角色。
它监听由Command-side发出的事件,然后处理它们到任何涉及到的地方去。
它可以通过复制来无限的扩展,事件消息由RabbitMQ序列保存具备很好的稳定性。
它甚至可以在查询端失败宕机的情况下暂时保存消息。

命令端和查询端都有REST API可以用来访问它们的可用性。
Axon 
https://fabric8.io/

© 著作权归作者所有

D
粉丝 3
博文 105
码字总数 248750
作品 0
海淀
高级程序员
私信 提问
微框架(MicroFramework)资料

Microservices Microservice Architecture from http://martinfowler.com/articles/microservices.html Microservice Architectures: A Framework for Implementation and Deployment http:/......

东风125
2015/10/25
57
0
Introduction to Microservices

原文出自:http://nginx.com/blog/introduction-to-microservices 。我在其中加入了简单的翻译和自己的一些看法。 This is a guest post by Chris Richardson. Chris is the founder of the ......

编走编想
2015/05/29
0
0
15 Great Programming Blogs You May Not Have Heard About

The goal of this roundup is to help you discover new programming blogs that may not be insanely popular, but are still worth checking out. We won't mention the obvious super sta......

Alesia Krush
2017/12/22
0
0
Kubernetes平台上以测试驱动的方式部署Istio

As a full stack Developer, if you have been spending a lot of time in developing apps recently, you already understand a whole new set of challenges related to Microservice arch......

xiaomin0322
2018/09/13
0
0
REDtalks.live #23 - Aspen Mesh w/ Shawn Wormke [Video]

Want to learn about Service Mesh? Well, you're in luck! Today I am joined by Shawn Wormke, Sr. Director of Aspen Mesh - aspenmesh.io - an F5 Networks Incubator innovation. Aspen......

Nathan Pearce
2017/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C 语言 二级指针操作文件 柔性数组使用

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct _info* pInfo;struct _info{int line;int len;char data[0];}info;int getFil......

小张525
48分钟前
2
0
中介者模式

https://blog.csdn.net/jason0539/article/details/45216585

南桥北木
48分钟前
1
0
抽离css以及公共js

分离css 分离css:为何要把 CSS 文件分离出来,而不是直接一起打包在 JS 中。最主要的原因是我们希望更好地利用缓存。 extract-text-webpack-plugin > 1. 假设我们原本页面的静态资源都打包成...

莫西摩西
今天
2
0
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用

Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的。 如何设置才能让出来呢? 1:打开"系统管理"——"Configure Global Sec...

shzwork
今天
2
0
BAT面试必问HashMap源码分析

HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈...

别打我会飞
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部