用技術解讀三國——大宴銅雀臺

640?wx_fmt=gif

小說連載系列是我第一次嘗試的新的技術講解方式,希望通過小說的形式將技術細節講解清楚。

第二篇中長篇連載小說《新三國外傳》,主要講解一些架構、新技術以及程序員工作中的一些軼事,希望大家能夠喜歡。

歡迎大家轉發文章,謝謝!


前情回顧

用技術解讀三國——遊說東吳

用技術解讀三國——獻連環計

用技術解讀三國——赤壁之戰

曹操自從赤壁之戰大敗之後,一蹶不振,本來的絕對優勢變成了天下三分的局勢。

曹操有個習慣,每次吃了敗戰,都要面壁思過一段時間。吃了這麼大一個敗戰,曹操已經面壁思過了一年時間。

覆盤

一年後的今天,曹操準備好ppt,想着召集衆將士們一起復盤。

曹操:“一年,一年了,我沒有發動過戰爭,就是因爲赤壁之戰對我的打擊太大。”

衆將士不語。

曹操:“若郭奉孝在,不使我至此啊!”

郭奉孝名郭嘉,是曹操軍中第零大謀士,可惜天天996,身體不好,赤壁之戰前就病逝了。

衆謀士聽聞,都羞愧難當。

曹操:“你們誰能說說,赤壁之戰失敗的根因是什麼?”

謀士荀彧先發言:“依我看都怪那龐統,獻個什麼連環計,把我們系統改得亂七八糟,耦合太嚴重,才導致一個模塊掛了,整個系統都掛了。”

曹操:“龐統何在?”

程昱:“龐統早已離職。”

曹操恨那龐統也是恨得牙癢癢,這種low逼謀士,技術渣,上來胡亂在系統裏寫些垃圾代碼,把系統搞臭了就離職。

但是回頭想想,也是自己先同意了讓龐統去做改造,自己也有不可推卸的責任。

曹操:“還有其他原因嗎?”

武將張遼也發言:“我們系統要縮擴容非常麻煩,要手動重裝系統,再裝環境。”

曹操:“其他人不也一樣嗎?”

荀彧:“非也,我聽說那周瑜,用的是什麼docker,系統縮擴容半分鐘就完成了,所以才導致我東北45度火力模塊瞬間被集火掛掉。”

曹操一聽,原來還有這段戰況,開始後悔自己不應該盲目自信,坐在監控室裏喝酒,他把那繡到一半的十字繡扔進了垃圾桶:“以後我再也不繡了。”

曹操:“我也來說說我這一年來的反思,以前我太關注系統功能實現,根本沒考慮系統穩定性和容災能力,才導致那龐統鑽了空子。”

這時坐下一人大喜:“時機已到!”

他站起身來:“主公所言極是,且問主公準備如何改進?”

司馬懿

站起來這位不是別人,正是曹營第一大謀士,與那郭嘉齊名的司馬懿。

曹操:“這也是我犯愁的地方啊,用統一語言重寫系統,要兩年時間,不重寫,系統之間通過RPC調用,耦合又太嚴重了,穩定性和容災能力太差。”

司馬懿:“其實這分佈式系統,模塊之間的調用都是通過RPC,只是要考慮的東西更加複雜,比如網絡不通,負載均衡,限流降級,服務發現等等。”

程昱一聽就潑冷水:“我前段時間也在看分佈式系統,確實要考慮這些新問題,但是我們現在有五種語言寫的模塊,你每個語言都去實現這些能力,我估計你兩年都寫不完。”

司馬懿:“這些能力確實是每個模塊都需要,但是我並沒有說要讓每種語言都去實現這些能力。”

程昱疑惑不解:“你不實現怎麼能擁有這些能力?”

ServiceMesh

司馬懿:“你可聽說過ServiceMesh?”

程昱:“沒聽說過,這是什麼東西?”

司馬懿:“ServiceMesh是一種與應用一起部署的輕量級的分佈式網絡代理。”

程昱:“別整玄乎的概念,你就說說它怎麼解決我們現在的問題?”

司馬懿:“我們現在面臨的問題無非就是每個分佈式模塊,都要實現限流降級,服務發現等一系列容災功能,這樣一來對系統改造成本太大。”

640?wx_fmt=jpeg

司馬懿:“而ServiceMesh提出一種邊車模式(sidecar)應用相互之間不直接通信,而是和自己的邊車通信,通過邊車來實現限流降級,服務發現等一系列容災措施,這樣,應用的改造成本將非常小。”

640?wx_fmt=jpeg

程昱:“那邊車是如何實現這些功能的?”

司馬懿哈哈大笑:“並不是邊車實現了這些功能,你且聽我慢慢道來。”

司馬懿:“ServiceMesh是由控制平面(Control plane)和數據平面(Data plane)組成,其中Control plane中可以定義服務發現、路由、流量控制等策略,而Data plane負責sidecar之間的通信和執行這些策略。

640?wx_fmt=png

司馬懿:你看上圖,淺藍色部分代表咱們現在各個語言的業務模塊,灰色部分代表邊車(sidecar),你可以看到,業務模塊只和自己的邊車通信,而真正實現相互之間通信的是邊車

640?wx_fmt=png

司馬懿:咱們把業務模塊拿掉,你看上圖,這些邊車就組成了一張網絡,這就是ServiceMesh(服務網格)名稱的由來,而這些邊車組成的網絡,就是數據平面

640?wx_fmt=png

司馬懿:在這數據平面之上,還有一個控制平面,面向用戶,讓用戶來定義各種策略。數據平面則根據這些策略去執行相應的邏輯,比如實現限流降級、服務發現等功能。

程昱:“哦,我明白了,這倒是一種方法。那麼實現ServiceMesh需要多長時間呢?”

司馬懿:“不用自己造輪子了,現在已經有一些現成的方案,比如istio。”

曹操一聽大喜:“行,就按照你說的來改造,但是這次改造完成,我們要執行嚴格的災難測試。”

司馬懿將代碼回滾到龐統來之前,然後改造系統,把系統搭在了k8s之上,用上了istio,整個系統改造花了不到半年時間。

測試

系統改造完畢,曹操安排了張遼對系統進行災難測試,主要就是把一些模塊搞掛。而那ServiceMesh+k8s搭載的系統,已經完全能夠承受這種級別的災難了。

曹操看到測試結果以後大喜,在銅雀臺擺上了酒席宴請衆將士。

曹操:“來,把甄姬叫來給大家跳個舞。”

衆將士都沉浸在甄姬美妙的舞蹈當中,而曹操心裏卻已經盤算着如何滅掉孫劉。


是的,講了這麼多主要想說說ServiceMesh,寫了4篇連載,這個小故事到這裏就結束了。敬請期待下一個新故事。

關注我

每天進步一點點

640?wx_fmt=png

點贊是最大的支持 640?wx_fmt=gif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章