這是一道面試題,咱們先來分析這道題考察的是什么。
如果分析面試官主要考察以下幾個方面:
技術理解深度
你是否清楚微服務架構(Microservices)和傳統單體架構(Monolithic)的本質區別。
能否從設計理念、技術實現、適用場景等維度對比兩者。
實際經驗與場景化思考
是否在項目中應用過微服務,能否結合案例說明優勢(如提升開發效率、解決擴展性問題等)。
能否辯證看待優勢(例如微服務并非銀子彈,會帶來復雜度上升)。
系統設計能力
是否理解架構選擇背后的權衡(Trade-offs),例如團隊規模、業務迭代速度對架構的影響。
技術趨勢認知
是否關注云原生、DevOps 等與微服務相關的技術生態(如 Kubernetes、Service Mesh)。
那在回答這道題的時候就需要進行適當的擴展體現這部分的能力。但是同時要注意避免面試官覺得你跑題,所以在介紹每個優勢之前可以先做一個總結性的:這個問題我會結合對技術的理解、實際經驗、技術選型決策與技術趨勢幾個方面來說。
?高內聚、低耦合?
微服務架構將一個大型應用拆分成多個小型、自治的服務,每個服務都圍繞特定的業務功能進行構建,具有高度的內聚性。各個微服務之間通過輕量級的通信機制(如RESTful API)進行交互,耦合度極低。這種特性使得每個微服務都可以獨立開發、測試、部署和運維,極大地提高了開發效率?。
在多人維護單體應用的時候,可能很多人都遇到過代碼沖突的困境。代碼沖突本質上是耦合度高的外在表現。之前一個項目中由于服務還沒有做拆分,還要一個人兼顧好幾個項目的開發,多分支切換。導致每次發布生產前要花半天的時間做沖突合并。
有次合并后有個地方沒有沖突,但是代碼邏輯是老的(和提交順序有關)。被指出來之后人家說因為沒有沖突,就不是人家的問題。這種不對結果負責的態度也就只能給個眼神過去。(實際面試時注意這種話是不能說的哦)
但是這種代碼一旦上線造成后果,那就面臨損失,服務拆分是合理的解決方案。
?獨立部署和靈活擴展?
微服務是獨立的應用,可以單獨上線或更新,不需要停掉整個系統。這種設計使得部署更靈活,降低了發布風險,并且可以根據流量壓力獨立擴展,只對流量大的服務增加資源,而不用浪費資源擴展整個系統?。
試想你有一個服務,原本上面的CURD接口有按照主鍵的增刪改查(稱為A類)和批量查詢(稱為B類)兩部分。A類可用性要求4個9。B類可用性要求2個9。這種情況下A類和B類獨立部署A類可能要求三地六中心部署,B類其實只要部署在1個機房里就滿足要求了。A類是核心業務,可以設置彈性伸縮策略,比如CPU大于80%時自動擴容,CPU持續1分鐘小于60%時自動縮容來保證可用性。而對于B類業務設置彈性伸縮策略會增加成本,必要性也不是很大。
技術多樣性?
每個服務可以選擇最適合的技術棧。例如,訂單服務可以用Java,AI服務可以用Python。這種靈活性支持技術創新,團隊可以嘗試使用新技術,而不必擔心影響其他服務?。
?按業務能力劃分服務與組織團隊?
微服務架構將應用按業務能力劃分為不同的服務,每個服務要求在對應業務領域的全棧軟件實現。這種組織方式跨功能,包含實現業務所需的全面技能,有助于提高開發效率和團隊協作?。
?服務即產品?
傳統的應用開發是基于項目模式的,而微服務架構將每個服務視為一個獨立的產品。這種模式使得服務的開發和維護更加靈活,能夠更快地響應市場變化?。
下面的這個案例,如果不是采用微服務的架構,這種演進是很難做到的:
我們團隊負責的有一個叫基礎數據的服務,這個服務連接了全公司唯一一個六機房平等的數據庫,六機房平等是指雖然寫入數據在同一個機房,但數據可以六機房平等的讀。公司的其他團隊也想使用這個數據庫,所以開始時我們承接了很多其他團隊的個性化需求,導致了團隊成員為了支撐需求,疲于奔命。接到的需求在技術上很簡單,都是一些后臺操作數據,延遲要求不高的場景,CURD操作數據庫,技術含量低,維護人員平均半年就會轉崗或離職。我來了之后,對數據模型進行了抽象,將原本要開發成一張張數據表的,統一在一張數據表里,用json格式來存儲,我們提供SDK給用戶使用,里面提供了json和POJO的轉換等工具盡量符合之前的使用習慣。用戶不用再等我們開發,而是可以在后臺配置出他們需要的數據表定義,進行數據操作。這種方式,第一我們團隊無需開發支持需求快,第二,需求團隊開發量也減少了,因為本來是他們需要自己做后臺數據管理的界面。但難點是用戶不接受。原因首先是和原來的使用習慣不同,第二是他們擔心穩定性問題。統一數據表,數據上不隔離,還要使用我們的SDK。我當時做了很多的宣講,關鍵代碼挨行的給用戶解釋,開始時也只接入了一些非核心的系統。我們慢慢把系統做好做強,直到我們自己的核心系統也接入,大家才開始慢慢接受。因為我們的核心系統是關鍵的系統,這個說服力比較強。但還有一個關鍵難點,就是系統的定位,開始時想把它定位為配置中心,因為在功能和管理上和攜程阿波羅配置中心很像,但是領導對中心這個詞很敏感,因為中心意味著出了問題影響范圍大。后來經過仔細梳理思考,這個服務對數據做了嚴格的管控,包括標準的審核流程、嚴格數據準入、灰度生效、數據變更過程追蹤、一鍵回滾、定時生效、臨時生效等。并且數據可以不存我們的數據庫,外接數據源。所以最終定位為數據變更管控系統。因為業界代碼變更管控的產品相對成熟,數據變更管控的產品非常少,我們也在持續的完善它,希望能將它打造成業界標桿的產品。