springcloud微服務之(一)何爲微服務?爲什麼要用springcloud?

前言

這兩年,“微服務”一詞被傳得很火,關於微服務的文章在各大技術論壇和博客不斷的興起,不斷被轉發和評論,技術人員之間的交流也越來越多的青睞微服務這一話題,彷彿不懂微服務就不是一個合格的技術開發者,就連有些公司招聘的要求上都要求應聘者必須掌握至少一門開發“微服務”技術,所以,藉著這股東風,筆者前陣子專門學習了一段時間的springcloud,也就是如今最火的微服務框架 (這麼說也好像不全對),並在這裡開設了一個系列課程來介紹springcloud,希望各位讀者多多指教~

什麼是微服務

既然springcloud是專門用於開發“微服務”的,那麼首先我們來了解一下,什麼是“微服務”?

微服務(microservice) 一詞最早由Martin Fowler與James Lewis於2014年共同提出來的,它是一種新的軟件架構風格,就是把一個大型應用程序分割成可以獨立部署的小型服務,每個服務之間都是送耦合的,通過RPC或者是Rest協議來進行通信,可以按照業務領域來劃分成獨立的單元,比如一個電商系統可以分割成會員、訂單、商品等不同的小型服務,有自動化運維、容錯、快速演進的特點,它能夠解決傳統單體架構系統的痛點,同時也能滿足越來越複雜的業務需求。

什麼是springcloud?

springcloud是由著名的spring團隊基於Java語言設計的用於開發微服務應用的一系列組件集合(額。。。以筆者的知識水平,只能這麼定義了),它依賴於springboot,擁有非常多的組件,涉及到了微服務的方方面面。springcloud誕生的時間並不長,正式推出第一版的時間是2015年,距今也就三年多一點的時間,但springcloud已經足夠強大,知名度也越來越高,隨著Netflix等社區的大力推動下越來越完善,將來很大可能會成為微服務的開發標準。

為什麼要用springcloud來開發微服務項目?

如果要用一句話來說明為什麼springcloud在微服務領域那麼廣受歡迎的原因,那就是springcloud的組件幾乎涵蓋了微服務開發中的方方面面,也就是說微服務所需的技術支持springcloud的組件都能提供。

按照Martin Fowler 給出的定義:微服務中的“服務”是一個獨立運行的單元組件,每個單元組件運行在獨立的進程中,組件與組件之間通常使用HTTP 這種輕量級的通信機制進行通信。基於這樣的說法,微服務應該具有以下的特點:

  • 體積較大,代碼較多的大型應用劃分成多個服務組件,單個服務代碼量小,易於維護;
  • 每個服務能獨立部署,也就意味著服務有自己的基礎組件,比如數據庫,緩存等;
  • 服務之間松耦合,用http或者rpc協議等通信方式進行通信,且具有容錯能力;
  • 單個服務能夠集群部署;
  • 整個微服務系統有鏈路追蹤的能力,萬一其中一個服務掛了影響其他服務可以通過鏈路查找;
  • 整個微服務系統有一整套安全機制,包括安全校驗等;

從這幾點可以看出,微服務系統的技術要求是很高的,可以這麼說,在springcloud推出之前,市面上是沒有一套完整的技術框架能滿足微服務開發的要求的 (強如阿里官方推出的dubbo,也存在著很多技術實現上的缺陷),那麼springcloud為什麼這麼受大家青睞呢?原因是因為springcloud提供了一系列組件,這些組件幾乎可以滿足微服務開發需求中的所有技術要求,只需要技術人員按照自己的業務需要來搭建即可。

下面為大家介紹一個springcloud的常用組件,以及它們的功能。

服務註冊和發現組件:Eureka。利用Eureka組件可以很輕鬆實現服務的註冊和消費,一般是搭建一個eureka的註冊中心,可以讓其他服務在上面註冊,並以此作為通信中介來管理微服務之間的聯繫。

服務的負載均衡:Ribbon。通過和Eureka、Zuul等組件進行搭配,很容易對服務做負載均衡,負載均衡組件獲取服務提供者所有實例的註冊信息,並通過一定的負載均衡算法,選擇一個服務提供者的實例,向該實例消費。

服務的熔斷器:Hystrix。在微服務實際項目中,服務之間的調用錯綜複雜,可能一個服務因為某種原因不可用,然後第二個調用它的服務就處於阻塞狀態,然後調用第二個服務的其他服務也不可用,以此類推,會給項目運行帶來很嚴重的後果,基於此種情況,Hystrix繼承了分佈式系統的熔斷器機制,作用就是當用戶請求一個服務的失敗次數超過一定的閾值後,熔斷器會自動啟動,停止所有的服務,同時,Hystrix還提供了服務降級功能以及熔斷器的健康監測。

路由網關組件:Zuul。內部的API的接口通過Zuul暴露給外界使用,內部的服務調用不直接提供API接口,這樣做的好處是可以隱藏內部服務,直接通過網關層來做控制調用哪個服務實例。同時,網關層也可以做一些安全驗證,防止非法的請求操作API接口,安全而且容易維護。

服務配置中心:Spring Cloud Config。多個微服務有各自的配置文件,隨著服務的增加,配置文件的數量也在不斷增多,這時候需要有一個配置中心來統一管理,啟動服務實例後直接訪問配置中心即可。Spring Cloud Config 包括Server端和Client 端, Server 端讀取本地倉庫或者遠程倉庫的配置文件,所有的Client 向Server 讀取配置信息,從而達到配置文件統一管理的目的。

鏈路追蹤:Spring Cloud Sleuth。微服務系統中各個服務的調用關係錯綜複雜,所以微服務系統必須有追蹤鏈路的功能,通過Sleuth可以實時跟進用戶的請求有哪些服務參與,出了問題能夠馬上定位。

安全模塊組件:Spring Cloud Security。是對Spring Security 的封裝,通常配合0Auth2使用來保護微服務系統的安全。

通過搭配使用上面的組件,一個簡單但功能完整的微服務系統就誕生了,架構圖如下圖所示:

springcloud微服務之(一)何為微服務?為什麼要用springcloud?

springcloud還有很多功能強大的組件,幾乎可以說解決了人們對微服務系統的所有需求,所以,springcloud的火爆也就不難理解了 ,因為篇幅的問題,本文只是講解了微服務系統和springcloud的一些基礎簡介,在接下來的系列課程中,筆者會一一給大家展示springcloud的組件使用,期待讀者們能跟我一起學習~~


分享到:


相關文章: