依赖于高可用性应用程序的企业应该采用双活数据中心设计,以确保可靠性和弹性。而运行高可用性应用程序的企业都必须回答以下基本问题:当底层通信基础设施不再可靠时,将如何创建具有弹性的应用程序架构?
以一家咨询机构与用户的合作为例,该客户的主要业务应用程序具有高可用性需求。其客户将事务发送到主要数据中心应用服务器,并在收到确认之前缓冲事务。其客户将其两个数据中心分别配置为主数据库和备份数据中心。
在可靠性方面,客户每年多次经历与网络相关的中断。此外,从主数据中心切换到备份数据中心的故障转移机制是需要数小时才能执行的一个人工处理过程。因此,在故障转移过程完成之前,需要解决网络问题。显然,客户需要一种更可靠的数据中心故障转移机制,使客户能够访问高可用性应用程序。
还有一种选择是让网络和数据中心高度可靠,其数据中心的停机事件将非常罕见。然而,高度可靠的基础设施的架构往往也是脆弱的,并且微小的变化可能导致难以诊断和纠正的宕机和中断。
弹性应用程序体系结构
为了避免使系统变得脆弱,实现弹性应用程序的更好方法是部署不依赖于单个路径或功能的双活数据中心体系结构。双活(active-active)这个术语指的是至少运营两个数据中心,其中两个数据中心都可以在任何时间为应用程序服务,因此每个数据中心都充当活动应用程序的站点。客户可以在任何一个数据中心执行事务,每个数据中心的设计和操作都比创建单个超级可靠的数据中心简单得多。
请注意,弹性应该内置在应用程序中,而不是网络和IT基础设施中。这意味着即使网络或服务器的某部分意外发生故障,其应用程序仍可继续访问。这种方法的核心是高可用性应用程序体系结构需要包含可靠的数据交换。在该体系结构中隐含的是每个数据中心的数据库在执行客户端事务时需要彼此更新。
客户的应用程序特性非常适合双活架构,其中任何一个数据中心都可以执行完整事务。客户交易被发送到更新中央数据库的数据中心应用程序,然后向客户端点发送确认。该机制保证了交易的交付。由于高可用性应用程序是内部开发的,因此可以在内部进行后续修改。
用于数据传送的TCP
传输控制协议(TCP)是为确保可靠的数据传输而设计的网络机制。虽然传输控制协议(TCP)可以重试传输丢弃的数据包,但是当其中一个端点发生故障时,它无法保证数据传输。传输控制协议(TCP)会话在两个端点的接口之间建立。如果其中一个端点(服务器或其接口)出现故障,传输控制协议(TCP)会话将会终止。
独角兽公司的经验教训
例如Facebook、谷歌、微软、Netflix、亚马逊等独角兽公司的IT系统,旨在让客户连接到他们的数据中心。如果数据中心某个部分发生故障,则尝试使用该组件的事务将自动分配给IT基础设施的不同部分。而这些行业巨头并不希望他们的基础设施部分失败,因此他们在应用程序本身中构建更多的弹性。
其他公司的弹性架构
如果组织并不是独角兽公司,那么能做什么?可以向独角兽公司学习,并修改IT系统,以类似的方式运作。这最适用于内部构建的高可用性应用程序。
例如,客户端可以使用具有通过域名系统学习的数据中心地址的循环列表的事务重传计时器,也就是全局服务器负载平衡。客户端将缓冲事务,直到它收到来自可访问数据中心的确认。数据库同步会将更新分发到其他实例,因此任何数据库都可以处理这些事务。该架构允许组织部署多个应用程序数据库系统。这种方法甚至可以扩展到访问云计算基础设施中的数据库实例,如Amazon和Microsoft Azure。
采用第三方应用程序(例如电子健康记录应用程序)更具挑战性。可以要求软件供应商能够使用双活数据中心进行操作的弹性系统设计。如果仔细检查应用程序的客户端,企业可能会发现添加能够监视数据中心连接的小型软件模块的机会。如果连接失败,则软件模块可以自动将应用程序切换到另一个数据中心。
另一种选择是考虑软件定义的WAN等技术,通过使用来自不同提供商的多个链路来增加路径多样性。此方法也适用于第三方应用程序。
随着云计算的广泛采用,设计系统以使用一个内部数据中心和一个基于云计算的数据中心是很诱人的。