写点什么

HomeAway 用事件溯源解决大数据迁移

  • 2018-11-10
  • 本文字数:2535 字

    阅读完需:约 8 分钟

HomeAway用事件溯源解决大数据迁移

HomeAway数据架构师 Adam Haines 最近在Data Architecture Summit 2018大会介绍了他的团队如何使用事件溯源云设计模式来加速其组织中的大数据项目。


像类似事件溯源的数据架构模式可以帮助解决迁移到云环境后团队面临的新挑战。这些挑战包括最终一致性、遗留服务依赖、弹性扩展以及不可靠的网络。事件溯源通过将数据存储为一系列领域状态变更,来改变数据存储的范式。数据就像服务可以使用的日志一样存储。


他们云迁移的主要目标是最小化云平台的技术负债。他们面临着数据架构方面的挑战,比如有限的事件回放、可审核性较小、到处都有的数据拷贝、有限的可发现性和沿袭性、数据飘移以及一些弹性挑战。


事件溯源是基于不可变的日志变更,并提供最大程度的可审核性。它会带来最终一致性、事件迭代和数据增长这样的挑战。


他还提到其他与事件溯源紧密相关的设计模式,命令查询职责分离(CQRS)分离了读和写的关注点,保证应用程序和服务能独立扩展。


在 HomeAway,事件溯源解决方案包括实践规范化、捕捉 delta 变更(改变数据捕捉)、每条消息“仅有一个”语义,保证排序和分块服务。


他们还使用Strangler模式成功地实现了向云的增量迁移、资产捕捉、事件重定向以及路由请求。


InfoQ 采访了 Adam Haines,向他了解了有关事件溯源模式、在组织中使用它获得的教训以及他推荐的实践。


InfoQ:你可以介绍一下为什么事件架构在事件溯源解决方案中如此重要吗?


Adam Haines:事件架构很重要,因为这是以数据为中心或以应用程序为中心的基础。只要数据是由编写它的服务所决定的,我们在数据民主化的道路上就更进了一步。每个事件都应该非常细粒度,绑定到现实世界的事物。比如说,预约并不是件实物,而由一系列大家皆知的特征/属性组成,我们为了方便给它下了这个简单的定义。预约包括人、入住日期、离店日期、所有权、价格等等。如果我们的工作做得不错,那么编写事件的服务/平台/功能就无关紧要了,因为预订域已经可以与所有其他平台和服务互操作。这就是以数据为中心的体系结构的本质。


InfoQ:事件溯源有什么好处和挑战?


Haines:

好处:事件源允许服务分离它们的读写关注点,并真正允许服务封装数据。具有完整的封装不仅可以防止死星架构,还可以降低每个微服务的集成成本。事件源架构的最大优势之一是数据民主化。在体系结构的中心拥有数据可以让服务很容易地发现和订阅,这对于开发人员开发速度和实现接近实时的体验至关重要。事件源也为基于模式的编程打开了大门。如果已经设置好了模式和库,那么目标应该是让一个入门级的工程师执行开发生命周期,而不需要太多的提升或培训的时间。事件源提供了一个很好的审计跟踪,因为整个历史是持久的,这使得审计和可视化发生的事情非常容易。我认为这是一个非常关键的方面,因为服务变得更加异步,客户需要实时更新或反馈他们的事务状态。

挑战:由于本质上过去十年我们一直在编程,所以一直期望读自己写的东西。尽管我们认为读写分离是有益的,但同时它也存在着问题。有了事件溯源模型,软件工程师现在需要考虑幂等运算,以及如何处理不一致的结果。另外一个挑战是数据增长。事件溯源启动很快,也很容易,这是因为数据很少,所以速度会很快。很明显,随着数据的增长,存储空间以及返回当前状态需要的时间也会增长。我认为重要的是要有一个策略(恢复和/或快照)来最小化回放的成本和影响。


InfoQ:你可以介绍一下 HomeAway 的事件溯源架构吗?


Haines:HomeAway 转换到事件溯源的架构之后确实提升了架构的灵活性和弹性。从消息架构开始还有很长的路要走(我们还在努力),然而我们发现数据需要成为我们工作的中心。我们编程的方式需要更灵活、更适应。第一步是让数据的消费和生产变得简单。我们的目标是将事件放在业务的核心。事件和事件溯源给我们提供了更强大的洞察力、更多的灵活度以及更好地使用云的能力,同时帮我们降低了遗留数据中心服务的危害。


InfoQ:你们的解决方案中使用了什么技术?


Haines:HomeAway 的事件溯源主要使用了两种技术:Kafka 和 Photon。Photon 是高度分布式写优化事件溯源平台,在内部创建来解决事件溯源的挑战。

我想要重点声明的一点,技术选择的优劣其实是未知的,然而,这不是说没有权衡。我的目标是制定事件溯源模式的根本,这决定了技术选择的利弊。这表示,在决定选择什么技术来支持事件溯源的时候需要慎重考虑。不是所有的持久性都是一样的,也不是所有的平台都像数据库一样能提供相同的属性或保障。


