學習內容安排如下:
當然系統架構肯定不是說我一篇文章就能學好的,只能說我作為一名初學者,是如何去理解這些概念的。
至於想要真正地去弄懂這些,需要自己長期性地不斷學習,非一朝一夕就能學完的。
技術更新是非常快的,從單一應用到垂直細分,到分布式,到SOA,以及微服務架構。
還有在Google帶領下的Service Mesh,只有不斷地學習才能在IT行業前行下去。
1集中式架構
當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
但是流量一旦增加就會出現各種的問題:
當然為了解決這些問題,後續也做了優化,根據業務功能對系統進行拆分。
雖然解決了代碼耦合問題,但是系統間相互獨立,會有很多重複開發工作,影響開發效率。
舉一個例子來理解,比如說一個電商項目,根據業務功能拆分成兩套系統:
那麼現在問題來了:
根據id去資料庫查詢商品,Service層和Dao層的代碼要寫兩遍,造成了代碼的極度冗餘。
2分布式服務
為了解決代碼冗餘問題,可以將核心業務作為獨立的服務抽取出來,形成服務中心。
多個子系統只需要訪問服務中心就好了。
優點:將基礎服務進行了抽取,系統間相互調用,提高了代碼復用和開發效率。
缺點:一旦服務變多,調用關係錯綜複雜,開發者自己都搞不清楚誰調用誰,難以維護。
3流動計算架構SOA
它將普通的分布式系統集中管理起來了,更便於維護,同時也提高資源利用率。
其典型的架構就是阿里巴巴的Dubbo,這個架構圖就比較複雜了,我就不自己畫了。
不要看好像挺複雜的,本質上都是為了管理服務,我以打車的例子大致說明下:
對於服務也是一樣的,以前有什麼問題?
為了解決上述問題,服務治理做了哪些?
對於我個人來說,我就會用滴滴和司機之間的關係作為對比,來理解服務管理和服務之間的關係,不然專業術語太多了,也很難理解。
4微服務
微服務和SOA比較像,但也有一些差別。
①微:微服務的核心
也就是小的意思,服務拆分粒度很小。例如一個用戶管理就可以作為一個服務。
②面向服務
每個服務都要對外暴露Rest風格服務接口API,並不關心服務的技術實現。
你是用Java實現的也好,還是用Python實現的也罷,都可以,只要提供Rest的接口即可。
③單一職責
微服務中每一個服務都對應唯一的業務能力,做到單一職責。
④獨立
我們以前寫的代碼本質上都是在一個服務中,屬於服務內部:類與類之間的調用。
那如何實現服務之間的調用呢?有兩種方式:RPC調用和Http調用。
1RPC調用
基於原生TCP通信,速度快,效率高,現在熱門的dubbo,都是RPC的典型代表。
2Http調用
這個就太常見了,我們以前一直在用的Ajax請求,就屬於http調用。
它的特點在於靈活,實現了不同程式語言之間的調用,Ajax就是在使用js調用Java。
現在使用Java代碼調用Java,做個演示:
我在電腦上創建了兩個不同的工程,工程①也就是我們這幾天用SpringBoot搭建的項目。
在工程①中實現了通過id去資料庫查詢用戶數據的功能,也可以通過瀏覽器訪問。
那在工程②中調用工程①中的業務,也就是服務之間的調用。
注意:這和以前已經有本質上的區別了,以前都是內部的調用,現在不一樣了。
當然因為我這邊只有一臺電腦,所以我不太確定能否實現跨電腦的調用。
那它具體是如何實現的呢?
3RestTemplate
它是Spring提供的一個模板工具類,也是上述我使用到的工具:
①SpringBoot測試
在SpringBoot中測試和在Spring中測試有些許不同之處需要注意。
是使用註解@SpringBootTest說明,參數為啟動類的字節碼。
②restTemplate
這也就是spring提供的模板工具類,使用spring注入後,即可以直接使用
③getForObject()
這是發送一次get請求,postForObject對應著post請求,發送到哪兒呢?
學習完了Http客戶端工具,就可以正式學習微服務了,明天開始學SpringCloud。
謝謝你的觀看。
【編輯推薦】
【責任編輯:
華軒TEL:(010)68476606】