張進猛 蘇健 柴立巖

摘要:在傳統(tǒng)單體架構的實際使用過程中,存在著項目過于臃腫、資源無法隔離、無法靈活擴展等問題。微服務架構把業(yè)務拆分成多個小的微服務、支持獨立部署、可以動態(tài)的實現(xiàn)橫向擴展和縱向擴展,可以解決上述問題。目前國內(nèi)外存在很多微服務架構,微服務架構的選取和實際應用是該文研究的重點。
關鍵詞:單體架構;微服務;獨立部署;動態(tài)擴展
中圖分類號:TP311.52 文獻標識碼:A
文章編號:1009-3044(2020)10-0273-02
1背景
一直以來在項目中使用的都是傳統(tǒng)單體框架,在使用過程中,遇到了以下問題:1)所有的業(yè)務依賴相同的數(shù)據(jù)庫、內(nèi)存等資源,如果某個新手開發(fā)者寫了一個慢語句,如果訪問比較頻繁的話,整個系統(tǒng)都會被拖垮;2)無法靈活擴展,一個業(yè)務系統(tǒng)包含很多業(yè)務模塊,經(jīng)常碰到的現(xiàn)象是只有一個或兩個業(yè)務模塊訪問用戶量比較大,比如考試模塊訪問量比較大,單體系統(tǒng)只能把所有模塊部署在多臺機器上組成集群,而不能針對考試模塊單獨部署。而采用微服務,可以把用戶管理、班級管理、學習和考試等模塊分成不同的微服務,采用不同的數(shù)據(jù)庫,如果現(xiàn)在考試的人多,可以靈活地把考試系統(tǒng)的服務進行擴展,以保證考試的流暢性。
2微服務架構的選擇
微服務是系統(tǒng)架構的一種設計風格,它的主旨是將一個獨立的系統(tǒng)拆分成多個小型服務,服務之間通過基于HTTP的RESTful API進行通信協(xié)作,這些微服務可以用不同的語言編寫,采用不同的數(shù)據(jù)庫。微服務架構包括配置管理、服務治理、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群管理等。
從表1可以看出,Spring Cloud是一個微服務綜合解決框架,選擇它就像選擇了一個品牌機一樣,否則我們只能自己針對各個問題去DIY自己的框架了。而且我們的單服務框架開發(fā)一直使用了spring,Spring Cloud基于Spring Boot,選擇springCloud可以說已經(jīng)具有了一定的學習基礎,上手要容易得多。
3微服務架構的實現(xiàn)
3.1服務的劃分
無論采用什么技術,都是為了實現(xiàn)特定的業(yè)務。使用微服務,也是為了更好的業(yè)務運行,給用戶更好的使用體驗。所以合理的劃分整個業(yè)務為多個微業(yè)務,是實現(xiàn)微服務的關鍵一步。根據(jù)業(yè)務劃分了用戶管理、課程學習、課程考試、競賽考試、證書管理等微服務。
3.2微服務的實現(xiàn)
整個微服務的實現(xiàn)包括下列組件的使用:服務治理、網(wǎng)關服務、負載均衡、容錯保護、分布式配置中心、消息總線、分布式服務跟蹤等。
3.2.1服務治理
使用的服務組件為Spring Cloud Eureka,實現(xiàn)服務注冊和服務發(fā)現(xiàn),包括服務注冊中心和服務提供者。服務注冊中心需要引入swing-cloud-starter-eureka-server依賴,然后在程序中引入@EnableEurekaServer。因為微服務要考慮高可用問題,所以需要搭建服務注冊中心的集群,每個服務中心都向另外的服務中心注冊自己,以實現(xiàn)服務清單的互相同步,達到高可用的效果。
3.2.2網(wǎng)關服務
使用的服務組件為Spring Cloud Zuul,主要包含兩方面的功能:1)實現(xiàn)路由規(guī)則和服務實例的維護;2)通過過濾器實現(xiàn)簽名校驗和登錄校驗等。
3.2.3負載均衡
使用的服務組件為Spring Cloud Ribbon,主要用于實現(xiàn)客戶端負載均衡,主要有隨機策略、線性輪詢策略、重試策略、最低并發(fā)策略、可用過濾策略、響應時間加權重策略、區(qū)域權重策略等。
3.2.4容錯保護
使用的服務組件為Spring Cloud Hystrix,當某個服務單元發(fā)生故障時,通常需要經(jīng)過長時間的等待,然后返回connectiontimeout等錯誤信息。加入Hystrix后,服務發(fā)生故障時,通過斷路器的故障監(jiān)控,向調用方法返回一個錯誤響應,而不是長時間等待,這樣不會使得線程因調用故障服務被長時間占用不釋放。
3.2.5分布式配置中心
使用的服務組件為Spring Cloud Config,分為服務端和客戶端兩部分,實現(xiàn)配置的集中管理、動態(tài)調整配置、自動的更新配置。
3.2.6消息總線
使用的服務組件為Spring Cloud Bus,通過整合RabbitMQ實現(xiàn)消息的接收和發(fā)送。
3.2.7分布式服務跟蹤
使用的服務組件為Swing Cloud Sleuth,通過整合Logstash或者Zipkin對請求鏈路跟蹤快速發(fā)現(xiàn)錯誤根源以及監(jiān)控分析每條請求鏈路上的性能瓶頸等。
4結束語
微服務架構可以解決單體架構的項目過于臃腫、資源無法隔離、無法靈活擴展等問題,它的敏捷開發(fā)和自動化部署等優(yōu)點備受開發(fā)者青睞。但同時對開發(fā)人員尤其是項目管理者提出了更高的要求,對業(yè)務的劃分、接口的一致性、分布式的復雜性、運維的新挑戰(zhàn),需要更多的開發(fā)者參與到項目中。