亚马逊AWS官方博客

GoDaddy 如何大规模实施多区域事件驱动型平台



GoDaddy 是全球领先的域注册和 Web 托管服务提供商,自 1997 年成立以来,已为超过 8400 万个域和 2200 万客户提供服务。该公司拥有多种内部系统,其中客户信号平台可提供捕获、分析客户和产品数据,并相应采取行动,从而实现更好的业务成果。借助该平台,GoDaddy 可以跟踪用户在其网站上的访问和互动情况,并使用重要的事件数据来提升客户体验和整体业务绩效。

如今,客户信号平台每天处理的事件多大 4 亿个。随着 GoDaddy 不断扩大整合范围,公司计划在不久的将来增加到每天处理 20 亿个事件。

在搭建客户信号平台时,GoDaddy 在系统架构方面的要求主要有三项:

  1. 尽可能减少运营负荷。
  2. 可根据流量变化自动扩展。
  3. 实现高可用性并确保能够捕获所有客户信号。

Amazon EventBridge 事件总线
在该公司的需求评估了多种方案之后,GoDaddy 决定使用 Amazon EventBridge 事件总线来实施客户信号平台。EventBridge 事件总线是一种无服务器事件总线,可帮助接收、筛选、转换、路由和交付事件。由于 EventBridge 属于无服务器服务,因此只需极少的配置即可启动并自动扩展,轻松满足了 GoDaddy 的前两项要求。

为满足第三项要求,解决方案需要具有业务连续性功能,并确保从客户生成事件到平台进行分析之间不会丢失任何事件。EventBridge 事件总线附带了多种功能,可帮助 GoDaddy 在构建应用程序时注意这一要求。

GoDaddy 利用的主要功能是全局端点。EventBridge 全局端点让客户能够可靠、轻松地改善事件驱动型应用程序的业务连续性。这项新功能于 2022 年推出,让客户能够构建多区域事件驱动型应用程序。

EventBridge 全局端点
通过全局端点可在 EventBridge 中配置托管式 DNS 端点,以便应用程序将向其发送事件。然后只需要在两个不同的 AWS 区域中配置两条自定义事件总线,一个是主区域,另一个是失效转移或辅助区域。事件的失效转移将根据 Amazon Route 53 运行状况检查显示的运行状况来决定。当运行状况检查显示运行正常时,事件将从全局端点路由到主区域中的自定义事件总线。如果运行状况检查显示运行不正常,则全局端点会将事件发送到辅助区域中的事件总线。

运行状况检查状态

最简单的全局端点配置是活动/存档配置。这种配置兼顾了业务连续性和简单性要求。活动/存档配置会定义两个不同的区域,其中主区域用于部署应用程序,所有业务流程都在此进行;存档区域仅部署自定义总线,用于所有事件的存档。

此外,不同区域中的总线之间还遵循双向复制规则。在正常情况下,如果没有出现错误,每当事件到达主区域的自定义总线时,该事件都会自动复制到辅助区域中的存档自定义总线。

如果发生失效转移,全局端点会将事件重定向到辅助区域并存档,以供下次处理之用。

活动/存档配置

GoDaddy 的全局端点实施
GoDaddy 需要一种既可尽量减少运营负荷,又能确保业务连续性的解决方案,为此该公司决定采用全局端点和活动/存档配置。通过这种配置,该公司可以在其主区域中使用事件处理逻辑,同时还拥有辅助区域以防出现问题。

在其配置中,事件将在辅助区域中存档 30 天后过期。发生失效转移时,由于不需要实时处理事件,因此会将事件放入存档中。如果问题在 24 小时(复制规则的保留期)内得到解决,则事件将自动发送到主区域。如果解决问题的时间超过 24 小时,则需要在主区域重放事件。

该公司当前解决方案的示意图如下。目前该公司使用了两个区域,主区域为美国西部(俄勒冈州),用于部署数据湖,也就是事件的主要使用者;辅助区域为美国东部(弗吉尼亚州北部)。事件在不同的客户端中生成,然后从客户端发送到 Amazon API Gateway。GoDaddy 在这两个区域部署了两个 API 网关。事件以极小的延迟从客户端发送到 API 网关。为此,该公司使用了 Amazon Route 53 提供的基于延迟的路由。然后会将事件发送到某个 AWS Lambda 函数,对事件进行验证并转发到 DNS 级别的 EventBridge 全局端点。

GoDaddy 架构

全局端点采用活动/存档配置,失效转移配置为通过监控 Amazon CloudWatch 警报的 Route 53 运行状况检查来触发。该警报会观察主区域中的 IngestionToInvocationStartLatency 指标。

IngestionToInvocationStartLatency 是一个服务级别指标,显示了从 EventBridge 摄入事件起,到首次调用配置的规则中的目标之时止的事件处理时间。该指标根据总线中的所有规则来衡量,用于指示 EventBridge 服务的运行状况。任何超过 30 秒的高延迟时间都表示服务出现中断。

当系统处于正常状态时,事件将从全局端点转发到主区域中的自定义入口事件总线。该自定义事件总线已启用复制;这意味着到达该总线的所有事件都会自动复制到辅助区域中的自定义入口事件总线。

入口事件总线接收的所有事件都将发送到丰富函数。该函数会执行基本的验证和身份验证,并对事件数据进行丰富,以确保来自不同客户端的所有事件都是标准的。

然后事件将被转发到数据平台事件总线,再发送到不同的使用者目标。主要目标是该公司用于分析所有事件的数据湖解决方案。

产生了什么影响?
业务连续性对 GoDaddy 很重要,需要确保该公司的客户信号不会因为任何平台问题而丢失。这确保了该公司可以放心地将客户信号平台的处理能力,从每天 4 亿个事件扩展到每天 20 亿个事件,而不会带来任何额外的运营开销。

现在,该公司可以放心地每天通过系统处理数以亿计的事件,并且还可以不断增长。下图显示了正常情况下全局端点每天接收的事件数量。

摄入的事件数

尽管使用活动/存档模式后,GoDaddy 能够确保永远不会丢失任何事件,但该公司也认识到在某些使用场景中,需要尽可能减少事件处理延迟,即使服务发生中断时亦不例外。由于已经在将事件复制到辅助区域,因此可以将最关键的使用者同时部署到这两个区域,并为其关键任务系统启用双活配置。借助双活配置,客户可以在主区域和辅助区域中并行处理事件,从而在出现中断时也能简化事件的处理,确保业务连续性。

在构建客户信号平台时,该公司的愿景是满足 GoDaddy 的高可靠性、可扩展性和可维护性标准,同时保持平台的自助服务功能,以便开发人员可以专注于满足业务需求。为此 GoDaddy 决定选择 Amazon EventBridge 全局端点和无服务器技术来构建该解决方案。

GoDaddy 客户信号平台是无服务器技术实现的典型案例。通过尽可能在云端处理无附加价值的繁重工作,GoDaddy 减少了为多区域策略设置事件总线的复杂操作,并实施了失效转移机制以防某个区域出现中断,此外还通过启用复制确保了事件不会丢失。全局端点的活动/存档配置不仅可提高客户应用程序的可用性,同时需要的配置更改也极少。

要开始使用 EventBridge 全局端点,建议参阅以下有关事件驱动型应用程序的演讲。有关如何使用 EventBridge 全局端点处理失效转移事件的工作演示,请访问此 Serverless Land 存储库

Marcia