“三活”数据中心这个概念出自阿里巴巴,这是首个实现多活(2个以上)的大型数据中心,意义非凡。虽然我们在各种技术文章中经常看到讨论多活技术,但是实际上都是理论研究,从未经过实践。
所谓多活,一是多中心之间地位均等,正常模式下协同工作,并行的为业务访问提供服务,实现了对资源的充分利用,避免一个或两个备份中心处于闲置状态,造成资源与投资浪费,通过资源整合,多活数据中心的服务能力往往双倍甚至数倍于主备数据中心模式。二是在一个数据中心发生故障或灾难的情况下,其他数据中心可以正常运行并对关键业务或全部业务实现接管,达到互为备份的效果,实现用户的“故障无感知”。值得注意的是,在目前的建设与运维中,用户关注更多的是“双活”的数据中心。“双活”可以看作多活数据中心的一个特殊简化子集,也是最常见的模型。“双活”聚焦两个数据中心的工作模式与机制,建设思路与技术选择是基于多活的裁剪和优化,一些适合“双活”的方案在扩展性等方面未必适合于多活的应用场景,“双活”数据中心是多活数据中心的必经阶段。和多活相比,“双活”更容易实现,技术复杂度低些。“三活”就是三个数据中心同时工作,业务可以在三个数据中心之间无感知切换。
“三活”数据中心带来的优势是显而易见的,和“双活”相比,“三活”的可靠性更高,三个数据中心中两个数据中心同时坏的可能性是非常小的,民航飞机可靠性很高也只有两个引擎,可见“三活”数据中心的可靠性有多高;“三活”数据中心可以在其中一个数据中心故障时,由另外两个数据中心承担业务,这样两个数据中心运行不至于被业务压垮。“三活”数据中心使得每个数据中心承载的业务量都不会太重,便于应对像双11这样的流量洪峰,而且“双活”具有的优点,“三活”都具备,不管是“三活”还是“双活”都是未来数据中心技术发展的主流方向,这种方式要比异地灾备、主备数据中心、两地三中心等架构还先进得多,在近两年得到了数据中心用户的广泛认可。
不过“三活”比“双活”还是复杂多了,“双活”数据中心运行只可能有三种情况,要么A运行,要么B运行,要么AB运行;但“三活”数据中心运行就有六种情况,数据中心之间切换情况要复杂得多。这不仅涉及到服务器/虚拟机之间的集群协同,还包括数据的复制与同步,更重要的是涉及到跨数据中心的网络互联互通及分支/Internet用户对数据中心的访问。
首先就是距离带来的延时问题,三个数据中心相互之间距离上千公里是非常常见,即使按照光速传递,经过几跳路由,延时问题还是会暴露出来,如果延迟达到数秒这对业务切换是有影响的。比如通过调整路由COST数值,将访问数据中心A的流量引向数据中心B,受到延迟的影响,业务短时可能无法得到及时相应,这样会积累大量的访问消息,一旦时间过长就会让系统崩溃。
其次是数据一致性的问题,多活是要实现多个数据中心同时都可以写,如果两个点同时写了一个用户的同一行数据,那这个时候就无法判断合过来的时候,到底哪边的数据是对的,这个是很严重的。试想想谁也不想自己的银行账户今天多了几千块,明天又少了几千块吧,一定要保持三个中心的数据一致性,尤其是在数据中心之间切流量的过程更要注意,避免数据错乱,这个是非常具有技术难度的,意味着从底层物理链路直到软件平台的应用层层都要感应到这次切换,如果没感应到就可能出问题,感应慢了也可能会出问题,在这个中间过程中数据保护做得不好,就有可能数据错乱甚至丢失,对于承载重要业务的数据中心,这样的结果是非常严重的。
再次就是安全性,“三活”数据中心相当于对外的接口多了,这样受到攻击的可能性要大得多,更多地将数据中心暴露出来,一旦一个数据中心被攻破,整个“三活”系统都要受到威胁。为了增加安全性,又必须要在每个数据中心都要部署安全防火墙,这样数据中心的成本大为增加,而且既要对外过滤,又要放开数据中心之间正常的流量访问,防火墙的过滤规则设计也会比较复杂,尤其是对于业务量大的数据中心。不仅要做到安全控制,还要在进行数据中心之间业务切换时,防火墙及时更新自己的过滤规则,以免出现流量不通的问题。
最后就是成本问题,运维三个数据中心自然要比“双活”两个数据中心,灾备中心要复杂得多,需要更多的人力物力来确保三个数据中心都正常运行。“三活”数据中心的运营成本过高也使得很多数据中心望而却步,另外“三活”数据中心技术理论先行,还鲜有实际应用,技术风险很高,这也是“三活”数据中心面临的问题。
纵然“三活”数据中心有这样那样的问题或者困难,但却是确保数据中心业务安全好的一种备份方式。目前来看“三活”数据中心技术实现过于复杂,这使得很多数据中心不愿意尝试,阿里愿意做第一个吃螃蟹的人。多活数据中心理论提了好几年了,真正用起来双活的数据中心凤毛麟角,用起“三活”的阿里是头一份,也只有像阿里这样技术雄厚的巨头互联网企业才能玩得起“三活”数据中心,相信经过实践的检验,“三活”甚至更多活数据中心技术会越来越完善,多活数据中心未来必将遍地开花。