FinOps有望降低企业50%+的云成本! 了解详情
写点什么

事件应该成为开发者的一等工具

  • 2018-02-04
  • 本文字数:1057 字

    阅读完需:约 3 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Randy Shoup 在最近的一篇博客中声称:“我们应该把事件看作是系统中的一等公民,并且应该更多地使用事件。”他认为我们常常低估了事件的价值,忽略了它们给我们带来的好处。例如,事件可以帮助我们实现系统解耦,这样我们就能独立的处理系统的各个部分。

Shoup 是 Stitch Fix 公司技术部门的副总裁,该公司拥有 70 多个独立的应用程序和服务,能够处理各种不同类型的业务。以该公司的一个相对复杂的工作流程为例,该流程从客户下订单购买服装开始(造型师会负责挑选服装)。这其中包含了下单,造型师挑选产品,发货,甚至还有可能包括退货流程。这些流程建立了一个状态机,通过各种事件来实现状态的转换。虽然实际流程很简单,但是它能够记录下每一个步骤的状态。这个工作流程的好处就是能够很方便的查看历史纪录,例如能够知道已经完成了哪些步骤,每个步骤各花费了多少时间。对于该公司的数据科学团队来说,这些数据非常重要。

在 Shoup 描述的这种微服务架构中,某个特定的应用程序或服务可能是事件的生产者、事件的消费者或两者兼而有之。他认为一个接口必须明确包含如下事件:

  • 同步的请求和响应操作(例如使用 REST 和 JSON,或 gRPC)
  • 生成的事件
  • 被消费的事件
  • 批量读取和写入(例如提取数据以供某些分析工具使用)

当转换状态的时候,这些事件就会被列入历史纪录。通过播放事件可以重建当前的状态,所以当前的状态可以不用存储到数据库中,这种技术被成为事件溯源。Shoup 引用了 Greg Young 及该领域其他权威人士的说法,他还提到了像 Kafka 和 Akka 这类用于分布式系统和基于事件系统的工具。

根据 Shoup 的经验,通常大多数开发者都认为事件是复杂的。特别是对于那些构建 3 层应用的开发者来说,他们很难从事件的角度来思考问题。而事件中像“最终一致性”、“异步”等这类术语的使用,让他们觉得更加复杂了。Shoup 认为,其实事件这个概念对于所有的开发者来说都很普遍。例如软件开发过程中所使用的版本控制工具,我们通过它们上传、测试和部署代码,所有的这些流程都是可以看成是事件。而这些事情,我们每天都要做。

在2017 年纽约的QCon 大会上,Shoup 谈到了微服务中的数据管理,其中便包括仅通过事件来进行通信的内容。

查看英文原文 Events Should Be a First-Class Tool for Developers


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2018-02-04 18:001833

评论

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

2020年3月北京BGP机房网络质量评测报告

博睿数据

运维 APM 机房 数据中心 拨测

游戏夜读 | 世界两大游戏评论!

game1night

数据产品经理实战-DMP搭建

第519区

产品经理 营销

字符与编码

引花眠

计算机基础 utf-8

配置国内的pip源以提高使用pip安装python软件包的速度

良少

Python pip

程序员的修行之路-关于编程语言

牧马人

程序员

ARTS week 1

丽子

使用Spring Boot和Docker构建微服务架构(四)

Tux Hu

Docker 架构 容器 微服务 Spring Boot

Flink 完美搭档:数据存储层上的 Pravega

Apache Flink

大数据 flink 流计算 实时计算

美国播客节目《指数视角》专访李飞飞:疫情、 AI 伦理、人才培养

神经星星

人工智能 程序员 李飞飞 硅谷 AI 伦理

docker19.03读取NVIDIA显卡

首富手记

Docker Dockerfile

ARTS打卡 第1周

引花眠

ARTS 打卡计划

linux 账户及安全管理(一 账户管理)

牧马人

Linux

系统化服务构建-软件工程分层

图南日晟

微服务 软件工程 架构设计

Java运算符实际运用

凌轩

Java 编程语言

df 和 ls 命令执行夯主

首富手记

生产力

C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介

Python名人堂

C# .net 算法 LeetCode

我的时间管理之路(附工具集合及使用心得)

YoungZY

App 时间管理

使用Spring Boot和Docker构建微服务架构(三)

Tux Hu

Docker 架构 容器 微服务 Spring Boot

卡巴斯基产品本地化用时能缩短 77%,怎么做到的?

葛仲君

项目管理 软件开发 本地化 开发流程

世界那么大,你有偏见吗?

谢锐 | Frozen

创业 技术管理

自制操作系统

贾献华

是什么在背后支撑起“带货一哥”李佳琦?

博睿数据

负载均衡 APM 压测 秒杀 并发

短视频时代下的知识摄取

Neco.W

学习 知识管理 知识体系 短视频

我们都可能陷入经济困境

董一凡

生活

如何在团队中做好Code Review

Ken

团队协作 代码审查 Code Review 代码质量

2020年3月云主机性能评测报告

博睿数据

云计算 运维 机房 数据中心 主机

程序员的修行之路-保持良好的心态

牧马人

程序员

程序员的修行之路-关于编程语言

牧马人

程序员

关于用户体验的一些思考

dstweihao

android 产品开发

谈谈控制感(10):怎么做一个靠谱的人

史方远

职场 心理 成长

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
事件应该成为开发者的一等工具_语言 & 开发_Jan Stenberg_InfoQ精选文章