自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

赤壁之戰(zhàn),曹操大敗只因缺了Service Mesh

開發(fā) 架構 開發(fā)工具
本文作者把微服務向 Service Mesh 的進化融入到了三國故事中,妙趣橫生。故事比較長,大家慢慢看,精彩的在后邊。

本文作者把微服務向 Service Mesh 的進化融入到了三國故事中,妙趣橫生。故事比較長,大家慢慢看,精彩的在后邊。

話說曹操官渡之戰(zhàn)大獲全勝,收編了袁紹的大批將士和軍隊,有搞 Python的,有搞 JS 的,有搞 Ruby 的,有搞 C++ 的,還有搞 PHP 的,不一而足。

浩浩蕩蕩,號稱百萬大軍,正向東邊來襲。

劉備率領自己的 Java 大軍,哦不,其實也就萬人不到,一邊抵御一邊向東逃去。

劉備:“曹操大軍壓進,如何是好啊?”

諸葛亮:“主公不必多慮,我等可投奔東吳。”

劉備:“他們豈肯逆曹而收留我們?”

諸葛亮:“亮自有妙計,且聽我慢慢道來。”

諸葛亮:“東吳世代熟悉水戰(zhàn),創(chuàng)始人孫堅,一直使用 Go 語言,其兒孫策繼承父志,搞出了 Docker。現(xiàn)在孫策之弟孫權在位,我們可以說服他聯(lián)合抗曹。”

劉備:“talk is cheap,你先帶趙云去東吳游說,我們帶著軍隊隨后就到。”

01 東吳

諸葛亮來到東吳,說明了來意。

諸葛亮:“曹操正率百萬大軍向東吳進攻,目前形勢危急,我主劉備欲助東吳一起抗曹”。

張昭:“主公,萬萬不可聽信此人,曹操明明是要進攻劉備,與我東吳何干?”

諸葛亮:“此言差矣,如果我主劉備被滅,東吳離滅亡還會遠嗎?”

張昭:“你說你來幫我們一起抗曹,但是你們自己兵力微弱,被曹操打得節(jié)節(jié)敗退,又如何幫我們?”

諸葛亮:“我主自幼苦練 Java,又有關羽張飛趙云等良將,最近我又在研究微服務兵法,配合東吳 Docker 可以發(fā)揮最大的效能。”

張昭:“什么亂七八糟的,無非是想借我們的兵力而已。”

見兩人在朝堂上吵吵鬧鬧,孫權一時頭疼:“汝等暫且退下,容我三思。”

孫權回到房間,馬上下詔書讓周瑜回來。

02 周瑜

周瑜回來見過孫權:“主公,事情我都聽說了,我也是主張抗曹。”

孫權:“哦?你有把握嗎?”

周瑜:“我一直在訓練 Docker 水軍,戰(zhàn)斗力已經 Max,只是我要見那諸葛亮一見”。

說完,周瑜向諸葛亮的住處奔去。

諸葛亮早已正裝等候。

周瑜:“諸葛先生,你的好意我心領了,但是你也知道,你軍不到一萬,加上我軍也不到五萬,如何抵抗曹操百萬大軍?”

諸葛亮:“曹操百萬大軍看似很多,其實都是紙老虎。你想,曹軍大部分都是收編其他勢力,比較雜亂,什么 Python、JS、PHP、Ruby、C++,這些人在一起,相互之間無法配合,戰(zhàn)斗力要大打折扣的。”

周瑜見諸葛亮一言就說到了要害,知道此人并不簡單,決定繼續(xù)試探。

周瑜:“汝可有良策?”

諸葛亮也不虛:“不如你我各自在手心寫下計策,同時打開?”

周瑜一聽,覺得有點意思,便拿筆在手心寫下一字,諸葛亮也在手心寫下一字。寫完,兩人頭碰頭,同時打開手心。

只見兩人寫下的是同一個字,“船”!

周瑜:“我以為你會寫火。”

諸葛亮哈哈大笑:“我也以為你會寫火”。

看到了嗎,英雄的想法總是相似的,無論他們多么想與對方不一樣。

