写点什么

设计事件驱动的微服务

2017 年 11 月 15 日

事件驱动的微服务是一个未受到应有探讨的领域,在近日举行的µCon 伦敦2017 微服务大会上, Greg Young 表达了这样的观点。同时,他还特别强调,不应该对所有的微服务都使用事件驱动模式。相反,他建议逐个服务进行考察,并将事件驱动模式运用到真正能从中受益的服务上。

Greg Young 是一名事件驱动专家,同时也是 Event Store 的首席架构师。他认为,在创建微服务系统时需要考虑的一个重要的设计问题是,应该每个微服务使用一个数据库,还是所有的微服务都访问同一个数据库。在存储状态时,比如使用一个关系型数据库,使用一个或多个数据库并没有很大的不同,但是,他指出,在使用“事件库(event source)”时,多个服务使用一个事件库比一个服务一个事件库要简单许多。原因是事件排序,他还提及了 Leslie Lamport 及他的论文“分布式系统中的时间、时钟和事件顺序”。

在每个服务一个事件库的情况下,当服务从两个或两个以上的事件库中读取事件时,既不能保证所有的事件被以和创建顺序相同的顺序读取,也不能保证顺序和事件重放时相同。在多个服务使用一个事件库的情况下,顺序就有保证了,因为顺序是确定的。这就是“线性化(linearizing)”。该技术不能让系统更具扩展性,但却可以让系统更容易推断,Young 认为,在大多数情况下,这都比将来可能出现的可扩展性问题更重要。

Young 指出,对于大多数系统而言,线性化都是有效的,即使是在每秒处理超过 10K 事件的时候。对于真正的高吞吐量,也许高达每秒 250K 事件,寻求另外一种设计也许就是好主意了。

由于操作会跨多个微服务,所以相关性和因果关系标识可以带来极大的好处。当一个服务引发了一个其他服务监听的事件,它们就会引发自己的事件,这会使系统产生一个难以追踪的级联事件流。但是,通过向事件添加三个标识( uuid )——消息标识、相关性标识和因果关系标识,就可以克服这个问题。

事件创建时会获得唯一的消息标识。把事件的相关性标识设置为引发该事件的事件的相关性标识,事件流中相关性标识相同的所有事件都是有着相同的根源,把因果关系标识设置为引发该事件的事件的消息标识,就可以找出事件发生的顺序。

在理解和查找错误出现的原因时,按照正确的顺序查看整体消息流的能力非常有用。这项技术也可以用于非事件驱动的系统中。通过增加一个审计服务,监听所有服务引发的所有事件并存储它们,可以获得同样的可能性。

在演讲中,Young 还讨论了其他主题,包括内存服务、复制模型及地域分布。

按照计划,明年的大会将于2018 年11 月5 号到6 号举行。

查看英文原文: Designing Event Sourced Microservices

2017 年 11 月 15 日 18:001899
用户头像

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

关注

评论

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

北鲲云:浅谈云计算与高性能计算的区别与联系

北鲲云

JavaScript学习(九)

空城机

JavaScript 前端 6月日更

敏捷项目管理实践,如何正确使用故事点预估工作量?

万事ONES

项目管理 敏捷开发 ONES

【反客为主】360三面竟然被问到怎么日卫星?我:想学呀,我教你阿!

Machine Gun

运维 网络安全 信息安全 渗透测试

厉害了!10年架构师整理的Spring中升华代码的技巧,让你爱不释手

java专业爱好者

Java spring

zookeeper客户端zkclient和curator的api

赵镇

zookeeper

极光开发者周刊【No.0625】

极光开发者

Kubernetes手记(22)- K8S包管理器

雪雷

六月日更

在线html链接提取工具

入门小站

工具

[译] R8 优化: Switch 场景下的枚举

Antway

6 月日更

阿里内部不外传的50万字Java面试手册,首次开放,一天遭狂转10w次

Java架构师迁哥

JSON 数据格式该怎么使用

网络安全学海

json 网络安全 安全 信息漏洞 渗透测试

快手严厉整治违规商业内容:必须构建平台良性生态链

石头IT视角

【熬夜整理近百份大厂面经】2022校招提前批面经总结分享(腾讯、字节、阿里、百度、京东等招聘信息+必考点+简历书写)

学无止境的阿奔

c++ 面试 后端开发 程序员、 秋招

Linux之touch命令

入门小站

Linux

B 站游戏技术平台微服务通用网关实践

bilibili游戏技术

微服务架构 openresty APISIX 通用网关

敏捷项目管理是不是可以缩短项目周期,或者说“敏捷就是快”?

万事ONES

项目管理 敏捷开发 ONES 项目管理工具

矩阵分解推荐算法(十八)

数据与智能

推荐算法 矩阵运算

带老弟做项目,凉了

程序员鱼皮

Java c++ Python JavaScript 技术

高性能计算在人工智能(AI)智药中的应用

北鲲云

极光统一消息系统UMS新版上线!多维数据统计分析助推运营增长

极光开发者

Vue源码学习 | 从源码中学习Javascript技巧

devpoint

JavaScript Vue 6 月日更

mysql的存储引擎知多少

卢卡多多

KV存储引擎 MySQL 数据库 六月日更

Scrum | 你需要知道这些

Python测试开发

项目管理 Scrum 敏捷

做好项目管理,项目经理应当掌握哪些技能?

万事ONES

项目管理 ONES 项目经理

挖fil币需要了解这6件小事,再也不怕被坑!

IPFS8822

区块链 IPFS Filecoin 虚拟货币

前端 JavaScript 获取字符串中重复次数最多的字符

编程三昧

JavaScript 前端 数组 指针思想

Django搭建个人博客网站---模块划分

IT蜗壳-Tango

6 月日更

5分钟速读之Rust权威指南(三十)多线程

码生笔谈

rust

七种方式教你在SpringBoot初始化时搞点事情

L

Java

AI云市场的繁盛之夏:AI花开果熟,百度抢先品尝第一口甜

脑极体

设计事件驱动的微服务-InfoQ