前言
我是事件驱动微服务架构的忠实粉丝。我是 2012 年在 LinkedIn 担任工程师时接触到它的,当时 Apache Kafka 还是全新的产品,基于 Kafka 的流处理也刚刚起步。2014 年,我在一次会议上发表了名为 "Turning the Database Inside-Out "的演讲,至今仍是我在 YouTube 上点击率最高的演讲。当我撰写《设计数据密集型应用》(Designing Data-Intensive Applications,O'Reilly,2017 年)一书时,我开始在我们日常使用的所有数据系统中看到随处可见的事件流。数据库耐久性、高可用性复制、事务、实时协作、更新大规模分析系统......这一切都离不开事件日志。
从那时起的十年间,我转到了学术界,现在是剑桥大学计算机科学与技术系的教师。虽然我的研究课题发生了一些变化,但我仍然在研究分布式系统,而且我仍然不断地回到事件上来。它们实现了可扩展性、容错性、去中心化、解耦性、可调试性、可进化性以及许多其他美妙的东西。事件,事件,事件!它们棒极了!使用它们!
鉴于我对这个话题的兴奋,当亚当邀请我为他的书的第二版撰写前言时,我当然非常高兴。他在数据工程领域也已经工作了 15 年,2015 年在 Apache Kafka 0.8.2 版本发布后开始使用它。他在几家电子商务企业中构建了事件驱动的数据管道和微服务平台,架起了从运营到分析领域的数据桥梁,最后成为Confluent公司的首席技术专家。他文笔极佳,对构建可扩展性和可靠性生产系统的所有实际细节都有深刻见解。
然而,要想了解事件驱动型系统可能具有挑战性,因为这是一种思维方式的转变。我们大多数人都习惯于服务的请求-响应模型,因为这就是大多数数据库查询、REST API 和服务调用的工作方式:你提出一个请求,然后得到一个响应。请求-响应架构是如此常见,以至于人们很容易认为这是理所当然的。你可能会认为这是唯一的做事方式。
请求-响应的问题在于:如果在收到响应后数据发生了变化怎么办?唯一的办法就是再次发送请求,换句话说,就是轮询。轮询次数越多,就能越快发现是否有变化。但大多数情况下,什么都没变,这就使得频繁轮询变得效率低下。说真的,如果能在发生变化时通知你,那该多好,这样你就不用一直询问了。这就是事件驱动系统的意义所在。
本书将为您提供有关事件驱动系统的一切知识:从将数据建模为事件的基本概念,一直到测试和部署到生产中的实际问题。您将了解最佳实践、模式以及各种方法的利弊得失。您将看到精选的语言和框架,包括基本的生产者/消费者框架、流框架、功能即服务、流 SQL、变化数据捕获等。
并非所有服务都应采用事件驱动:传统的微服务和单体也有自己的用武之地。但是,在事件驱动型微服务非常适合的情况下,它们就会大放异彩。请继续阅读,了解这些情况是什么,以及您可以从事件驱动型微服务中获得哪些好处:它们可以让不同团队管理的系统之间更好地沟通数据;它们允许根据业务用例以多种方式解释相同的数据;它们通过服务之间的解耦为您提供可扩展性和弹性;它们让您能够在事情发生时实时做出响应。
鉴于这种方法如此强大,我很高兴亚当写了这本书,让你也能学到所有这些东西,从而在何时以及如何采用事件驱动的问题上做出明智的决定。
希望你喜欢这本书!
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access