兩人徹夜長談,共同商定抗曹方案,從微服務談到服務降級,限流,最后到 Docker 部署,制定了周詳?shù)淖鲬?zhàn)計劃。

計劃制定完畢,兩人作了最后一次模擬演練,演練過程中,這二人竟然有一種惺惺相惜的感覺。

天亮了,周瑜離開了諸葛亮的住處,路上,他心思極重:“諸葛亮真乃曠世奇才,可惜和我各事其主,此人必不可久留。”

話分兩頭說,曹操這邊倒是正在發(fā)愁。

03 曹營

曹操:“我雖有百萬大軍,但是大部分是北方人士,到這東吳水土不服,特別是在水上作戰(zhàn),不像在陸地這般平穩(wěn),大批將士一到水上就腦袋發(fā)暈,這可如何是好呀?”

謀士荀彧率先開口:“主公所言極是,依我看來,咱們的部隊兵力過于分散,搞 Python 的、搞 PHP 的、搞 Ruby 的、搞 JS 的、搞 C++ 的,就像一片大海中的五個孤島一樣,無法聯(lián)合作戰(zhàn)啊。”

曹操:“愛卿所言正是我之擔憂,我擴張?zhí)?,內部尚未磨合好,?zhàn)斗力怕是要打些折扣啊。汝等有何良策?”

謀士程昱說道:“主公可聽說過萬能的重寫?”

曹操:“這是何意?”

程昱:“我們可以選擇一種語言,比如 PHP,將其他語言實現(xiàn)的系統(tǒng)全部用這種語言重寫一遍。這樣大家都用一種語言,相互之間能夠緊密配合。”

曹操:“這需要多長時間才能完成?”

程昱:“大概需要兩年時間。”

曹操:“這可不行啊,兵貴神速,等上兩年時間,那劉備和孫權都不知道能發(fā)展成什么樣了。”

正在這時,曹營中一個聲音說道:“我有一計,可以不用重寫系統(tǒng)。”

①龐統(tǒng)

曹操尋聲望去,只見坐下一人,樣貌極丑,卻一副胸有成竹的樣子。

曹操:“哦?你說說看!”

龐統(tǒng)上前說到:“主公可聽說過 RPC?”

曹操:“RPC?什么東西?”

龐統(tǒng):“就是遠程過程調用的意思,雖然每個系統(tǒng)實現(xiàn)的語言不一樣,但是只要遵循某種協(xié)議對外提供接口,比如都對外提供 HTTP 的接口,它們便可以相互調用。”

曹操:“這樣就不用重寫系統(tǒng)?來,你來給我詳細說說。”

龐統(tǒng):“比如那用 Ruby 寫的系統(tǒng),將自身能夠提供的服務用 HTTP 接口封裝一層,用 PHP 寫的系統(tǒng)只需要發(fā)起一個 HTTP 的請求,便可以調用那 Ruby 系統(tǒng)提供的服務了。”

曹操:“嗯,明白了,這樣改造需要多長時間?”

龐統(tǒng):“因為不用重寫,業(yè)務代碼也不用大改,只需要用 HTTP 將某些服務包裝,不出一周便能完成。”

曹操一聽大喜:“行,就按照你的方案來,你來實施吧。”

龐統(tǒng)帶領曹操的將士們對系統(tǒng)進行了改造,讓原本割裂的五個不同語言的系統(tǒng)相互依賴,全部連了起來,完美地實現(xiàn)了曹操所需要的所有功能。

改罷,龐統(tǒng)暗自欣喜:“連環(huán)計已經完成,我現(xiàn)在該趕緊逃離曹營了。”

龐統(tǒng)想要坐筏渡江,只聽后面有人拍了他的肩膀:“汝獻此計策,不怕項上人頭不保嗎?”

②徐庶

龐統(tǒng)一聽計策被識破,大驚失色,回頭一看,原來是徐庶,提到嗓子眼的心又放了下來:“哎呀,元直兄,你這樣嚇人可不好啊,我心臟病都快被你嚇出來了。”

這徐庶正是向劉備間接推薦諸葛亮之人,只是母親被曹操控制,不得已而在曹營,發(fā)誓終生不為曹操獻一計。

