聊一聊云端的“备、增、活”架构

又是一年“双11”来了,看到形形色色的应用在这几天蓬勃而出,为了商家和消费者们而忙碌。作为一个架构师、技术管理人员,你是否担心过“双11”用户激战正酣时,你的应用挂掉或系统宕机导致业务中断?这些可不仅仅是担心,而是已经发生的事实。

在全球范围内主流云厂商的故障时有发生。例如亚马逊AWS在2017年2月,就曾因一条错误指令引起宕机,影响了包括Slack、Quora和Trello在内的很多企业平台,停机4小时。去年9月,微软Azure数据中心还意外遭雷劈发生故障。

凡是IT都有故障概率,相对于传统IT单机,云计算已经通过大规模调度降低了故障率,大多数云厂商都声明可用性在99.9%-99.999%之间,且多数在故障后恢复很快。

所以无论你是否基于云构建业务,备份也尽量考虑与云贴合,原因是云厂商拥有更强的基础建设及可靠性服务。云厂商基本已提供完善的容灾架构设计,包括冷备、热备、同城双活、异地多活等策略,可以针对系统可用级别与成本、效率综合考虑。

下面和大家分享一下我对云端备份架构设计上的一些拙见。

一、云端备份(单云与多云)

如果你已经使用了某一家云厂商的服务,或者你的业务存放在某个云上,比如“阿里云”,一般通过以下的方式来完成备份:

1.云产品一般都自带备份功能,比如阿里云的数据库类产品RDS均自带备份及回滚功能,ECS服务器也具备快照及恢复能力。这些产品的备份是比较省心的,也不需要太多额外的成本,一般来说费用都包含在产品的购买费用中了。

2.如果需要备份的数据不是云产品,而是自建的业务系统中的数据,那么一般来说分为两种方式进行备份。

第一种是“非结构化备份”,通过一些同步工具将数据文件(数据库文件、图片、附件等)存储到文件系统中去,比如:ECS自建FTP、OSS、NAS等。

 第二种是“结构化备份”,通过一些同步工具将数据(泛指数据库中的数据)投递到特定的归档平台中去,比如:自建ES、SLS、ODPS等。

多云备份与单云备份的区别是存储的目的地不同,或者使用冗余备份模式,多云同时存储备份副本,以达到最可靠的数据安全性。

二、增量备份

 有时候我们希望备份是“实时”或者“准实时”的,这样一来就要求备份副本从原来的“孤岛式”变成“堆叠式”,孤岛式备份是最容易的,因为只需要手动或定时执行一次备份任务就可以了,但这种模式只能满足比较低级的业务需求,无法满足连续性的业务需求。

比如,我们需要通过备份在5分钟内生成一个立即可用的数据库用来分流线上数据库的压力,此时通过孤岛式备份无法满足业务需求,因为备份数据是不是最新的。

在这样的情景下,我们会考虑通过一些手段去完成实时增量备份,同样分为2种方式。

第一种是“非结构化备份”,增量方式主要通过脚本HOOK文件/目录异动来完成,大部分的同步备份软件都具备了这样的功能,只要网络带宽、磁盘IO满足要求几乎可以实现实时增量备份。

 第二种是“结构化备份”,数据库类的增量备份需要用到一些特殊的脚手架,以Mysql为例,可以通过开启数据库的binlog来完成准备工作,然后可以通过DataX或者阿里云的数据集成产品来完成数据的同步投递,因为是通过binlog完成增量,所以这是实时的。同时,通过binlog投递到ES也可以完成全文搜索功能,提高数据的全文检索能力,也被作为实时分析的一种手段。其他数据库也可以通过类似方式实现,总之一句话,要么花钱买云产品,要么善用开源。

三、业务多活

前面分别介绍了常规备份、增量备份的工作思路,但是它们仅仅是备份而已,永远是最后的手段。无论你是CTO还是运维人员,你一定希望这些备份永远都用不上,这才是最完美的状态。

那么这就要涉及到“多活”的概念了,一般分为“同城多活”和“异地多活”两个主流方式,对应不同的业务场景。因为多活比较复杂,我们仅以“无状态”应用为例,“有状态”的应用可能会更复杂一些,下次再聊。

同城多活,以杭州为例,通常都会在杭州市的两个机房架设一条专线直连,这样即便机房A出现故障,B机房也可以顶上去承接业务。

优点是,同城多机房通过专线直连,延迟非常非常小,切换分流非常简单,运维简单。

弊端是,A机房或者B机房可以有任意一个出现故障,但是整个杭州市的网络及电力不能出现问题。

异地多活,以杭州与上海为例,业务分别完整的部署一套业务在杭州与上海的机房,同时通过一些方式保证上海与杭州的数据是强一致的,或者有第三方的数据中心用来存数据,上海和杭州从数据中心拉取最新数据也可。

异地多活最重要的架构部分其实是“前端承接调度”这个模块,由它来决定每一个业务请求被送往上海还是杭州,常见的方案可以通过Nginx做7层转发、HAProxy做4层转发,在转发时做好心跳识别,一旦转发器发现某个城市失联,则摒弃此节点。理论上来说只需要你部署的城市足够多,业务可用性会更高。

转发也可以通过用户的网络延迟进行择优转发,以便于通过多活地域提供更好的用户体验。

以上是我对业务备份与多活的一些拙见,可能下次会再开一篇把多活展开说一下,或者对比一下各种同步工具的差异。从业界产品来看,阿里云的很多产品还是很好用的,数据同步工具很健全,比如:DataX、Canal、数据集成、混合云数据管理HDM、DBS等都是很好用的工具,虽然这些工具不能让你省略架构工作,但是他们能让你更快速和可靠的搭建自己的备份、多活架构。

祝大家双11愉快~