微服務入門篇
本篇筆者將從以下幾點來講解微服務的入門知識點。
單體架構
什麼是單體架構
簡單來說就是一個 war 包打天下,war 包中就包含了各種功能和資源,比如 JSP. JS. CSS,業務就是各個功能模塊,如下圖:
單體架構優缺點
-
優點:
-
架構簡單,少了很多微服務中的問題 (下文會講是哪些問題)
-
開發. 測試. 部署簡單,特別是部署
-
缺點:
-
隨業務擴展,代碼量越來越多,由於開發人員水平不同,代碼質量參差不齊,改動代碼時牽一髮而動全身,開發人員如履薄冰
-
部署慢,由於代碼量過多,每次部署可能需要幾分鐘甚至幾十分鐘
-
擴展成本高,根據單體架構圖,假若支付模塊爲 CPU 密集型,需要大量計算,即需要更好的 CPU,若訂單模塊爲 IO 密集型,需要大量磁盤讀寫,即需要更好的內存和磁盤。單體架構又不支持單模塊擴展,則我們就需要更好的 CPU. 內存. 磁盤,那麼硬件成本就會飛速上漲
-
不利於新技術發展,想想老闆突然一天說我們把 Struts2 項目往 Spring Boot 上遷移...
微服務與微服務架構
什麼是微服務
微服務的核心就是將傳統的單體架構拆分成單個服務,將業務間進行解耦,每個服務可以單獨部署. 可以擁有自己的數據庫這樣拆分出來的服務就叫做微服務。
就比如說,單體架構中有訂單. 支付. 物流. 積分等業務,拆分成微服務,訂單服務,支付服務,物流服務,積分服務
這樣拆分出來有什麼意義呢?
單體架構中若非核心模塊出現重大 Bug,比如積分模塊內存溢出,就會導致整個項目宕機 但若是拆分成微服務,則只是說積分服務不能使用,但核心服務並不會受到影響
什麼是微服務架構
微服務架構是一種架構風格,包含如下幾個特點:
-
將一個單一應用程序開發爲一組小型服務
-
每個服務運行在自己的進程中
-
服務之間通過輕量級的通信機制 (http rest api)
-
每個服務都能夠獨立的部署
-
每個服務甚至可以擁有自己的數據庫
微服務與微服務架構的區別
微服務是服務的大小和對外提供的單一功能,微服務架構是指把一個個微服務管理起來,對外提供的一套完整服務
微服務架構的優缺點
-
優點:
-
每個服務足夠小,內聚高,代碼更易理解,相較於單體架構,修改幾行代碼可能需要對整個系統邏輯都要理解
-
易開發,單個服務功能集中
-
單個服務可以由小團隊進行開發,效率高
-
擴展成本低,按需擴縮容
-
前後端分離,Java 開發人員能更集中精力關心後端接口的安全性和效率
-
每個服務擁有獨立的數據庫,也可以多個服務使用一個數據庫
-
缺點:
-
增加運維人員工作量,可能會部署非常多的 war 包 (k8s + Docker + Jenkis)
-
服務之間相互調用,增加通信成本
-
數據一致性問題 (分佈式事務問題). 性能監控等
-
問題定位時間成本增加
單體架構和微服務架構的區別
- 單體架構擴展
併發增加,上集羣,硬件成本高
- 微服務架構擴展
併發增加,靈活擴展,降低硬件成本,但運維成本. 開發成本上升
- 數據存儲區別
單體架構:僅有一個數據庫 微服務架構:每個微服務都可以有一個數據庫
微服務的適用場景
-
適用於:
-
大型複雜項目 (上百萬行代碼的項目 T_T)
-
快速迭代項目 (一天一更,吐血 QAQ)
-
高併發項目 (考慮彈性擴縮容 T~T)
-
不適用:
-
業務穩定,就修修 BUG,改改數據
-
迭代週期長,發佈頻率按月來算的
開發微服務的框架
相關框架
-
Spring Boot 快速開發微服務的 Web 框架
-
Spring Cloud 微服務架構的一套工具集
-
Spirng Cloud Alibaba 阿里提供的符合 Spring Cloud 標準的,一套微服務架構工具集
下圖便是 Spirng Cloud Alibaba 提供的一套工具集,注意雖然有些備註是開源,但只是部分開源,一些核心功能依舊需要付費才能使用,比如 Sentinel,開源的話本地限流配置是不能持久化的 (可以選擇付費,大佬可以改源代碼來解決該問題)
如何選擇框架的版本
Spring Boot
以 2.1.6.RELEASE 版本爲例
-
其中 2:表示的主版本號,表示是我們的 SpringBoot 第二代產品
-
其中 1: 表示的是次版本號,增加了一些新的功能但是主體的架構是沒有變化的,是兼容的
-
其中 6: 表示的是 bug 修復版
所以 2.1.6 合起來就是 springboot 的第二代版本的第一個小版本的 第 6 次 bug 修復版本
RELEASE: 存在哪些取值呢?
-
snapshot(開發版本)
-
M1...M2(里程碑版本, 在正式版發佈之前會出幾個里程碑的版本)
-
release(正式版本)
所以選擇版本時請認準 release
Spring Cloud
-
第一代版本: Angle
-
第二代版本: Brixton
-
第三代版本: Camden
-
第四代版本: Edgware
-
第五代版本: Finchley
-
第六代版本: GreenWich
-
第七代版本: Hoxton(還在醞釀中,沒正式版本)
-
這種發佈的版本是 以倫敦地鐵站發行地鐵的站
爲什麼我們的 SpringCloud 會以這種方式來發布版本,因爲假如我們傳統的 5.1.5release 這種發佈的而 SpringCloud 會包含很多子項目的版本就會給人造成混淆
-
SNAPSHOT:快照版本,隨時可能修改
-
M:MileStone,M1 表示第 1 個里程碑版本,一般同時標註 PRE,表示預覽版版
-
RC:版本英文版名字叫 Release Candidate(候選版本)一般標註 PRE 表示預覽版
-
SR:Service Release,SR1 表示第 1 個正式版本,一般同時標註 GA:(GenerallyAvailable),表示穩定版本,比如還有一種 RELEASE 版本(正式版本)
比如 Greenwich 版本順序:Greenwich.release-----> 發現 bug----->Greenwich.SR1------> 發現 bug---->Greenwich.SR2
總結:
-
打死不用 非穩定版本 / end-of-life(不維護)版本
-
release 版本先等等
-
推薦 SR2 以後的可以放心使用
-
Spring Boot. Spring Cloud. Spring Cloud Alibaba
這三個框架的版本關係,及推薦使用的版本如下:
來源:segmentfault.com/a/1190000022619522
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/YhUZtADVcIcDgmdOkBW7bg