徐庶:“基于遠程調用的分布式系統(tǒng),我很早就在研究,這里面的復雜度可是單機程序所不能比擬的。”

龐統(tǒng):“哦?愿聞其詳。”

徐庶:“首先你要考慮被調用方掛了怎么辦,要做限流和降級方案,還要考慮調用的負載均衡問題,還有服務的自動注冊和發(fā)現(xiàn),要有注冊中心。你現(xiàn)在只是帶領將士們實現(xiàn)了功能,根本沒有考慮系統(tǒng)的穩(wěn)定性和容災情況,這不是把曹操往火坑里推?”

龐統(tǒng)一聽哈哈大笑:“不愧是元直兄,不過老板們只要實現(xiàn)功能就行,誰會管什么容災和穩(wěn)定性?”

徐庶:“看來曹操天數(shù)將盡,你走吧,就當沒見過我。”

龐統(tǒng)坐上竹筏往東吳而去。

04 開戰(zhàn)

月黑風高,長江上的浪花拍打著兩岸,發(fā)出巨大的聲響。江岸兩邊,曹操與周瑜隔江相對。就在今晚,曹操向孫劉發(fā)起了總攻,而周瑜也早已做好了戰(zhàn)斗準備。

不遠處,諸葛亮登上了七星臺,與周瑜遙相呼應,相互配合。

曹操一聲令下:“全軍出擊”。

百萬大軍駕駛著一艘戰(zhàn)艦,朝周瑜這邊駛來。

而那周瑜,只有區(qū)區(qū)十幾艘小船,與那戰(zhàn)艦一比,就像螞蟻和大象。

曹操巨大的戰(zhàn)艦向周瑜發(fā)動著猛烈的攻擊。而那周瑜卻不慌不忙,一面命令將士們頂住火力,另一面,暗中觀察曹操那巨型戰(zhàn)艦的火力分布。

他在尋找系統(tǒng)弱點。

突然,他發(fā)現(xiàn)曹操戰(zhàn)艦的東北 45 度角火力有點慢,不像其他地方那么猛烈,一個火力開回比其他地方慢了 50ms。

是的,就是這轉瞬即逝的 50ms,也瞞不過天才都督周瑜,他一聲令下:“集火。”

由于周瑜的系統(tǒng)是基于微服務設計的,每個微服務都可以獨立縮擴容。而系統(tǒng)又是用 Docker 部署。

周瑜軍隊需要做的就是將其他系統(tǒng)的 Docker 容器關閉,然后啟動進攻東北 45 度的 Docker 容器。

兩條命令,整個過程不超過半分鐘。

05 逆轉

半分鐘后,周瑜軍隊完成了集火的操作,曹操戰(zhàn)艦的東北 45 度火力模塊突然遭受了巨大流量火力沖擊,瞬間掛掉了。

這一掛不要緊,關鍵是系統(tǒng)其他模塊都依賴于這個東北 45 度火力模塊,結果很多模塊都無法正常工作了,整艘戰(zhàn)艦,只有很少的幾個點還能輸出,其他火力全都啞了。

那東北 45 度區(qū)是用 Python 寫的,負責他的人正是曹軍大將張遼。

張遼一看模塊掛了,趕緊下令:“重啟!重啟這個模塊!”

但是重啟了之后,這個模塊依然扛不住周瑜全軍的火力,起來又掛了。

張遼:“不行了,必須要擴容,西北 45 度區(qū)夏侯敦那邊沒有火力,趕緊去那邊調十臺機器來擴容。”

那西北 45 度區(qū)是用 NodeJS 寫的,首領夏侯敦收到張遼的救援請求,馬上調撥了十臺機器給張遼。

但是要在這新的十臺機器上部署 Python 模塊談何容易,張遼部隊全部上了,都在手動部署,裝 Python 環(huán)境,設置環(huán)境變量,拷貝代碼,設置配置文件,這一套流程下來,十幾分鐘過去了。

結果要啟動的時候,報錯,Python 依賴的一個系統(tǒng)庫與之前 NodeJS 用的一個系統(tǒng)庫沖突。

這下張遼是真的慌了:“重裝,趕緊重裝系統(tǒng)!”

