
一、微服務的現狀及未來
1.服務架構的演變
1.1 單體架構
單體架構應該是我們最先接觸到的架構實作了,在單體架構中使用經典的三層模型,即表現層,業務邏輯層和資料通路層。
單體架構隻适合在應用初期,且通路量比較下的情況下使用,優點是成本效益很高,開發速度快,成本低,但缺點也很明顯,這時擴充的首先就是考慮伺服器的叢集處理。
1.2 叢集
針對單個伺服器在通路量越來越大的情況越來越吃力的情況,我們可以考慮伺服器的叢集話處理。
叢集的部署大大提高了服務的處理能力,同時利用Nginx提供的負載均衡機制,來分發請求,使使用者的體驗沒有改變。
1.3 垂直化
上面的叢集部署是可以解決一部分的伺服器壓力,但是随着使用者通路量的增多,叢集節點增加到一定階段的時候,其實作用就已經不是太大了,因為将所有的業務都集中在一起,造成耦合度很高,這時我們可以考慮業務的拆分。來提高系統的性能。比如将原來在一個系統裡面的業務拆分為使用者系統,訂單系統和商品系統。也就是我們講的垂直化拆分如下:
服務垂直化拆分後是可以大大的提高整體的服務處理能力,但是也會出現很多的備援的代碼,比如使用者系統要操作訂單庫,要操作商品庫,訂單系統也有可能要操作使用者庫和商品庫等。
1.4 服務化
針對垂直化拆分出現的問題,這時就出現了我們經常聽到的SOA(面向服務的架構).什麼是SOA呢?在《微服務設計》中有這麼一段描述
SOA是一種設計方法,其中包括多個服務,而服務之間通過配合最終會提供一系列功能,一個服務通常以獨立的形式存在于作業系統程序中,服務之間通過網絡調用,而非采用程序内調用的方式進行通信。
業務重用,共享服務,
1.5 微服務化
在SOA的基礎上繼續演進就是我們講的微服務。SOA的服務更細粒度的拆分後就是微服務。根據時間遞進。
對基礎運維的要求能力會越來越高,虛拟化,容器話等。
微服務和SOA的差別:
1.思想上:微服務的目的是解耦而SOA的目的是實作資料的互通和共享性。
2.協定:微服務會使用一些輕量級的通信協定(Restful API)
3.基礎設施要求,微服務更加強調開發運維的持續傳遞。
2. 微服務架構的需求
2.1 RPC架構
在微服務架構中,服務與服務之間要實作接口的調用我們肯定要通過相關的RPC(Remote Procedure Call)架構來實作。
常用的RPC架構有:Dubbo,Google的GRPC,Apache的Thrift,微網誌的Motan,京東的EasyRPC等。我們通過RPC架構可以取調用服務提供者提供的服務,但有一個前提是我們要能找到這個服務。通常我們的服務部署都是叢集多節點的部署,是以在消費者這端就不可能直接寫死在代碼裡面,這時就涉及到了服務的發現問題,這時就需要另一個元件注冊中心了
2.2 注冊中心
注冊中心實作服務位址管理的功能,解決服務動态感覺(上線,下線)。
2.3 負載均衡
在服務注冊中心的介紹中我們可以看到負載均衡的應用。我們可以通過Ribbon來實作用戶端的負載均衡,負載均衡的政策可以是:輪詢,随機,根據響應時間來計算權重的輪詢等。
2.4 配置中心
在微服務架構中我們有很多個服務,而每個服務中是都會有單獨的配置檔案的。裡面有很多的配置資訊的有關聯的,而且對于後期的更新維護也會非常的不友善,這時配置中心就上場了。常用的配置中心有:apollo/Nacos/disconf/zookeeper/diamond/Spring Cloud Config
2.5 網關
網關可以幫助我們完成使用者請求的入口,路由。完成統一授權,日志的記錄,權限的認證和限流及熔斷操作。
2.6 限流、降級、緩存
在現實的微服務架構中的性能是很難滿足所有的使用者請求,這時我們就可以通過一些措施來保證我們的核心服務的正常運轉。
限流:sentinel、hystrix
降級:主動降級(訂單評論、廣告關閉)、被動降級
緩存:降低資料源通路頻率、Redis等
容錯機制:服務出現挂機,當機之後的處理機制。
2.7 Bus
Bus消息總線,實作異步化的通信機制。
2.8 鍊路監控
因為微服務中的服務實在是太多了,為了能更好的監控個服務的情況,肯定就需要鍊路監控服務,我們可以通過sleuth+zipkin來實作,應用層監控,系統級監控
3.SpringCloud 生态
SpringCloud生态提供了快速建構微服務的技術元件。
https://spring.io/projects/spring-cloud-netflix3.1 版本号說明
- SR (發行版)
- RC (後續發行版本)
- M1/M2(PRE) 裡程碑
- GA 穩定版
- BUILD-XXX 開發版
3.2 SpringCloud和SpringBoot的關聯關系
大版本對應:
Spring Cloud | Spring Boot |
Angel版本 | 相容Spring Boot 1.2.x |
Brixton版本 | 相容Spring Boot 1.3.x,也相容Spring Boot 1.4.x |
Camden版本 | 相容Spring Boot 1.4.x,也相容Spring Boot 1.5.x |
Dalston版本、Edgware版本 | 相容Spring Boot 1.5.x,不相容Spring Boot 2.0.x |
Finchley版本 | 相容Spring Boot 2.0.x,不相容Spring Boot 1.5.x |
Greenwich版本 | 相容Spring Boot 2.1.x |
Hoxtonl版本 | 相容Spring Boot 2.2.x |
在實際開發過程中,我們需要更詳細的版本對應:
1.5.2.RELEASE | Dalston.RC1 |
1.5.9.RELEASE | Edgware.RELEASE |
2.0.2.RELEASE | Finchley.BUILD-SNAPSHOT |
2.0.3.RELEASE | Finchley.RELEASE |
2.1.0.RELEASE-2.1.14.RELEASE | Greenwich.SR5 |
2.2.0.M4 | Hoxton.SR4 |
SpringCloud版本是和SpringBoot有關聯關系的,官網中可以檢視:
https://docs.spring.io/spring-cloud/docs/current/reference/html/到這兒,我們也清楚了要學習好SpringCloud中相關元件的内容,SpringBoot是我們必須要掌握好的一個前置内容.下篇文章開始給大家詳細介紹SpringBoot相關的内容,歡迎點贊收藏加關注哦!!!