Spring Cloud微服務架構從入門到會用(一)—總覽

本教程不定時更新,如果這些文章對你有幫助,請加個關注,謝謝!

本教程僅僅能教會大家怎麼使用Spring Cloud的各個組件,沒有深挖實現原理,要想精通就就看各位看官老爺們自己了。

微服務框架

在說微服務之前我們先大概瞭解下框架的演進(此處我們主要講Java後端開發的演變過程)

1. 單體應用

最初我們使用的都是Spring + MyBatis/Hibernate/JDBC + Struts/SpringMVC + jsp,開發人員即寫頁面,又寫Java邏輯一個人完成整個功能,開發完成後打成一個war包,部署到Tomcat裏,然後爲用戶提供服務。
在這裏插入圖片描述

2. 前後端分離

接下來Spring發佈了SpringBoot,爲了緊跟這個技術潮流,我們將開發框架切換爲SpringBoot,採用前後分離的開發方式,前端用的是的jQuery,通過ajax與後臺進行交互。這個時候我們變成了用nginx+jar的方式,把頁面靜態資源和後端服務分開了。
在這裏插入圖片描述

3. 負載均衡

發展到前後端分離,一版情況能滿足大部分的企業應用了,畢竟大部分企業應用使用的用戶不是很多。但是有一部分企業應用用戶量偏大,採用以上的架構,在用戶集中使用的時候就會出現問題,比如學校的教務系統,平時大家看看通知,下載個文件,查查分數,但是到了每學期一度的選課,大家集中在一個時間,去登錄系統去搶課,這個時候服務器可能就崩潰了,或者是頁面一直在加載,刷不出頁面。這個時候就要上負載均衡了,nginx的吞吐量很高,這個時候的性能瓶頸是後端服務,也就是部署的那個jar包,比如我們一個jar同時能支持100人,那我啓動10個,通過nginx的反向代理,我代理10個jar,這個時候我們也能解決問題。
在這裏插入圖片描述

4.微服務

採用了負載均衡的方案之後基本上就能滿足更大一部分企業了,雖然能滿足絕大部分企業了,但是有些企業的管理者覺得互聯網公司上了微服務,我們也要上。這個時候我們的架構就要像微服務轉變。那我們介紹下什麼是微服務?所謂微服務它一定要“微”,也就是單一職責,一個服務只解決一個業務領域的問題;第二個是服務,對外提供我們能處理的業務服務。那麼這麼做有什麼優點呢?

  • 一個服務只負責一個業務領域,影響小,集使某個服務宕機了其他服務還能正常使用
  • 代碼量少,易於維護,不會很多人一起開發代碼衝突
  • 便於迭代升級,不需要和其他應用一起上線
  • 耦合度低

當然,微服務也是有缺點的

  • 運維成本上升
  • 架構複雜度上升
  • 帶來更多的需要解決的問題(不同服務間調用事務問題)

一個微服務架構的系統由幾十甚至幾百個微服務組成,各個服務直接互相依賴,服務如何拆封,內部接口規範,事務等等問題。尤其是服務拆分,需要團隊非常熟悉業務流程,懂得取捨,要保證拆分的粒度服務既符合“高內聚,低耦合”的基本原則,還要兼顧業務的發展以及公司的願景。

在這裏插入圖片描述

Spring Cloud都有哪些組件(常用的6個組件)

  • 服務註冊發現 —— Eureka
  • 服務網關——Spring Cloud Gateway
  • 客戶端負載均衡——Ribbon
  • 熔斷器——Hystrix
  • 分佈式配置——Spring Cloud Config
  • 服務調用——Feign

以上組件時Spring Cloud官網提供的並建議使用的組件,我們呢要替換其中幾個組件,替換爲目前使用較多的,評價也比較好的組件

  • 熔斷器——Hystrix -> Sentinel
  • 分佈式配置——Spring Cloud Config -> Nacos

接下來我們將使用以上組件搭建一個Spring Cloud的工程,供大家參考學習。

在這裏我想說一句,沒有最好的架構,只有最適合的架構,比如公司要開發一個報銷系統,你非得上微服務就沒有意義了,增加了開發成本,增加了運維成本。再比如你們公司突然要發展電商,要開發一個商城系統,如果你還用springmvc,弄一個工程部署到tomcat裏,那就是不負責任的表現。當然,選擇某一個架構不只是根據業務,也要根據公司的實際情況去考慮,公司有沒有那麼多成本讓你搞微服務,或者是暫時先上單體應用,然後慢慢再搞微服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章