嗯,整艘戰(zhàn)艦的人都等著張遼在這重裝系統(tǒng),然后再裝 Python 環(huán)境,設置環(huán)境變量,拷貝代碼,設置配置文件。

06 曹操

曹操覺得此次勝利在握,正在戰(zhàn)艦的監(jiān)控室里一邊喝酒,一邊繡著十字繡。只見快一個小時了,十字繡已經繡了一半,還沒有傳來勝利的消息,便問身邊人:“怎么還沒有滅了周瑜?”

那身邊人也是個欺上瞞下的主:“主公不必驚慌,咱們系統(tǒng)有一個小模塊出了點問題,應該沒有大礙。”

曹操:“我系統(tǒng)大大小小幾十個模塊,一個模塊出問題算什么?”

他哪里知道,自己的系統(tǒng)早已被龐統(tǒng)全部連了起來,由于級聯(lián)的效應,一個模塊掛掉,已經足矣讓整個系統(tǒng) 80% 功能不可用。

07 破曹

張遼這邊還在重裝系統(tǒng),周瑜的火力已經透過那東北 45 度火力模塊打到了系統(tǒng)緩存層,緩存層很快出現(xiàn)了熱點,一下子戰(zhàn)艦著起了火,緩存層很快被擊穿了,火力到達了數(shù)據(jù)庫,數(shù)據(jù)庫瞬間掛掉了。

張遼見情勢不妙,趕緊連滾帶爬去監(jiān)控室里找曹操,只見曹操還在那優(yōu)哉游哉喝著小酒,繡著十字繡。

張遼大喊:“主公,求求你別繡了。周瑜的火力已經打過來了,趕緊從后門逃走吧。”

曹操一開始還不相信,但見那火勢很快燒到了監(jiān)控室,自己只能帶著將士們連滾帶爬逃出戰(zhàn)艦,朝那華容小道逃去。

周瑜登上曹操的戰(zhàn)艦,沒有尋得曹操,將士們都準備追擊,周瑜卻不慌不忙:“別忙著追那曹操,你們趕緊去那七星臺,把諸葛亮先給我軟禁起來。”

將士們來到七星臺,只見臺上早已空無一人,諸葛亮已經離開了東吳。

赤壁之戰(zhàn)驚天大逆轉,微服務加 Docker 戰(zhàn)勝了耦合嚴重的曹軍戰(zhàn)艦,曹操會這樣善罷甘休嗎?

08 復盤

曹操自從赤壁之戰(zhàn)大敗之后,一蹶不振,本來的絕對優(yōu)勢變成了天下三分的局勢。

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

一年后的今天,曹操準備好 PPT,想著召集眾將士們一起復盤。

曹操:“一年,一年了,我沒有發(fā)動過戰(zhàn)爭,就是因為赤壁之戰(zhàn)對我的打擊太大。”

眾將士不語。

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

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

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

曹操:“你們誰能說說,赤壁之戰(zhàn)失敗的根因是什么?”

謀士荀彧先發(fā)言:“依我看都怪那龐統(tǒng),獻個什么連環(huán)計,把我們系統(tǒng)改得亂七八糟,沒有考慮穩(wěn)定性和容災情況,才導致一個模塊掛了,整個系統(tǒng)都掛了。”

曹操:“龐統(tǒng)何在?”

程昱:“龐統(tǒng)早已離職。”

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

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

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

武將張遼也發(fā)言:“我們系統(tǒng)要縮擴容非常麻煩,要手動重裝系統(tǒng),再裝環(huán)境。”

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

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

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

曹操:“我這一年來一直在反思,龐統(tǒng)那廝提出把系統(tǒng)改成分布式,用 RPC 互相調用,這并沒有什么錯,只是沒考慮系統(tǒng)穩(wěn)定性和容災能力,例如網絡不通,負載均衡,限流降級,服務發(fā)現(xiàn)等等才致此大敗。我也有個疑問,為什么孫劉那邊把容災做得這么好呢!”

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

他站起身來:“這主要是因為劉備那里用的是 Java,有很多'限流降級','服務發(fā)現(xiàn)'的系統(tǒng)可以直接使用。比如著名的 Hystrix。”

