Spring-Cloud之開篇

  一、爲什麼會有spring-cloud。隨着現代互聯網的發展,以前很多傳統的單體項目將不再滿足於現在的互聯網需求,而這個時候就誕生了另外一種說法,微服務。簡單理解就是將軟件應用程序獨立部署的服務的一中特殊方式。微服務架構是一種分佈式架構,可以安裝業務單元,功能單元進行服務的劃分。它有自己化運維、容錯、快速演進等特點,它可以解決傳統項目的弊病,並且可以滿足越來越複雜的業務關係。

  二、單體架構和分佈式架構的優缺點。

  1)單體架構:

    以MVC架構模式爲例,我們在傳統項目中基本都是採用這種方式。通過MVC(表示層、業務邏輯層、數據訪問層)的架構基本能夠所有應用程序。

    缺點:

      隨着業務複雜性增加,代碼量增加。代碼的可讀性、可維護性和可擴展性就會下降。

      隨着用戶數量增加,併發數增加。單體項目的併發就會存在瓶頸。

      測試難度增加。

    爲了解決上面的一些問題傳統的方式:

      通過nginx進行反向代理,做負載均衡,運用程序,多臺部署。

      MySQL設置主從,通過讀寫分理來改善併發能力。

      通過加入緩存,提高讀取效率。

    但是這種方式還是會存在很大問題:

      單體項目代碼的可讀性、可維護性和可擴展性還是不能提升。

      隨着海量用戶增加,數據庫將成爲瓶頸。

      交付能力越來越弱。新老人員維護代碼的成本過高,代碼修改添加成本太高。

  2)分佈式架構

    微服務特點:

      按業務劃分爲一個獨立單元,即獨立的服務。

      服務通過http協議通訊。

      自動化部署。

      可以介於不同語言之間。

      可以用不同的存儲技術。

      服務集中化管理。

      是一個分佈式系統。

    優勢:

      通過把龐大的業務關係拆分成各個曉得單元,服務之間明確界限,增加了代碼的可讀性和可擴展性。

      由於微服務系統是分佈式系統,在業務擴展上面有很強的能力。另外併發能力,可以通過集羣方式得以處理。

      通過http協議傳輸數據,服務之間完全解耦。這使得服務之間可以通過不同語言開發。

      如果存在部分架構調整,那麼單體工程絕對是抓破頭皮的存在。

      微服務在進行更新或者戎機的情況下,不會影響其他服務。

      在CAP理論中使用AP架構,及有具有高可用和分區容錯的特點。

    缺點:

      複雜度高。由於是分佈式系統,所以部署複雜、學習成本上升、網路問題、服務依賴、測試都會變得更加複雜。

      分佈式事務。CAP理論(即同時滿足一致性(Consistency)、可用性(Availability)、分區容錯(Partition tolerance))。三者不可兼得,又由於P是基本要求所以,只能在CA中做取捨。微服務一般採用AP架構,那麼問題就在一致性上面即分佈式事務。一般採用兩階段提交方式解決。即第一階段service-acount發起一個分佈式事務,交給事務協調器TC管理。TC向所有參與事務的節點發起準備操作。第二階段,如果準備成功,則發出提交命令,如果存在一個節點失敗,則全部回滾。如果由於網絡原因導致提交阻塞,會影響整個系統運行。所以儘量減少分佈式事務的發生。

        

      服務劃分。業務拆分的界限主要是不是很明確,所以在劃定上面一般根據業務的可獨立和可更新進行劃分。可以參考領域驅動設計進行劃分。

      服務部署。由於服務的數量和複雜度,還要考慮先後順序等,所以導致了服務部署難的問題。目前採用的方式可以有docker編排,devops理念等

  三、spring-cloud簡介

  1)微服務應該具備的功能

    微服務具有以下特點:

      按業務劃分,代碼量小,易於維護。

      每個微服務有自己的獨立組件。

      通信採用http或者其他方式,具有容錯能力。

      一套服務治理方案,服務之間不耦合。

      單個服務能夠集羣化,並且具有負載能力。

      有一個完整的安全機制。

      有鏈路追蹤能力。

      有一套完整的實時日誌系統。

    微服務具有以下功能:

      服務的註冊和發現。

      

      服務的負載均衡。

       

      

      服務的容錯。(熔斷器機制)

      

      服務的網關。

      

      服務配置的統一管理。

      

      鏈路追蹤。

      實時日誌。

  2)簡介

  spring-cloud是基於spring-boot的。spring-boot是一種全新的web框架,他的特點是簡化開發和部署過程。簡化了spring的配置和依賴管理。spring-cloud是通過包裝其他技術框架來實現的,提供了一些常用組件:服務註冊與發現、配置中心、熔斷器、智能路由、微代理、控制總線、全局鎖、分佈式會話等。

  常用組件:

    服務註冊與發現組件:Eureka          |

    熔斷組件:Hystrix            |

                    |   =====> Spring Cloud Netflix  

    負載均衡組件:Ribbon       | 

    路由網關組件:Zuul              |

    Spring Cloud Config配置文件統一管理功能,一般配合spring cloud bus(消息總線)使用

    Spring Cloud Security安全管理,一般配合spring security oauth2使用

    Spring Cloud Sleuth分佈式鏈路追蹤組件

    Spring Cloud Stream數據流操作包

    

 

     其他組件:

      Feign聲明式遠程調度組件。

      Archaius配置管理API組件。

      Spring Cloud Data Flow大數據操作組件。

      Spring Cloud Consul另一個服務註冊與發現組件。

      Spring Cloud Zookeeper服務註冊與發現組件。

      Spring Cloud CLI可以讓用戶以命令形式快速運行和搭建容器。

      Spring Cloud Task任務調度和管理。

  四、上面介紹了Spring Cloud,下面看一下阿里的Dubbo。

  Dubbo是阿里開源的一個分佈式服務架構,致力於高性能和透明化的RPC調用,以及SOA的服務治理方案。

  1)RPC遠程調用:以NIO爲基礎實現的Netty框架的使用。

  2)集羣容錯:提供了基於接口方法的遠程調用功能,並顯示負載均衡、失敗容錯等功能。
  3)服務發現與發現:集成Zookeeper。

  

 

  4)Dubbo架構流程:

    服務提供者向服務中心註冊服務。

    服務消費者訂閱服務。

    服務消費者發現服務。

    服務消費者遠程調度服務提供者進行服務消費,在調度過程中使用了負載均衡、失敗容錯等功能。

    服務消費者和提供者,在內存中記錄調用次數,並定時發送監控中心。

    特點:

      連通性:服務之間均爲長連接。

      健壯性:監控中心宕機不影響其他服務。

      伸縮性:動態增減註冊中心和服務數量。

      升級性:服務集羣升級,不會對現有框架造成壓力。

  五、Spring Cloud和Dubbo對比

  

   目前Dubbo已經完全開源,捐給apache了,更新的狀態不是很頻繁。Dubbo使用tcp的協議,從效率上來說,比Spring Cloud的Restful的接口風格更快。Dubbo更好基於xml配置,Spring Cloud更多基於註解進行配置。上手層度上來說,Dubbo上手更加容易,Spring Cloud和Spring Boot的相關文檔全都是英文且量大,所以學習成本上來說,Dubbo更好。但是從解耦上來說,Spring Cloud採用http通信,所以在解耦上面做的更好。開發效率和部署效率上來說,Spring Cloud做的更加完善和高效。

  六、容器集羣管理Spring Cloud和Kubernetes對比

  

   

   總結:

    Spring Cloud採用Java編寫,在集成上面會更加實用。

    Spring Cloud 有大量的類庫。

    Spring Cloud 更多關注功能點。

    Kubernetes支持跨語言。

    Kubernetes提供微服務功能外,還支持環境、資源限制、管理應用程序聲明週期等功能。

    Kubernetes面向DevOps人員。

    Kubernetes學習成本高,比較新的平臺。

  七、上面主要是介紹Spring Cloud的相關知識,下面詳細介紹各個功能。

  1)Spring-Cloud之構架微服務準備-1

  八、在此說明本博客參考《深入理解Spring Cloud與微服務構建》一書進行編寫,如果存在侵權問題,請聯繫博主。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章