服务器异地多活怎么做?从冷备到多活架构核心指南

阿木 发布于 14 小时前 4 次阅读


有时候想想挺可怕的。

双十一的那一刻,好几千万人冲进来,你进行的每一回点击,所完成的每一笔支付,背后皆是一场没有硝烟的战争。

赢了你拿到快递,输了……服务器就炸了。

谁也不敢拍那个按钮

以前大家怎么做?

搞个冷备。

先是处于那种连鸟儿都不会去拉屎的极为荒凉偏僻的野外之地,接着要建成一个机房,然后每天都要把数据朝着那边进行一次搬运。

听起来挺保险是吧?

但毕玄(林昊)说得特实在,特戳心。

他说那玩意儿一旦真出了事儿,根本不敢切过去 。

你不敢啊!

仿佛是花了巨额银钱购置了一份保险,然而当真的身患疾病之时,却又疑虑起保险公司是否会出现跑路的情况了,如同之前所担忧的那般。

处于冷备状态的那个机房,平常的时候根本就没有数据流量流过,你究竟是怎么知道把流量切换到那儿后它到底是否能够正常启动起来的呢?

就算能起来,恢复仨小时,双十一早凉透了。

而且备份全站?

成本高得吓人 。

淘宝,天猫,聚划算,物流,云,这般情形哪里算得上是备份,分明是要再次构建一个阿里呀。

真正逼到绝路的是“挤不下了”

其实挺有意思,问起来为什么做异地多活,你以为是为了容灾?

为了安全?

不全对。

毕玄讲了一番话,那话的意思是,存在着一个最为根本的缘由,这个缘由便是,杭州所处的那个地方,实际上已然快要达到无法再容纳阿里服务器的程度了。

不只是物理空间,是整个城市的电力、网络资源,到瓶颈了。

这就很真实。

你以为是高瞻远瞩,其实是被现实逼的。

你换大房子,并非因你喜爱大房子,而是东西繁杂众多,致使原本那处实在难以容纳了。

像给飞着的飞机换引擎

潘健作比方称,异地多活的这种切换,如同给处于平流层飞行状态的波音747更换引擎。

搭客之人,即你与吾,彻底毫无感受,正在观看影片,于购物车之内进行削减与增添之操作。

但外部的技术团队,已将你从杭州的服务器,顺畅地转移至诸如上海或者深圳的服务器之上。

这要求太变态了。

变态在哪?

是数据不能错。

最怕你把钱给我弄丢了

“钱不能错”,这是红线。

毕玄再三着重表明,业务出现挂断状况是能够忍受的,大不了就是今天不进行购买了,然而要是数据出现错误,账目变得紊乱,那可就彻底没戏了。

因此,处于异地多活的情况之下,最为让人头疼不已的问题便是:要是存在两个地方均能够做数据库写入的情形,那么一旦出现写入重复或者写入冲突的状况,该听从哪一方的呢?

比如说,有种情况是,你曾于杭州对收货地址进行改过,与此同时,你妻子是在上海也为你做了收货位置的修改,那么最终到底该保存哪一个呢?

淘宝的解法是“单元化” 。

把你这个买家,永远固定在一个“单元”里。

这辈子(确切来讲是这次会话期间),一旦你进入了杭州的单元,那就别想着出去了,所有的操作都得在杭州形成的闭环当中进行,懂了吗,有标点符号呢。

这样数据就只在本地写,不会出现两地同时改你地址的惨案。

但这里又有个巨坑——卖家的数据咋整?

卖家改个价,得让全国一秒内知道

你想啊,你在杭州买东西,卖家在广东改价格。

要是那个商品数据仅仅存在于广东的机房当中,那么在你进行下单这个行为的时候,就需要跨越省份去发问:“老板,这衣服到底具体的价格是多少了呢?”。

一次交互跨省还行,但一个页面背后可能有一两百次交互 。

每次等几十毫秒,页面早转圈转到你摔手机了。

于是乎,阿里所面临的挑战在于,卖家完成价格修改之后,得在仅仅一秒的时间范围之内,将这一变动同步至全国的每一个数据中心。

一秒。

跨省。

还不能错。

当时,所有开源的方案,全都败下阵来,MySQL自身的主备同步,根本无法达成。

必须自己硬着头皮搞一套新的同步机制。

有些功能,外地没有

还有件事儿挺逗。

异地多活并不是把整个淘宝都复制一份放到别的城市。

因为太贵了,也没必要。

所以只部署了“买家核心链路” 。

就是保证你能逛、能买、能付钱。

提到那些使用频率不高的功能,或许在你所处的那个“单元”当中,它根本就不存在。

这意味着什么?

这就意味着,要是你手欠,去点了一项极为冷门的、只在杭州总站才会存在的功能,那么你有可能刹那间就被“踢”回到杭州的那个数据中心去。

这种体验上的“毛刺”,在今天看来,依然存在。

技术呈现出这般的拧巴状态,它不存在能够达到完美的情形,始终处于成本、体验以及风险之间,如同在钢丝上行走一般。

他们赌的是明天

2013年下定决心去做,2014年双十一就上了 。

两个数据中心,各扛50%流量。

说实话,这很疯狂。

因为业界没人干成过。

Google怎么做的?

不知道。

Facebook那种社交场景,数据维度又比电商简单得多 。

阿里完全是在给所有人趟路。

路趟出来了,才有了后来支付宝断光缆,业务不中断的奇迹 。

那次光缆挖断,要是搁在以前,全站都得跪。

但因为有异地多活,用户根本没感觉到疼。

写到最后突然有点感慨。

我们所瞧见的仅仅是一个下单按键,然而其背后却是有着众多的人,在为那正飞着的飞机去更替引擎,并且还要确保引擎更换完毕后,飞机上的咖啡不会洒落。

挺酷的。

也挺不容易的。