从冷备到多活,阿里毕玄谈数据中心的异地容灾

原文链接:http://wx.shenchuang.com/article/2015-04-07/595023.html

什么是异地多活?

     简单的理解就是在不同地方(一般指不同城市)建立多个数据中心,相对于冷备份而言,多活的特点在于,平时这些数据中心都是走流量的,会做业务支撑。阿里异地多活业务分为三个阶段,首先是单元化,然后是异地双活,最后是异地多活。为什么叫单元化?冷备份通常是备份全站,但是这样成本太高,而且由于平时不走流量,所以真正主站出问题时,进行站点迁移时不能保证冷备份站点一定能正常运行,或者把流量接管起来。单元化是异地多活基于成本考虑作出的决策,不会部署全站,通常只部署流量会爆发增长的部分(如跟买家交易相关的核心业务),在异地部署的只是一组业务,这组业务就称为单元。

异地多活面临的挑战

     异地多活主要面临的挑战是延时,成本和一致性

  • 延时:异地项目最大的挑战是延时。跨城市一定会有延时的问题。在中国范围内,延时可能在一百毫秒以内。看起来单次好像没什么,但是像淘宝是个很大的分布式系统,一次页面的展现,背后的交互次数可能在一两百次。如果这一两百次全部是跨城市做的,整个响应时间会增加很多,所以延时带来的挑战非常大。怎样减少时延的大小,最简单最好的办法,就是让操作全部在同一机房内完成,那就不存在延时的挑战了。所以最关键的问题,就是怎样让所有操作在一个机房内完成。这就是单元化。
  • 成本:虽然冷备份成本很高,多活可以降低成本,但是大部分人还是更喜欢冷备,不喜欢多活,是因为多活的数据正确性很难保证。数据在多点同时写的时候,一定不能写错。因为数据故障跟业务故障还不一样,跟应用层故障不一样。如果应用出故障了,可能就是用户不能访问。但是如果数据写错了,对用户来说,就彻底乱了。而且这个故障是无法恢复的,因为无法确定到底那里写的才是对的。所以在所有的异地多活项目中,最重要的是保障某个点写进去的数据一定是正确的。这是最大的挑战,也是我们在设计整个方案中的第一原则。
  • 一致性:多个单元之间一定会有数据同步。一方面,每个单元都需要卖家的数据、商品的数据;另一方面,我们的单元不是全量业务,那一定会有业务需要这个单元,比如说买家在这个单元下了一笔定单,而其他业务有可能也是需要这笔数据,否则可能操作不了,所以需要同步该数据。所以怎样确保每个单元之间的商品、卖家的数据是一致的,然后买家数据中心和单元是一致的,这是非常关键的。

 

posted on 2015-05-11 16:33  林枫水湾湾  阅读(895)  评论(0编辑  收藏  举报

导航