什麼是微服務?
微服務就是把原本臃腫的一個項目的所有模塊拆分開來並做到互相沒有關聯,甚至可以不使用同一個數據庫。 比
如:項目裏面有User模塊和Power模塊,但是User模塊和Power模塊並沒有直接關係,僅僅只是一些數據需要交
互,那麼就可以吧這2個模塊單獨分開來,當user需要調用power的時候,power是一個服務方,但是power需要
調用user的時候,user又是服務方了, 所以,他們並不在乎誰是服務方誰是調用方,他們都是2個獨立的服務,這
時候,微服務的概念就出來了。
經典問題:微服務和分佈式的區別
談到區別,我們先簡單說一下分佈式是什麼,所謂分佈式,就是將偌大的系統劃分爲多個模塊(這一點和微服務
很像)部署到不同機器上(因爲一臺機器可能承受不了這麼大的壓力或者說一臺非常好的服務器的成本可能夠好幾
臺普通的了),各個模塊通過接口進行數據交互,其實 分佈式也是一種微服務。 因爲都是吧模塊拆分開來變爲獨
立的單元,提供接口來調用,那麼 他們本質的區別在哪呢? 他們的區別主要體現在“目標”上, 何爲目標,就是你
這樣架構項目要做到的事情。 分佈式的目標是什麼? 我們剛剛也看見了, 就是一臺機器承受不了的,或者是成本
問題 , 不得不使用多臺機器來完成服務的部署, 而微服務的目標 只是讓各個模塊拆分開來,不會被互相影響,
比如模塊的升級亦或是出現BUG等等…
講了這麼多,可以用一句話來理解:分佈式也是微服務的一種,而微服務他可以是在一臺機器上。
微服務與Spring-Cloud的關係(區別)
微服務只是一種項目的架構方式,或者說是一種概念,就如同我們的MVC架構一樣, 那麼Spring-Cloud便是對這
種技術的實現。
微服務一定要使用Spring-Cloud嗎?
我們剛剛說過,微服務只是一種項目的架構方式,如果你足夠了解微服務是什麼概念你就會知道,其實微服務就算
不借助任何技術也能實現,只是有很多問題需要我們解決罷了例如:負載均衡,服務的註冊與發現,服務調用,路
由。。。。等等等等一系列問題,所以,Spring-Cloud 就出來了,Spring-Cloud將處理這些問題的的技術全部打包
好了,就類似那種開袋即食的感覺。。
自己實現微服務
詳細請查看源碼 lx-spring-cloud
源碼地址:https://github.com/lxwjq/lx-spring-cloud
微服務要面臨的問題
- 監聽服務有沒有宕機
- 負載均衡
- 熔斷
- 限流
- 降級
- 網關,路由,過濾
- 服務註冊與發現
單體應用不會出現上面的問題,
開發成本太大—> Spring Cloud出現
- 負載均衡 nginx ribbon
- 熔斷、限流、降級 hystrix
- 網關,路由,過濾 zuul
- 服務註冊與發現 eureka zookeeper
Spring-Cloud項目的搭建注意事項
因爲spring-cloud是基於spring-boot項目來的,所以我們項目必須是一個spring-boot項目,這裏要注意的一個點
是spring-cloud的版本與spring-boot的版本要對應下圖(www.spring.io):
springboot依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.7.RELEASE</version>
</parent>
SpringCloud依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
</dependency>