InfoQ:你在演说中提到了 Strangler 模式。你可以介绍一下你的团队在开发事件溯源架构的时候是怎么使用这个模式的吗?


Haines:在我们迁移云计算之旅中,数据工程团队在很早阶段就意识到服务和数据库集成得如此紧密,几乎不可能分开。

我们需要解决的问题是如何迁移。我们需要找到一个方法,从遗留平台中得到突变事件,并把它们放到云上。

最简单的方法是使用变化数据捕获(CDC)流。CDC 流可以让我们的服务订阅遗留系统的突变事件,并放到目的地。

由于存储内容和存储方式的性质,决定了唯一的选择就是事件溯源。事件溯源允许我们以数据为中心来看待世界。在其中云服务或变化数据捕获是否写了事件并不重要,因为每个服务都在写相同的内容。

在研究了 Strangler 模式之后,我们意识到了事件的价值和力量。这时我们真正开始推行了事件溯源,让公司变得更加以数据为中心。


他还谈到了 CQRS 和事件溯源模式协同工作,以使系统变得更加有弹性。


命令查询职责分离(CQRS)是事件溯源交付价值和实现云规模的重要环节。CQRS 实际上是关于读写服务的分离。通过解耦这些服务,帮助我们独立地扩展读和写,并增加了弹性层。在传统的微服务世界中,服务可能委托给其他的微服务,然而,这是以集成成本为代价的,并对弹性造成负面影响。HomeAway 使用 CQRS 来真正提供和封装数据,因此服务丢失的影响会很小。在大多数情况下,最糟糕的情况是潜在的数据,这会让服务比停机状态更糟糕。在云中,人们预期看到的就是服务和资源增增减减、起伏不定。云并不像数据中心这么稳定,事件溯源+CQRS 可以帮助我们最小化这种风险。

查询层(CQRS 中的 Q),我们发现最好用图来表述,因为这样可以更好地探索跨领域的数据,这通常是封装微服务和业务对象的需求。


查看英文原文Event Sourcing to the Cloud at HomeAway


2018-11-10 22:15800
用户头像

发布了 218 篇内容, 共 61.0 次阅读, 收获喜欢 73 次。

关注

评论

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

看完这篇,你也是字符编码大神(ASCII、Unicode、UTF-8、UTF-16、UTF-32)

Meandni

Java 面试 Unicode utf-8 utf-16

识别代码中的坏味道(一)

Page

Java 面向对象 重构

“四个维度” 讲明白什么是微服务!

周果

微服务 单体系统 架构设计 团队组织 康威定律

谈谈控制感(4):损失的后果很严重

史方远

职场 心理 成长

记一次MHA切换故障踩的坑

一个有志气的DB

MySQL 高可用 复制 主从同步 故障分析

高仿瑞幸小程序 09 云数据库初体验

曾伟@喵先森

小程序 微信小程序 大前端 移动

Azure App 部署Django 和 PostgrSQL

yann [扬] :曹同学

Python azure

当你不被尊重的时候,才会想起去尊重别人

小天同学

人生 个人成长 感悟

零基础如何学架构

兆熊

架构

谈谈双亲委派模型的第四次破坏-模块化

寻筝

Java JVM

JVM源码分析之Object.wait/notify实现

猿灯塔

JVM

《零基础学 Java》 FAQ 之 6-Java里Bean这个名字怎么来的

臧萌

Java spring

阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

古时的风筝

Java规范 Java开发手册

LeetCode 513. Find Bottom Left Tree Value

liu_liu

LeetCode

程序员小白的个人思考

程序员小岑

程序员 职场 思考 感悟

如何在 Mac 上优雅的截图和录屏

Winann

macos 效率 效率工具 Mac

MySQL安全-审计

一个有志气的DB

安全 MySQ

我画了35张图就是为了让你深入 AQS

一枝花算不算浪漫

AQS jdk源码

《零基础学 Java》 FAQ 之 5-如何在IntelliJ IDEA里配置JDK

臧萌

Java jdk intellij

webpack入门系列之二——插件使用及热更新打包

子铭

Web

不要做软件开发团队中打破窗户的那个人

程序员小岑

程序员 思考 感悟 软件开发 团队

战略懒惰有多可怕

Neco.W

创业 重新理解创业 初创公司

香港科技大学与OSL海科签订无毒海洋防污技术独家授权协议

极客编

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (八)好单元测试的特质

编程道与术

Java 编程 软件测试 TDD 单元测试

测试开发专题:spring-boot自定义返回参数校验错误信息

王德发

Spring Boot 测试

初次见面

KAMI

游戏夜读 | Scikit-learn的2018自述

game1night

Leetcode 556. Next Greater Element III

隔壁小王

算法

Binlog2sql恢复误删除的数据

一个有志气的DB

MySQL 安全 数据

LeetCode 781. Rabbits in Forest

liu_liu

LeetCode

十大经典排序算法总结

淡蓝色

Java 算法 计算机基础 排序

HomeAway用事件溯源解决大数据迁移_云计算_Srini Penchikala_InfoQ精选文章