多年來,我們一直被灌輸「微服務是未來」。
「把所有東西拆分成小型獨立服務,」他們說,「讓團隊獨立擴展,部署更快,行動更敏捷。」
但最近出現了奇怪的現象。那些已經遷移到微服務的團隊,現在正重新回歸單體架構。
這不僅是小創業公司的選擇——亞馬遜、阿里、Basecamp、騰訊甚至谷歌都在這樣做。
是的。這些曾經引領微服務潮流的先驅們正在悄悄承認:
「我們當初走得太遠了。」
先別急著下結論,微服務的理念確實很有吸引力。它原本的設想是:
但真用起來,很多團隊發現事情沒那麼簡單。實際遇到的可能是:
如果你是過來人,估計已經對著電腦嘆過氣:「說好的便利呢?怎麼越搞越複雜了?」
假設你要構建一個電商系統。
用微服務架構可能會這樣拆分:
認證服務
商品目錄服務
購物車服務
訂單服務
通知服務
看起來很酷對吧?
但接下來...
然後呢?
你想開發的那個「簡單」功能現在需要修改5個服務,提交3個PR,獲得2個團隊的批准。
想像你在開發一個網上商店系統
採用微服務架構通常會把這些功能分開:
表面上看這樣分工很合理
但實際工作時你會發現:
更麻煩的是:
當你需要新增一個普通功能時,可能要改動5個模塊,提交多個修改申請,還得等不同團隊審批。
你可能不知道的是:
微服務並沒有真正簡化系統——它們只是把難題轉移到了其他地方
當所有功能都打包在一個大應用中時:
採用微服務後:
經驗豐富的工程師都會告訴你:
管理50個分散的小服務,要比維護一個規劃完善的大程式困難得多。
簡單就是好。整體式系統(單體架構)之所以重新流行,不是因為它「容易做」,而是因為它「結構清楚」。
在一個整體系統裡:
現在的工具(比如Go、Rust等新語言)和部署方式(如容器化)已經讓整體系統也能很好地處理大量用戶訪問了。
來看看這些知名公司的實際選擇:
就連最早採用微服務的亞馬遜也承認:這種架構方式要真正起作用,必須首先解決大量其他問題。
現在很多公司都在嘗試這種方式。
它是這樣工作的:
這樣你既能保持:
✔ 各功能分工明確
✔ 不必擔心跨服務通信問題
✔ 避免了複雜的部署流程
如果你用Java語言開發,可以這樣組織代碼結構:
/cart # 購物車功能
/order # 訂單管理
/notification #消息通知
雖然看起來像獨立模塊,但它們其實屬於同一個完整的系統,能協同工作。
不一定。微服務在特定情況下還是有它的用途:
適合考慮微服務的情況:
但如果你的情況是:
那採用單體架構可能會讓你們的開發工作更順暢高效。
技術的流行風向總是在變化。就像服裝潮流一樣,幾年前大家都推崇的「微服務」,現在人們發現它不一定適合所有情況。
重要的不是選擇最熱門的技術,而是選擇:
(好的技術方案應該像一雙合腳的鞋——穿著舒服最重要,不是最新款就一定最好)