微服務是一種架構風格,是以開發一組小型服務的方式來作爲一個獨立的應用系統,每個服務都運行在自已的進程中,服務之間採用輕量級的HTTP通信機制 ( 通常是採用HTTP的RESTful API )進行通信。些服務都是圍繞具體業務進行構建的,並且可以獨立部署到生產環境上。這些服務可以用不同的編程語言編寫,並且可以使用不同的數據存儲技術。對這些微服務我們只需要使用一個非常輕量級的集中式管理來進行協調。
一個應用中包含了應用程序的所有功能(比如:頁面,代碼,配置等),把應用打成一個war或jar包部署到Tomcat中,通常稱爲單體應用架構。
可以看到單體架構就是把所有的東西都揉到一起去了,它的優缺點如下:
開頭已經說明了微服務架構的概念,就是把項目分爲不同的業務模塊,每個模塊都作爲一個單獨的應用來開發,既然是單獨的項目那就可以使用不同的語言,不同的技術,不同的數據存儲系統等等。如果一個業務模塊需要另一個業務模塊的功能的話,怎麼辦呢?採用輕量級RESTful API通信進行交互即可。然後採用一個集中式管理工具來管理這些個獨立模塊的應用,這些獨立的模塊就稱之爲微服務。springcloud就是提供了一站式管理技術的管理工具。至於如何管理的,之後會有說明。
通過這張圖可以說明微服務的擴展優勢。
微服務技術維度
|
技術實現
|
服務開發
|
Spring Boot
、
Spring
、
Spring MVC
等
|
服務註冊與發現
|
Eureka
、
Zookeeper
等
|
服務調用
|
Rest
、
RPC
等
|
服務熔斷器
|
Hystrix
、
Envoy
等
|
負載均衡
|
Ribbon
、
Nginx
等
|
服務接口調用
(
客戶端調用服務的簡化工具
)
|
Feign
等
|
消息隊列
|
Kafka
、
ActiveMQ
等
|
服務配置中心管理
|
Spring Cloud Confifig
等
|
服務路由(
API
網關)
|
Zuul
等
|
服務監控
|
Zabbix
、
Nagios
等
|
全鏈路追蹤
|
Zipkin
,
Brave
等
|
服務部署
|
Docker
、
OpenStack
等
|
數據流處理
|
Spring Cloud Stream
(
Redis,Rabbit,Kafka
等發送接收消息)
|
事件消息總線
|
Spring Cloud Bus
|
以上列出了部分技術棧,更多信息請看官網,有同學說我看英文很難受,嘻嘻,來這裏,springcloud中文網
以上的技術棧,後續我在學習的過程中會一一介紹的。
所以,Spring Cloud,基於 Spring Boot 提供了一套微服務解決方案,包括服務註冊與發現,配置中心,全鏈路監控,服務網關,負載均衡,熔斷器等組件。NetFlix是美國的一家網絡影音公司,差不多就像騰訊視頻,愛奇藝這樣的,他們有一些很牛X的分佈式開源組件,spring對他們的開源組件進行了進一步的封裝,又集合了其他的優秀的開源組件,就變成了現在的這個微服務架構管理工具。
來張圖:
上圖包含了技術棧中的部分內容,先簡單解釋一下:
Zuul 路由網關:網關大家都瞭解,通過一個子網的信息都走網關,這裏如果我們爲微服務架構配置一個網關,那麼訪問整個系統所有的微服務的請求,都要先經手網關,然後再轉發給各個微服務,有什麼用呢?那就要問一問朋友們,攔截器有什麼用呢?Zuul就是整個系統的一個攔截器,在這裏搞一個權限控制,每個微服務都攔的到,它不香嗎?
Eureka 服務註冊中心:這個是啥呢?大家思考這麼個問題,我們搞了很多個微服務,微服務之間要通信吧?要相互之間用對方的功能。不通信搞什麼微服務對不對?那通信要不要對方地址?怎麼找對方地址?曾記得很久很久以前,也許是民國時代,那時候打電話還不能直接打給對方,要打到一箇中轉站,然後告訴人家,我要找陳冠希,人家就幫你轉給了陳冠希,這樣你跟陳冠希就能友好的交流。那它爲什麼可以轉呢?明顯這個轉發中心有所有人的聯繫方式,當來一個電話說我要找誰誰誰,就給你轉過去。服務註冊中心是個啥?就是一個記錄各個微服務地址的一個集中站。每個微服務把自己信息註冊到註冊中心,然後,A微服務想要訪問B微服務就去註冊中心找B註冊的信息,從而就知道B在哪裏了。至於這麼做的好處,我們在學習Eureka那一章節再討論。
Hystrix 熔斷器:微服務之間會相互調用,這個調用不單單是兩級或者一對一,也許會出現A調用B,B調用C,C還調用了D,E,F等等。假如此時D掛掉了,咋辦?C得等着,C等着B就得等着,B等着A就得等着。這時候又來一個Q調用B,Q也得等着,巴拉巴拉。於是出現了掛了一個D,慢慢整個系統都掛掉了。這就是微服務調用可能產生的雪崩效應。熔斷器是啥?家裏電路短路時,電流過大會燒壞保險絲,保證不會因此造成更多的危險。這叫及時止損。熔斷器就是這樣,D掛掉了,訪問D的微服務等不到D的迴應,就假裝D有問題了,然後就不等了,直接返回一個預設好的熔斷信息。及時止損。這裏說的是客戶端熔斷,還有服務端熔斷,之後討論。
Spring Cloud Confifig配置中心:這個概念簡單,就是把配置文件集中管理不寫在本地了,應用啓動時去配置中心拿配置信息。目的是爲了配置文件的管理。
服務跟蹤:這是一個追蹤微服務的日誌收集工具包。