資安

廣州地鐵——1個優美的 Serverless Web 系統

web 本質是一種流量,一種數據的流轉。當前的 web 只是 Serverless 的一種特例(存活期很長的 Serverless )。如果從這個角度上看,其實廣州地鐵是一個很優美的 Serverless 系統。

高效率的web,本質是一種希望數據的流轉儘可能快(TPS越高越好),這跟廣州的地鐵的設計理念是不謀而合的。我之前在知乎上說過,廣州地鐵本質上是一個排水系統 ,他設計的目的不是把你運送到目的地,而是希望你儘快離站。所以現在就算你進站後再出站,也要收費(以前有一段時間我記得不用)。

回到本題。 Serverless 是一種存活期相對較短的設計。比如廣州地鐵的存活期一般是日間,到了夜間設備要進行維護。我們把整個問題簡單化,只取一號線來講。假設平時只運行 3~50 輛車。那麼低峰期應該只運行3輛車(降低成本),高峰期應該在確保安全的前提下,把運營效率儘可能提高(增加班次)。而到了晚上,眾鳥歸巢。運行實例為0。

Serverless 的優勢

減少成本:每一個站臺只需要少量的廣州地鐵人員,就能撐起一個站點。地鐵工作人員無需關注底層系統(地鐵)的運維。他們只需要在調度室吹空調,按按這個按按那個按鈕就行。

快速創新:以前廣州地鐵需要人工買票什麼的,現在支持銀聯卡,NFC,微信,支付寶計費。

按需使用、靈活彈性:業務可以根據配置的條件靈活調配資源,它會在夜間睡覺(運行實例為0),在低峰期低開(運行實例為3),在高峰期高開(運行實例50),在超高峰期限流,從而實現資源的最大化利用與運營成本的壓縮。

廣州地鐵其實是一種實時數據流處理

從乘客角度,搭地鐵本質上是一種數據庫事務。
持久性(Durability)是妹子要麼上車,要麼不決定搭地鐵;
一致性(Consistency)是指妹子上車下車會按照她的期望值,如果她下錯站了,說明了她沒有實現一致性;
隔離性(Isolation)是指妹子懶得理你;
持久性(Durability)是指妹子上車這一行為有地鐵系統作證(上下車買票的憑證)。

而從地鐵角度,整個廣州地鐵其實是實現了分佈式事務的一套實時數據流處理系統。

廣州地鐵2020

前端常駐,後端動態高效伸縮容

我們會發現,那些固定設施都固定在那裡的。基礎設施是一種“前端”。而地鐵列車是一種“後端”。

因為廣州地鐵事關人命,所以在伸縮容方面採取的策略是根據過往數據預測未來。而伸縮容目前是用人工方式解決。

這一點也是一種提醒。我們在設計 web 系統的時候通常分前後端。如果按照 Serverless 角度來重新思考這個問題。那麼應該讓前端資源常駐(前端只是一些簡單的靜態文件,佔用服務器資源很少),而讓後端動態伸縮。這樣就不會影響用戶體驗。

流量切分

高峰期廣州地鐵的運營人員會設置各個柵欄。超高峰期會飛站或者拒絕乘客搭乘。從而實現數據的安全(乘客的安全)。

計量能力

根據乘客的搭乘距離計費。而站臺距離本質上是時間。可以說使用時間越長,費用越高。

後端的單一職責

基本上廣州地鐵是偏向於人運,而不是貨運。每次我要搬家的時候,搭廣州地鐵總是相對比較麻煩。因為一開始我也說了,廣州地鐵的設計理念就是一個排水系統。如果變成貨運的話,運營效率會大幅度降低。

所以,我們在設計 Serverless 後端微服務的時候,也要記住這一點。儘可能讓後端微服務的職責儘可能小,小到甚至不需要微服務發現系統。舉個例子,xx網盤通過 Serverless 服務處理瞬時的視頻轉碼請求。

結論

廣州地鐵其實是一個運營很高效的 Serverless 系統。它總結了過萬數十年的人流量數據,高效運營的同時保證乘客的安全(數據安全)。

Leave a Reply

Your email address will not be published. Required fields are marked *