陳英達,楊春松,聶維
(1.南方電網(wǎng)數(shù)字電網(wǎng)集團有限公司,廣東,廣州 510000;2.國電南瑞科技股份有限公司,江蘇,南京 210000;3.潤和軟件股份有限公司,江蘇,南京 210000)
隨著近幾年業(yè)務數(shù)字化建設的迅猛發(fā)展,基于傳統(tǒng)單體架構(gòu)的應用系統(tǒng)已無法及時響應業(yè)務的快速變化。為實現(xiàn)電力業(yè)務可持續(xù)發(fā)展,完成從傳統(tǒng)應用系統(tǒng)向新一代數(shù)字化互聯(lián)網(wǎng)應用的轉(zhuǎn)型,某電網(wǎng)公司(以下簡稱公司)于2019年在《數(shù)字化轉(zhuǎn)型和數(shù)字電網(wǎng)建設行動方案》中提出了基于公司云平臺,采用微服務架構(gòu)建設新業(yè)務系統(tǒng)、改造存量業(yè)務系統(tǒng)的目標,從而提升業(yè)務應用的服務化水平,支撐企業(yè)數(shù)字化轉(zhuǎn)型和數(shù)字電網(wǎng)建設戰(zhàn)略的落地[1]。
現(xiàn)階段,公司正積極推進微服務應用建設及改造工作,前期已選型采用SpringCloud架構(gòu)作為微服務技術(shù)框架并構(gòu)建了集中式微服務應用系統(tǒng)架構(gòu)[2]。但隨著各類業(yè)務系統(tǒng)的部署從省地二級向網(wǎng)省地一級的集約化模式轉(zhuǎn)變收攏,業(yè)務應用的微服務架構(gòu)體系逐步由省級集中式(各分省自行部署與管理)擴展至覆蓋網(wǎng)級、省級、地市級的分布式(網(wǎng)級總部統(tǒng)管,全網(wǎng)分布式部署),一些關鍵性技術(shù)問題也逐漸暴露并亟待解決,主要體現(xiàn)在以下兩方面:
(1) 注冊中心服務節(jié)點存在高負載風險。隨著業(yè)務規(guī)模不斷增長,當服務實例數(shù)量達到一定量級時,注冊中心負載壓力開始顯現(xiàn),進而影響微服務應用的運行性能。
(2) 業(yè)務數(shù)據(jù)爆炸式增長,數(shù)據(jù)庫讀寫性能下降。自微服務應用開展分布式架構(gòu)建設以來,業(yè)務數(shù)據(jù)量急劇增加,導致數(shù)據(jù)庫出現(xiàn)讀寫性能下降、索引效率低、備份和恢復耗時長等問題。
為解決上述問題,本文提出了一種基于SpringCloud和MyCat技術(shù)棧的分布式微服務應用系統(tǒng)通用技術(shù)架構(gòu),并實現(xiàn)了注冊中心動態(tài)擴縮容與數(shù)據(jù)分片等關鍵技術(shù),為公司分布式微服務應用架構(gòu)的轉(zhuǎn)型提供了有效技術(shù)支撐。
在公司已有的集中式微服務架構(gòu)體系基礎上,開展分布式微服務應用系統(tǒng)技術(shù)架構(gòu)的研究。通過構(gòu)建該技術(shù)架構(gòu),深入分析技術(shù)架構(gòu)體系中各技術(shù)組件之間的協(xié)同關系,支撐分布式微服務應用的落地實現(xiàn)與高效運行。
分布式微服務應用系統(tǒng)技術(shù)架構(gòu)由分布式微服務總線與微服務分布式數(shù)據(jù)總線兩大技術(shù)棧構(gòu)成,如圖1所示。各類分布式微服務掛載在分布式微服務總線與微服務分布式數(shù)據(jù)總線上,分布式微服務總線SpringCloud提供服務注冊、發(fā)現(xiàn)、配置、調(diào)用及監(jiān)控等微服務治理功能[3],微服務分布式數(shù)據(jù)總線MyCat提供微服務的分布式數(shù)據(jù)管理與持久化功能。
圖1 分布式微服務應用系統(tǒng)技術(shù)架構(gòu)
分布式微服務總線按功能層次分為接入模塊、基礎模塊與支撐模塊。
接入模塊用于實現(xiàn)外部應用對微服務內(nèi)部的安全接入訪問,技術(shù)組件包括Nginx負載均衡、API網(wǎng)關、JWT認證、OAuth2授權(quán)以及Security攻擊防護等。Nginx負載均衡用于實現(xiàn)對API網(wǎng)關服務器的負載均衡選擇[6];API網(wǎng)關為外部訪問調(diào)用微服務提供統(tǒng)一入口;JWT 用于認證用戶的身份信息,認證成功后的用戶在請求某個服務前,通過OAuth2授權(quán)得到訪問令牌,再經(jīng)API網(wǎng)關將用戶請求轉(zhuǎn)發(fā)至后臺微服務,并通過路由策略實現(xiàn)微服務調(diào)用的動態(tài)路由更新;Security用于保護微服務免受XSS攻擊、SQL注入等外部攻擊,實現(xiàn)微服務的安全、正常訪問。
基礎模塊用于實現(xiàn)微服務的注冊、調(diào)用等功能,技術(shù)組件包括Eureka注冊中心[7]、Ribbon負載均衡以及Feign服務調(diào)用等。Eureka提供所有微服務的統(tǒng)一注冊;微服務之間通過Feign進行聲明式調(diào)用;Feign通過Ribbon負載均衡從注冊中心獲取目標微服務的服務器地址列表;在后續(xù)網(wǎng)絡請求過程中,Ribbon會以負載均衡的方式把微服務調(diào)用請求分攤至不同微服務實例上。
支撐模塊用于實現(xiàn)微服務的配置、監(jiān)控等功能,技術(shù)組件包括Apollo配置中心、Elastic-Job任務管理、RabbitMQ消息隊列、Hystrix與SpringBootAdmin應用服務監(jiān)管中心以及ELK(Elasticsearch、Logstash、Kibana)日志監(jiān)控等。Apollo配置中心為微服務提供動態(tài)配置信息的統(tǒng)一管理;Elastic-Job實現(xiàn)分布式微服務的全局任務調(diào)度;RabbitMQ完成分布式微服務應用系統(tǒng)之間的異步通信;Hystrix進行微服務應用的限流熔斷處理;SpringBootAdmin用于監(jiān)視與管理微服務應用程序的運行狀態(tài);ELK提供分布式微服務應用系統(tǒng)的日志監(jiān)控服務。
微服務分布式數(shù)據(jù)總線相關技術(shù)組件包括MyCat服務、分布式數(shù)據(jù)庫、Redis分布式緩存以及HDFS分布式文件系統(tǒng)。MyCat服務集群位于分布式微服務應用及其自身數(shù)據(jù)庫的中間,靈活解耦應用與數(shù)據(jù)庫,提供分布式異構(gòu)數(shù)據(jù)庫的訪問與路由,以及分庫分表、讀寫分離、分布式事務管控等功能;分布式數(shù)據(jù)庫提供數(shù)據(jù)持久化能力;Redis用于實現(xiàn)數(shù)據(jù)的分布式緩存;HDFS為分布式文件系統(tǒng)提供超大文件管理。
分布式微服務應用系統(tǒng)技術(shù)架構(gòu)中雖然探討了分布式微服務總線與微服務分布式數(shù)據(jù)總線的技術(shù)實現(xiàn)框架及關聯(lián)關系,但需結(jié)合各類微服務應用系統(tǒng)的實際業(yè)務需求,對架構(gòu)關鍵技術(shù)點進行重點識別梳理與研究分析,并完成定制化創(chuàng)新與改進設計,以解決分布式微服務應用建設過程中暴露出現(xiàn)的注冊中心高負載、數(shù)據(jù)庫讀寫性能下降等問題,確保分布式微服務應用系統(tǒng)架構(gòu)能有效支撐應用的業(yè)務需求。
大規(guī)模分布式微服務應用系統(tǒng)中微服務數(shù)量龐大,在高并發(fā)情況下,注冊中心作為微服務治理最基礎的組件,存在高負載風險[4]。通過采用本文設計的注冊中心服務集群動態(tài)擴縮容的方式,實現(xiàn)多個微服務注冊中心實例協(xié)同運行,從而保證注冊中心的高性能,提升微服務應用系統(tǒng)的運行能力。在實際應用中,通過Apollo配置中心組件完成Eureka-Server的動態(tài)添加與刪除,從而實現(xiàn)Eureka注冊中心的自動動態(tài)擴縮容?;贏pollo配置管理的Eureka注冊中心動態(tài)擴縮容工作原理,如圖2所示。
圖2 基于Apollo配置管理的Eureka注冊中心動態(tài)擴縮容工作原理
隨著公司微服務應用部署模式從省級集中式架構(gòu)逐步延伸至網(wǎng)、省、地市的分布式架構(gòu),各類業(yè)務應用系統(tǒng)的復雜度呈指數(shù)級上升,數(shù)據(jù)量與并發(fā)量也越發(fā)龐大,從而導致數(shù)據(jù)庫服務器出現(xiàn)數(shù)據(jù)操作開銷大、查詢慢、存儲空間不足等問題[5]。通過采用本文設計的基于MyCat的數(shù)據(jù)分片技術(shù),按照業(yè)務關聯(lián)程度將存儲于單個物理單元中的數(shù)據(jù)拆分分片(垂直分片與水平分片相結(jié)合方式進行數(shù)據(jù)分庫分表)至數(shù)據(jù)庫集群的各節(jié)點上,以分攤單個物理數(shù)據(jù)庫的讀寫壓力,突破數(shù)據(jù)庫在分布式微服務架構(gòu)中的瓶頸。以公司統(tǒng)一服務平臺的數(shù)據(jù)分片為例,基于MyCat的數(shù)據(jù)分片工作原理如圖3所示。
分布式微服務應用系統(tǒng)架構(gòu)體系自發(fā)布上線以來,已在公司電網(wǎng)管理平臺、統(tǒng)一服務平臺等多個微服務重點項目中得到了應用實踐,有效增強了分布式微服務應用系統(tǒng)的可用性以及穩(wěn)定性,大幅提升了系統(tǒng)性能。
(1) 提高應用系統(tǒng)運行性能。針對分布式微服務應用系統(tǒng)中訪問壓力較大的微服務,在服務注冊中心集群和配置中心集群等組件的協(xié)同配合下,實現(xiàn)了微服務多實例的自動化彈性伸縮部署,進而提高應用系統(tǒng)的整體運行性能。以公司電網(wǎng)管理平臺為例,經(jīng)過分布式微服務應用系統(tǒng)架構(gòu)改造后,200并發(fā)量下的TPS(每秒處理事務數(shù),Transactions Per Second)數(shù)值從改造前的7 600提升至13 000,平均響應時間從改造前的135 ms降低至22 ms。
(2) 降低數(shù)據(jù)庫壓力。利用微服務分布式數(shù)據(jù)總線上的數(shù)據(jù)分片技術(shù),可有效解決分布式微服務系統(tǒng)中數(shù)據(jù)庫擴展能力有限、數(shù)據(jù)庫響應變慢等問題,在滿足分布式事務一致性的前提下,提升了響應連接數(shù),降低數(shù)據(jù)庫負載壓力,如公司統(tǒng)一服務平臺,在并發(fā)量為1 000的情況下,數(shù)據(jù)傳輸速率提高約20%。
本文針對分布式微服務應用建設過程中暴露出現(xiàn)的注冊中心高負載與數(shù)據(jù)庫讀寫性能下降等問題,提出了一種基于SpringCloud分布式微服務總線與MyCat微服務分布式數(shù)據(jù)總線的分布式微服務應用系統(tǒng)通用技術(shù)架構(gòu),并研究設計了注冊中心動態(tài)擴縮容與數(shù)據(jù)分片等關鍵技術(shù)。該架構(gòu)體系有效提升了分布式微服務應用系統(tǒng)的可用性、可靠性以及穩(wěn)定性,并大幅提高了系統(tǒng)運行性能,為公司數(shù)字化轉(zhuǎn)型提供有力支撐。
圖3 統(tǒng)一服務平臺中基于MyCat的數(shù)據(jù)分片工作原理