负责开发Amazon Key的团队对他们的事件处理平台进行了升级,旨在解决由于采用紧密耦合、单体架构而带来的可扩展性和可靠性问题。随着服务之间的交互关系变得越来越复杂,系统的稳定性以及集成速度也受到了越来越大的限制。经过重新设计后,该平台采用了基于Amazon EventBridge的集中式、事件驱动的架构,这种架构能够支持每天处理数百万条事件,并确保这些事件的响应时间控制在毫秒级别;同时,该设计还改进了数据模式的管理机制,为后续引入更多服务消费者提供了可行的方案。
Amazon Key套件能够实现安全的送货到用户家中以及财产访问管理功能。其早期的架构依赖于紧密集成在一起的服务,因此某个组件的变更或故障都可能直接影响其他组件。事件路由逻辑是手动实现的,缺乏先进的过滤机制或并行发布功能;数据模式的定义也比较模糊,仅能对必填字段进行基本验证。如果要扩展验证规则或调整数据结构,就需要进行额外的协调工作或进行定制开发。此外,该平台能够支持的订阅者数量也有限,并且没有标准化的机制来适应新出现的使用场景,从而实现订阅者数量的动态扩展。
为了解决这些限制,工程团队采用了单总线、多账户架构模式。在核心账户中,有一个集中式的EventBridge总线,用于接收来自事件生产者的数据;路由规则会分析这些数据,并将匹配到的事件转发到相应的订阅者账户,而每个账户都可以自行设置处理目标和处理逻辑。这种架构能够在保证对路由规则、权限设置及合规性控制进行集中管理的同时,实现各服务之间的解耦。各个团队可以独立地进行开发工作,同时共享这个统一的事件处理框架。
架构示意图(来源:AWS博客文章)
为了标准化事件定义并实现版本控制,团队引入了一个集中式的数据模式存储库。这些数据模式成为了事件处理规则的标准依据,也使得数据验证工作更加规范化。在将事件数据发送到EventBridge之前,定制的客户端库会先对这些数据进行检查,并确保它们符合既定的数据结构;在订阅者端,同样的库也会对接收到的事件数据进行解码和处理,然后再将其传递给下游服务。这种机制能够确保生产者和消费者之间使用一致的数据格式,从而有效减少因数据格式不兼容而导致的集成错误。
对于订阅账户而言,基础设施的配置是通过使用AWS Cloud Development Kit构建的可重用组件来自动完成的。这些组件用于配置事件总线、定义路由规则、设置跨账户访问所需的IAM权限,同时还支持监控与警报功能的实现。这种标准化机制有效减少了重复性的基础设施配置工作,确保了各服务在可观测性及安全性方面能够保持一致。
模式验证与数据发布流程 (来源:AWS博客文章)
此次架构重构取得了显著的成效:该平台目前能够每秒处理约2,000个事件,其处理成功率高达99.99%。团队测得,从数据接收到目标功能被调用为止,整个处理过程的延迟时间约为80毫秒。运营效率也得到了提升:事件接入所需的时间从48小时缩短到了4小时;而那些原本需要大约40小时才能完成的服务集成,现在只需约8小时就能完成。该系统如今能够支持每天数百万个事件的处理,同时依然保持较低的延迟时间和稳定的可靠性。