09 司馬懿

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

曹操:“那我們也可以拿過來用啊!”

司馬懿:“主公,現(xiàn)在是不可能的,因為這些工具和 Library 很多都是用 Java 語言寫的,和微服務密切綁定。”

司馬懿一邊說一邊展示了一張圖:

曹操立刻明白了:“這些微服務所依賴的庫實際上和服務本身有了深度綁定,而我們有五種語言,每個語言都去實現(xiàn)一遍同樣的工具和庫,不但需要兩三年時間,還是巨大的重復和浪費啊!”

司馬懿道:“這些能力確實是每個服務都需要,但是并不需要每種語言都去實現(xiàn)這些能力。”

曹操和眾臣表示不解。

司馬懿開始放大招:“我們需要一個思維的升級,大家想想,這些微服務系統(tǒng)需要的特性其實是公共的,為什么不能把這些公共的特性做到底層平臺中呢?想想看,我們做一個 HTTP 調用并不需要理解 TCP 的細節(jié),那里邊可是有流量控制,失敗重傳啊。”

荀彧恍然大悟:“軟件業(yè)的所有問題果然是可以通過增加一個中間層來解決啊!”

曹操瞪了荀彧他一眼,這種總結的臺詞通常都是我來說的。

不過曹操老謀深算:“你能修改網絡協(xié)議棧,來增加一個層來實現(xiàn)這些限流降級和服務發(fā)現(xiàn)的功能嗎?”

司馬懿道:“主公明鑒,確實不能,所以我們得改用代理的模式,服務本身不直接連接到其他的服務,而是將所有的流量導送到一個小的代理,由代理來實現(xiàn)需要的特性。這個代理是通用的,所以我們可以用各種語言寫微服務了。”

注:這個代理被稱為 Sidecar,即邊車,摩托車旁邊的那個座位

10 Service Mesh

司馬懿:“我們的微服務都可以使用這種模式,這樣就組成了一個網格,就是 Service Mesh。”

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

程昱:“哦,我明白了,這倒是一種方法。那么實現(xiàn) Service Mesh 需要多長時間呢?”

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

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

司馬懿將代碼回滾到龐統(tǒng)來之前,然后改造系統(tǒng),把系統(tǒng)搭在了 K8S 之上,用上了 Istio,整個系統(tǒng)改造花了不到半年時間。

11 測試

系統(tǒng)改造完畢,曹操安排了張遼對系統(tǒng)進行災難測試,主要就是把一些模塊搞掛。

而那 Service Mesh+K8S 搭載的系統(tǒng),已經完全能夠承受這種級別的災難了。

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

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

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

參考文章:

https://philcalcado.com/2017/08/03/pattern_service_mesh.html

 

責任編輯:武曉燕 來源: 互聯(lián)網偵察
相關推薦

2020-10-29 07:17:37

雪崩系統(tǒng)服務

2021-12-08 17:54:55

架構控制平面

2022-08-21 07:17:16

LinkerdKubernetes服務網格

2021-07-27 14:25:10

零信任/IBM安全/

2021-11-08 09:11:17

云計算Service Mes云應用

2020-03-04 09:27:13

Service Mes微服務架構

2022-07-15 09:20:17

性能優(yōu)化方案

2021-02-22 17:00:31

Service Mes微服務開發(fā)

2021-12-10 18:19:14

授權 Linkerd策略

2021-12-11 22:21:00

服務配置文件

2021-06-30 13:26:07

Service MesHTTP協(xié)議 Oitsi

2020-07-28 08:20:06

Service Mes容器化云原生

2022-01-27 22:33:35

配置容器穩(wěn)定性

2021-10-14 18:21:52

架構IstioService

2022-05-13 07:22:39

攜程微服務SOA

2021-04-25 21:24:02

數(shù)字化技術人工智能

2021-10-31 20:56:25

Mesh ServiceAPI

2021-06-08 07:04:45

Service Mes微服務熔斷

2022-04-07 16:35:59

PGO 優(yōu)化profile 數(shù)據(jù)編譯優(yōu)化

2013-07-10 10:40:18

點贊
收藏

51CTO技術棧公眾號