微服務的優勢和劣勢(微服務的優缺點分別是什麼)
2023-09-27 07:39:11 1
要是現在說不會微服務真不敢出去面試了,面試造火箭。入職開始擰螺絲...
優點
1)服務的獨立部署
每個服務都是一個獨立的項目,可以獨立部署,不依賴於其他服務,耦合性低。
2)服務的快速啟動
拆分之後服務啟動的速度必然要比拆分之前快很多,因為依賴的庫少了,代碼量也少了。
3)更加適合敏捷開發
敏捷開發以用戶的需求進化為核心,採用迭代、循序漸進的方法進行。服務拆分可以快速發布新版本,修改哪個服務只需要發布對應的服務即可,不用整體重新發布。
4)職責專一,由專門的團隊負責專門的服務
業務發展迅速時,研發人員也會越來越多,每個團隊可以負責對應的業務線,服務的拆分有利於團隊之間的分工。
5)服務可以動態按需擴容
當某個服務的訪問量較大時,我們只需要將這個服務擴容即可。
6)代碼的復用
每個服務都提供 REST API,所有的基礎服務都必須抽出來,很多的底層實現都可以以接口方式提供。
缺點:
1)分布式部署,調用的複雜性高
單體應用的時候,所有模塊之前的調用都是在本地進行的,在微服務中,每個模塊都是獨立部署的,通過 HTTP 來進行通信,這當中會產生很多問題,比如網絡問題、容錯問題、調用關係等。
2)獨立的資料庫,分布式事務的挑戰
每個微服務都有自己的資料庫,這就是所謂的去中心化的數據管理。這種模式的優點在於不同的服務,可以選擇適合自身業務的數據,比如訂單服務可以用 MySQL、評論服務可以用 Mongodb、商品搜索服務可以用 Elasticsearch。
缺點就是事務的問題了,目前最理想的解決方案就是柔性事務中的最終一致性,後面的章節會給大家做具體介紹。
3)測試的難度提升
服務和服務之間通過接口來交互,當接口有改變的時候,對所有的調用方都是有影響的,這時自動化測試就顯得非常重要了,如果要靠人工一個個接口去測試,那工作量就太大了。這裡要強調一點,就是 API 文檔的管理尤為重要。
4)運維難度的提升
在採用傳統的單體應用時,我們可能只需要關注一個 Tomcat 的集群、一個 MySQL 的集群就可以了,但這在微服務架構下是行不通的。當業務增加時,服務也將越來越多,服務的部署、監控將變得非常複雜,這個時候對於運維的要求就高了。
,