一、什麼是微服務?
1。微服務是一種架構模式或者一種架構風格。
2。微服務提倡將單一應用程式劃分成一組小的服務並且獨立部署
3。微服務之間相互配合、相互協調,每個服務執行在其獨立的程序中。
4。 服務與服務間採用輕量級通訊,通常是基於HTTP的RESTful API等。
二、 微服務優點:
1。 微服務所需開發團隊小,一般2-5人就可以(當然還是以實際需求為主)
2。 系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的
3。 微服務技術棧不受限,可以使用多種語言開發。
4。 每個服務足夠內聚,足夠小,比較容易聚焦
5。 開發簡單且效率高,一個服務只做一件事情
6。 易於和第三方整合,微服務允許容易且靈活的自動整合部署(持續整合工具有docker Jenkins,Hudson,bamboo等)
7 微服務只是涉及業務邏輯的程式碼,不會和前端頁面進行融合
8。 每個微服務都可以有自己的儲存能力,資料庫可自有也可以統一,十分靈活
三、微服務缺點:
1。 分散式的複雜性
2。 運維要求較高
3。 依賴系統部署
4。 介面之間調整成本高
5。 微服務需要資料的一致性(分散式事務)
微服務架構
二、什麼是springcloud?
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,透過Spring Boot風格進行再封裝遮蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分散式系統開發工具包
SpringCloud基於SpringBoot提供了一整套微服務的解決方案,包括服務註冊與發現,配置中心,全鏈路監控,服務閘道器,負載均衡,熔斷器等元件,除了基於Netflix的開源元件做高度抽象封裝之外,還有一些選型中立的開源元件
SpringCloud利用SpringBoot的開發便利性巧妙地簡化了分散式系統的基礎設施開發,SpringCloud為開發人員提供了快速構建分散式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件匯流排,全域性所、決策精選、分散式會話等等,他們都可以用SpringBoot的開發風格做到一鍵啟動和部署。
總結:SpringCloud是分散式微服務架構下的一站式解決方案,是各個微服務架構落地技術的幾何體,俗稱微服務全家桶。
springcloud 微服務
三、springcloud核心功能
1。Eureka:註冊中心。
Eureka是一個基於REST的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。
Eureka主管服務註冊與發現,在微服務中,以後了這兩者,只需要使用服務的識別符號(==就是那個在每個服務的yml檔案中取得服務名稱==),就可以訪問到服務,不需要修改服務呼叫的配置檔案
Eureka遵循AP原則(高可用,分割槽容錯性),因為使用了自我保護機制所以保證了高可用。
2。Ribbon:負載均衡框架。Load Balance,微服務或分散式叢集中常用的一種應用
一句話:簡單來說負載均衡就是將使用者的請求ping平攤的分配到多個任務上,從而實現系統的高可用。
3。Hystrix:容錯框架,透過新增延遲閥值以及容錯的邏輯,來幫助我們控制分散式系統間元件的互動。
Hystrix是一個用於處理分散式系統延遲和容錯的開源庫。分散式系統中,依賴避免不了呼叫失敗,比如超時,異常等。Hystrix能保證在出現問題的時候,不會導致整體服務失敗,避免級聯故障,以提高分散式系統的彈性。
Hystrix類似一個“斷路器”,當系統中異常發生時,斷路器給呼叫返回一個符合預期的,可處理的FallBack,這樣就可以避免長時間無響應或丟擲異常,使故障不能再系統中蔓延,造成雪崩。
4。Feign:一個REST客戶端,目的是為了簡化Web Service客戶端的開發
Feign是一個宣告式WebService客戶端,使用方法時定義一個介面並在上面添加註解即可。Feign支援可拔插式的編碼器和解碼器。Spring Cloud對Feign進行了封裝,使其支援SpringMVC和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支援負載均衡。
5。Zuul:為微服務叢集提供過代理、過濾、路由等功能。
6。 Config:分散式配置中心元件,支援配置服務放在配置服務的記憶體中(即本地),也支援放在遠端Git、SVN。