微服務把我坑了!
技術總監張大胖在朋友圈看到一篇文章,講的是Netflix的微服務實踐。
研究了一會兒以后,他不由地拍案叫絕:每個服務都是一個組件,可以
1. 獨立開發
2. 獨立部署
3. 獨立伸縮
人家Netflix居然可以在生產環境隨意地停掉微服務測試穩定性,這真的把張大胖鎮住了!
張大胖上網搜索一番,發現網上已經有很多文章了,很多公司已經開始使用微服務了,輸出了很多最佳實踐,自己還不知道,太落伍了,這絕不能容忍!
他馬上召集部門開會,商量微服務改造事宜。
技術狂熱粉小王率先發言:“現在支持微服務的有很多框架,比如SpringCloud , Dubbo等, 張總可以選擇一下!”
張大胖找到了支持者,向小王投去了贊許的目光。
愛思考的小李說到:“張總, 我們維護的是一個企業內部系統,好像也不太復雜啊,需要改造成微服務嗎?”
張大胖反問:“怎么不需要?微服務是未來業界的趨勢,不順勢而為就會被時代拋棄。以后你沒做過微服務,出門好意思給別人打招呼嗎?!”
沒人說話了。
張大胖又補充一句:“每個服務都是獨立的,大家可以用自己喜歡的編程語言去開發啊!”
這句話太有殺傷力了, 各個開發人員浮想聯翩:
小李:“嗯,我要試一下Go”
小王:“我正在學JavaScript,可以搞下Node.js”
小劉:“趁此機會練習下Python”
看到大家臉上的表情,張大胖心中暗喜, 他講了一下自己選擇的RPC框架,支持服務發現,負載均衡、網關、故障轉移等各種功能。
然后他帶著大家把現有系統做了劃分,拆分成12個微服務,它們之間通過REST API調用。
微服務改造之路正式開啟!
第一周:
小李:“張總,現在配置個本地環境可真是麻煩啊,我負責的服務依賴其他五個服務,沒法本地運行啊。”
張大胖:“嗯,這我事先倒是沒想到,我看到大家都在用docker,要不我們也把微服務都形成docker鏡像?這樣每個人都可以在本地運行整個環境了。”
小李:“這能行嗎?我的機器性能差,這么多微服務跑不起來吧?”
張大胖:“沒事, 我申請經費,每人一臺高性能電腦!”
第二周:
小王:“張總,你看我們每個微服務對應一個自己的數據庫,原來的事務做不了了。”
張大胖大吃一驚,怎么把這一茬給忽略了!他知道分布式事務,兩階段提交,三階段提交, 但是性能差,穩定性不好,上網搜鎖了一下,發現了TCC,但是對業務的侵入性強,最后確定用“最終一致性”這么一個寶貝,發給了小王。
小王看完后說到:“張總,這還得實現重試和冪等性啊,真是麻煩啊。”
張大胖拍拍小王的肩膀:“小伙子,要有開放的心態,這是多么好的學習機會啊?”
第三周:
小梁:“張總,這么多微服務,我為了定位一個問題,花了一個上午的時間,一個服務一個服務地查找,累死個人啊。”
張大胖很無奈,搜出一個“鏈路跟蹤”的開源解決方案Zipkin,扔給小梁去實施。
看著密密麻麻的配置,小梁覺得很崩潰。
第四周:
小蔡:“張總,這日志文件都分布在不同的機器上,查看起來太麻煩了。”
張大胖找到一個“ELK日志分析”的解決方案,扔給小蔡去實施。
第五周:
小劉:“張總,小梁改了微服務的接口,增加了一個參數,他沒給其他人說, 我們的微服務都沒法運行了!”
張大胖說:“小梁怎么能這么做呢?”
小劉:“原來在一個工程中,在編譯階段就能發現接口的不匹配,現在都是靠文檔約定的接口,發現問題就晚了。”
張大胖搜出一個“契約測試”,發到群里:“以后的服務改動,必須得通過契約測試!”
第六周:
小李:“張總,我們這12個微服務,每個服務部署3個實例,我昨天熬了一宿,才手工部署完成,必須得自動化了,要不咱們也來一套k8s?”
張大胖拍拍小李的肩膀:“小伙子挺有想法,微服務可不就得搭配k8s嗎,搞起來!”
經過幾個月的996的開發,微服務改造過的系統隆重上線,各種新技術在其中閃閃發亮:服務發現,負載均衡、網關、故障轉移,最終一致性,鏈路跟蹤,日志分析,契約測試,docker, k8s......
張大胖心滿意足。
CEO把張大胖叫進了辦公室。
CEO:“張大胖,你說搞系統改造,我還給你批了資金,現在系統怎么越來越慢了?”
張大胖:“老板您有所不知,我們的系統現在變成分布式的了,分布式系統要略微慢些。”
CEO:“我就問你,我就想看看這個報表,為什么半天都出不來結果?”
張大胖:“因為我們現在是微服務架構,這涉及到多個服務調用!我們實現了網關,負載均衡,故障恢復等很多高級的功能,不信您看,每個服務有3個實例,我把任意一個殺掉, 系統就會自動啟動一個新的, 和Netflix一樣..... ”
CEO 怒了:“你瘋了嗎?我們這個是內部應用,公司一共才幾百人,你瞎搞啥負載均衡,故障轉移!”
第二天, 張大胖被開除了。
張大胖離開之前對組員說:“唉,沒辦法,領導們只關注業務,不關注技術的發展趨勢,我要走了,大家以后好自為之吧。”
小李嘀咕道:“這技術不就是為業務服務的嗎?微服務看起來很美,但是根本不適合我們。”
小王說:“張總,別聽小李瞎說,我們學會了微服務,簡歷中也有干貨了。”
張大胖心中一亮, 回去趕緊修改簡歷,加上了這么一條:
領導了單體項目向微服務的遷移,精通微服務的架構設計,部署,監控。
后記:
寫這一篇小品文,是想說明一個道理:不能“手里拿著一個錘子,眼中看到的全是釘子”,微服務雖好,也有適用的范圍, 有很多項目單體應用活得好好的,根本沒有拆分的必要,盲目追風,反而得不償失。
【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】