专业书籍精读 · SRE · 第 19 章

前端负载均衡

Site Reliability Engineering · Ch 19 · Google · 2016

EN →

这一章讲什么?

你在手机上点开一个全球网站——邮箱、视频、跨国电商——这个请求最后落在某台机器上。凭什么是那一台?Google SRE 这本书的第 19 章讲的就是这件事:在请求还没进机房之前,流量是怎么被分派的。它不是「在机房前面摆一台设备」那么简单,而是三层各管一段的接力。

打个比方

把它想成一家全球连锁餐厅。你要吃上饭,得走三步:① 先问路——「离我最近的门店在哪」;② 按导航过去,路上的岔路口决定你最终进了哪家店;③ 进门后,迎宾把你分到某张桌子。三步各自对应一层机制,而每一步能知道的信息、能反应的速度都不一样,所以谁都替不了谁。

问路这一步有个怪事

你以为你在问餐厅总部,其实你问的是小区门口的「问路大爷」——你的手机并不直接问网站,而是委托一个中间人去问。于是总部只知道大爷站在哪儿,不知道你站在哪儿;大爷可能在两百公里外,你就被指去了一家远门店。

更麻烦的是,大爷会把答案记在小本子上,下次照着念。所以总部想临时关掉一家店,得等所有大爷的本子过期——这一层反应慢,慢到没法用来救急。

三招破解

第一招,让大爷替你报个大概位置:他去问路时顺口加一句「我是替住城东那片的人问的」,总部就能指得准些。代价是大爷的本子得按片区分开记,本子变厚。

第二招,让一个门牌号在很多城市同时有效:全世界用同一个地址,路网自己把你送到最近那家。好处是不用问路也能就近,还能一撤了之;坏处是这个「近」按路网算,不一定真快,而且你走到半路万一路网改道、把你甩到另一座城市的同名门店,你刚点的单就作废了。

第三招,进门分桌子要「算」不要「记」:门口不止一个迎宾。如果靠账本记「谁坐哪桌」,换个迎宾接手就断了;改成按你的名字算出一张固定的桌子——不管谁接待你,算出来都是同一张。这样迎宾之间不用对账,坏掉一个也不影响。还有个配套动作:上菜别绕回迎宾台,后厨直接端到你桌上。因为端出去的菜,比你报的那句菜名重得多。

该怎么选

粗的事交给问路(按大区分流),细的事交给门口(真正挑机器)。诚实的代价:按名字算座位省掉了记账,可门店真的增开或关掉一家时,还是会有一小批人的位子被重算、手上那一顿被打断。

一句话记住

流量分派是三层接力:问路那层(DNS)只能粗、慢地按大区指方向,路网那层按「近」把你送进某个机房,真正挑机器的是机房门口那层——而它的诀窍是靠算不靠记,并且让回程绕开自己。

想进到具体机制、记号和示意图? → 切到精读版