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

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

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

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

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

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

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

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


原文地址:http://www.infoq.com/cn/news/2017/11/event-sourcing-microservices

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

设计事件驱动的微服务相关推荐

  1. 【本人秃顶程序员】使用Spring Cloud Stream和RabbitMQ实现事件驱动的微服务

    ←←←←←←←←←←←← 快!点关注 让我们展示如何使用Spring Cloud Stream来设计事件驱动的微服务.首先,Spring Cloud Stream首先有什么好处?因为Spring AM ...

  2. 如何驯服事件驱动的微服务

    现代的微服务架构是事件驱动的,响应式的和编排的(与通过协调器进行集中控制相反). 这使得它们松散耦合并且易于更改. 对? TL; DR:不太容易! 您将在理解和管理事件流程方面面临挑战. [编程艺术发 ...

  3. 基于DDD(领域驱动设计)的微服务设计实例

    目录 一.战略设计: 1.产品愿景 2.场景分析 3.领域建模 1)提取领域对象 2)构建聚合 3)划分界限上下文 4.微服务拆分 二.战术设计 1.分析微服务领域对象 1)服务识别和设计 2)聚合内 ...

  4. 微服务 请求驱动和事件驱动_如何驯服事件驱动的微服务

    微服务 请求驱动和事件驱动 现代微服务体系结构是事件驱动的,响应式的和编排的(与通过协调器进行集中控制相反). 这使得它们松散耦合并且易于更改. 对? TL; DR:不太容易! 您将在理解和管理事件流 ...

  5. 架构设计之「 微服务入门 」

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 奎哥 来源 | 不止思考 微服务这几年不可谓不火,很多技术团队都开始在自己的项目上引入了微服务.一方面这些团队确实很好的推动了微服务 ...

  6. 基于事件驱动的微服务教程

    基于事件驱动的微服务教程 使用 Spring Boot.Spring Cloud.Kafka 和 Elasticsearch 掌握具有模式的事件驱动微服务架构 课程英文名:Event-Driven M ...

  7. 新思路设计可视化大型微服务监控系统

    http://www.infoq.com/cn/articles/visualization-microservice-monitoring-system 背景 随着微服务在生产实践中被大量使用,后台 ...

  8. 事件驱动数据管理 微服务和分布式数据管理问题

    单体应用程序通常具有一个单一的关系型数据库.使用关系型数据库的一个主要优点是您的应用程序可以使用 ACID 事务,这些事务提供了以下重要保障: 原子性( Atomicity) 所作出的改变是原子操作, ...

  9. 阿里P8 “布道师”,谈微服务的应用架构设计(附微服务教程)

    本次分享基于微服务的应用架构设计,内容涉及如何构建一个微服务应用,服务注册与发现,微服务测试和典型的微服务架构设计模式,以及微服务架构在七牛的实践案例. 目录 构建一个微服务应用 服务注册与发现 微服 ...

最新文章

  1. MPLS inter-as ××× Option3:multihop mp-ebgp
  2. 转Python 参数知识(变量前加星号的意义)
  3. python容器数据类型_python collections 容器数据类型
  4. Windows 下查看端口占用情况 netstat / tasklist / findstr
  5. circle函数用法 turtle_Python绘图库Turtle详细分析
  6. Hibernate深入之get()与load()懒加载
  7. 十问十答 Ms-PL 许可证
  8. 美国最受欢迎的电商网站,竟然是一家中国公司?
  9. mysql 主键溢出检查_详解MySQL 表中非主键列溢出情况监控
  10. Linux 常用基础命令(入门版)
  11. Visio软件方案UML选择
  12. LORA+4G无线组网的方案
  13. Ubuntu 16.04下开启Mysql 3306端口远程访问
  14. Android修炼之道—Talker聊天小工具
  15. js判断国内主要浏览器名称(QQ、360、遨游、搜狗、2345、Google Chrome、Edge、IE)(最新,亲测有效)
  16. 2021年5月17号下午初级《会计实务》真题解析
  17. jdk1.8的安装环境配置详细步骤
  18. 教你开发一个手机软件跟女神表白
  19. js 判断平面几何图形是否重叠
  20. 大杀器!攻克目标检测难点秘籍四,数据增强大法

热门文章

  1. 新款ATM恶意软件Alice 可对抗动态分析 但目前需要物理接触主机
  2. Javascript:阻止浏览器默认右键事件,并显示定制内容
  3. Object C学习笔记11-数组
  4. 使用bat来运行cygwin,执行脚本(命令)
  5. Linux重定向详解
  6. 敏捷软件开发之结对编程
  7. 流程再造:信息化建设的最佳拍档
  8. 修炼九阴真经Windows Phone开发 (7):本地化应用程序栏Localizing an Application Bar 下...
  9. Avalonia跨平台入门第十一篇之自定义Window
  10. 数据资产纳入国资保值增值考核