朱俊
【摘要】 ? ?隨著信息技術(shù)的不斷發(fā)展,傳統(tǒng)的單體開發(fā)架構(gòu)已難以適應(yīng)保險行業(yè)險種產(chǎn)品在核心業(yè)務(wù)系統(tǒng)中快速迭代上線的業(yè)務(wù)需求.微服務(wù)架構(gòu)是一種將一個單體應(yīng)用程序開發(fā)拆分為一系列小型服務(wù)程序開發(fā)的架構(gòu),每個服務(wù)獨立運行在各自的進(jìn)程中,服務(wù)間通信采用了相對較為輕量級的通信規(guī)則并且強調(diào)服務(wù)組件化,同時支持在云中部署各類應(yīng)用和服務(wù),增強了系統(tǒng)的伸縮性和負(fù)載性能,系統(tǒng)維保人員可快速響應(yīng)險種產(chǎn)品的開發(fā)需求,有效的縮短交付周期,并可結(jié)合微服務(wù)架構(gòu)中的持續(xù)集成和持續(xù)部署工具,實現(xiàn)險種產(chǎn)品的快速上線。但該架構(gòu)在系統(tǒng)效率、維護(hù)以及成本方面也帶來了一些新的挑戰(zhàn)。本文以微服務(wù)框架為基礎(chǔ),以險企核心業(yè)務(wù)系統(tǒng)的建設(shè)為背景,探討架構(gòu)應(yīng)用于系統(tǒng)帶來的創(chuàng)新與問題。
【關(guān)鍵詞】 ? ?微服務(wù)架構(gòu) ? ?保險行業(yè) ? ?核心業(yè)務(wù)系統(tǒng) ? ?Spring Cloud
引言
隨著人們生活水平的不斷提高、對風(fēng)險意識的不斷增強以及對自身風(fēng)險保障意識的逐漸重視,帶動了各險企險種產(chǎn)品的不斷發(fā)展及更新。而險種業(yè)務(wù)的正常開展,除險種產(chǎn)品自身的特點外,核心業(yè)務(wù)系統(tǒng)的穩(wěn)定運行及能否快速地上線險種產(chǎn)品起著至關(guān)重要的作用。從核心業(yè)務(wù)系統(tǒng)的研發(fā)和技術(shù)建設(shè)層面進(jìn)行分析,傳統(tǒng)的單體架構(gòu)(包含所有功能的應(yīng)用程序,可以是JAR、WAR、EAR或其它歸檔格式包)在業(yè)務(wù)需求功能實現(xiàn)上呈現(xiàn)出一些弊端,例如復(fù)雜性高、擴(kuò)展能力差、阻礙技術(shù)創(chuàng)新等。同時隨著業(yè)務(wù)的發(fā)展、技術(shù)的更新、計算機硬件性能的不斷提升,行業(yè)對核心業(yè)務(wù)系統(tǒng)的實現(xiàn)方式和數(shù)據(jù)服務(wù)質(zhì)量上有了全新的要求,而原有的系統(tǒng)設(shè)計架構(gòu)已不能完全滿足業(yè)務(wù)發(fā)展的需要,這就迫使行業(yè)在系統(tǒng)建設(shè)上需要提供一套新的軟件架構(gòu),能夠解決傳統(tǒng)單體架構(gòu)無法解決的一些問題,例如擴(kuò)展性、移植性、維護(hù)性、效率性等。
微服務(wù)架構(gòu)的系統(tǒng)開發(fā)是將單體應(yīng)用拆分成為一系列小型服務(wù)程序的過程,服務(wù)程序間可獨立部署、可控制實現(xiàn)的復(fù)雜度、可采用不同的技術(shù)路線且擴(kuò)展方便,每個服務(wù)只需關(guān)注一個具體業(yè)務(wù)功能的實現(xiàn),例如核心系統(tǒng)中的保單查詢微服務(wù)、理賠立案微服務(wù)等,過程實現(xiàn)相對簡單。由于實現(xiàn)可采用不同的技術(shù)路線,每個微服務(wù)可由不同的技術(shù)團(tuán)隊進(jìn)行獨立開發(fā)部署。微服務(wù)是獨立運行的,它區(qū)別與傳統(tǒng)的單體架構(gòu)有兩大較為明顯的優(yōu)勢:擴(kuò)展性和隔離性。每個微服務(wù)程序可根據(jù)需求獨立擴(kuò)展,當(dāng)系統(tǒng)需要頻繁發(fā)布不同程序時,保證了其他系統(tǒng)功能模塊的可用性,是系統(tǒng)持續(xù)交付的基礎(chǔ),是核心業(yè)務(wù)系統(tǒng)的不間斷運行強有力的保障。擴(kuò)展性允許我們快速地添加集群服務(wù),提升系統(tǒng)綜合服務(wù)能力,而傳統(tǒng)的單體架構(gòu)如需滿足這些,往往需要在軟件及硬件上進(jìn)行重新架構(gòu)。隔離性將微服務(wù)程序分隔為一個個獨立運行的單元,系統(tǒng)運行時,某一單元自身的崩潰或失敗往往只影響自己或部分其他微服務(wù)程序,但不會造成系統(tǒng)整體的崩潰,在系統(tǒng)運維人員根據(jù)服務(wù)定位和解決問題的過程中,保證了系統(tǒng)其他功能的正常使用,有效的解決了系統(tǒng)“一崩全崩”的情況,大大地增加了系統(tǒng)的可用性及可靠性。
圖1 ? ?單體架構(gòu)結(jié)構(gòu)圖
圖2 ? ?微服務(wù)架構(gòu)結(jié)構(gòu)圖
一、架構(gòu)創(chuàng)新
微服務(wù)架構(gòu)的創(chuàng)新可從框架提供的部分組件上進(jìn)行分析。微服務(wù)架構(gòu)的開發(fā)框架很多,例如Dubbo、Motan等,而Spring Cloud是目前使用較多,資源相對豐富的開發(fā)框架之一,本文將以Spring Cloud框架應(yīng)用于核心業(yè)務(wù)系統(tǒng)進(jìn)行架構(gòu)創(chuàng)新上的探討。Spring Cloud是采用Spring Boot技術(shù)實現(xiàn)的云應(yīng)用開發(fā)框架,Spring boot專注于快速、方便地集成個體應(yīng)用服務(wù),而Spring Cloud則是關(guān)注全局的服務(wù)治理框架。它將復(fù)雜的配置進(jìn)行屏蔽,提供了一套易于部署和維護(hù)的組件工具包,例如Eureka(服務(wù)發(fā)現(xiàn))、Zuul(服務(wù)網(wǎng)關(guān))等,并可快速對接云平臺資源。下圖3為核心業(yè)務(wù)系統(tǒng)基于Spring Cloud框架的技術(shù)實現(xiàn)。
1.1服務(wù)注冊與發(fā)現(xiàn)
以SpringClound中的Eureka注冊中心為例,服務(wù)注冊即微服務(wù)程序?qū)⒎?wù)信息注冊至Eureka中心,服務(wù)信息主要包括微服務(wù)程序所在服務(wù)器主機的IP地址、服務(wù)端口號、訪問協(xié)議及服務(wù)狀態(tài)等,各個實例通過注冊中心獲取依賴服務(wù),該方式與單體架構(gòu)中通過IP地址訪問服務(wù)的方式有很大的區(qū)別。服務(wù)發(fā)現(xiàn)即實例在注冊中心中可得到其他服務(wù)實例并請求提供對應(yīng)的服務(wù)。對于核心業(yè)務(wù)系統(tǒng)而言,我們可將承保、理賠、再保等微服務(wù)程序注冊至服務(wù)注冊中心,為保證各個微服務(wù)程序(功能模塊)具備高可用性及靈活性,注冊中心自帶的心跳檢測、健康監(jiān)控排查等技術(shù)為其實現(xiàn)提供了技術(shù)保障。在整個注冊中心中,由于微服務(wù)程序自身的一些問題,服務(wù)狀態(tài)都是動態(tài)變化的,如何處理一些無效的微服務(wù)實例是需要思考的問題,而在Eureka中,實例與其通過心跳的方式保持聯(lián)系,一旦發(fā)現(xiàn)心跳缺失,Eureka會主動將其從現(xiàn)有環(huán)境進(jìn)行刪除,保障了整個注冊中心所有服務(wù)的可用性。這種服務(wù)注冊與發(fā)現(xiàn)的軟件架構(gòu)設(shè)計模式是信息技術(shù)上的一次革新,它解決了諸如服務(wù)接口IP地址發(fā)生變化而導(dǎo)致其他應(yīng)用無法調(diào)用等一系列原本需要花較大代價才能解決的問題。
1.2服務(wù)網(wǎng)關(guān)
服務(wù)網(wǎng)關(guān)的作用在微服務(wù)架構(gòu)中主要體現(xiàn)在實現(xiàn)動態(tài)路由,監(jiān)控,彈性以及安全性。它可以幫助我們實現(xiàn)以下一些功能:(1)網(wǎng)關(guān)的核心之一是過濾器,身份認(rèn)證與安全可通過過濾器進(jìn)行識別,同時可拒絕所有不滿足的請求。(2)監(jiān)控和審查邊緣有意義的數(shù)據(jù)并對其進(jìn)行跟蹤和統(tǒng)計,從而形成各類精確的視圖。(3)將各類服務(wù)請求動態(tài)的路由至微服務(wù)集群,保障了服務(wù)間的調(diào)用性能。(4)分配相應(yīng)容量至各種類型的請求,當(dāng)超出容量限制時,自動限制其請求。(5)建立靜態(tài)響應(yīng)處理機制,在邊緣位置處直接生成部分響應(yīng),避免其轉(zhuǎn)發(fā)至內(nèi)部集群。而應(yīng)用于系統(tǒng)的架構(gòu)中,其一網(wǎng)關(guān)可以用來做接口聚合,可將多個請求結(jié)果進(jìn)行合并并將其返回,這樣外部只需要調(diào)用指定的接口就可以得到業(yè)務(wù)數(shù)據(jù),大大降低了程序調(diào)用間的復(fù)雜性。其二通過網(wǎng)關(guān)可以標(biāo)識當(dāng)前訪問者的身份和部分權(quán)限,較為合理的解耦大部分重復(fù)代碼,而且系統(tǒng)中如果存在具體復(fù)雜的權(quán)限需求可以在應(yīng)用中再次通過身份標(biāo)識來獲取權(quán)限。在Spring Cloud框架中,一般采用Zuul組件來實現(xiàn)服務(wù)網(wǎng)關(guān),將Zuul作為從設(shè)備及UI到系統(tǒng)服務(wù)后端所有請求的前門。
1.3服務(wù)監(jiān)控與保護(hù)
單體架構(gòu)屬于單塊應(yīng)用的結(jié)構(gòu),而微服務(wù)是多服務(wù)多應(yīng)用的結(jié)構(gòu)。在單體架構(gòu)中,要掌握單塊應(yīng)用的運行情況,因其只會發(fā)生單一的故障點,要追蹤問題的發(fā)生和修訂問題相對來說比較容易和解決。而在微服務(wù)的結(jié)構(gòu)中,由于其運行個體多、部署方式多樣,問題點往往會出現(xiàn)在不同的地方,而且服務(wù)產(chǎn)生的日志非常多,因此要從大量且相互隔離的日志中找到問題所在就會變得非常困難,對于多服務(wù)的監(jiān)控,獲取服務(wù)的狀態(tài)相對更加復(fù)雜。系統(tǒng)微服務(wù)之間一般通過REST API的方式進(jìn)行相互調(diào)用,為了快速定位系統(tǒng)的問題所在,服務(wù)監(jiān)控顯得尤為重要,一般來說可以從硬件層面、網(wǎng)絡(luò)層面、系統(tǒng)層面、應(yīng)用層面、服務(wù)訪問層面進(jìn)行監(jiān)控,從這些層面采集相應(yīng)的狀態(tài)數(shù)據(jù),然后進(jìn)行匯總、存儲、并分析,一旦某項指標(biāo)超出規(guī)定的閾值,則通過監(jiān)控進(jìn)行報警,在接收到報警通知之后做出及時應(yīng)對以改變目前系統(tǒng)狀態(tài)不健康的局面。架構(gòu)中一般可以通過預(yù)置的調(diào)控開關(guān)來調(diào)整應(yīng)用的狀態(tài),要么重啟服務(wù)或者進(jìn)行服務(wù)降級。例如在Spring Cloud微服務(wù)架構(gòu)中,可采用Hystrix Turbine聚合監(jiān)控等監(jiān)控組件來達(dá)到監(jiān)控服務(wù)正常運行的目的。另外,如果要對Spring Cloud中的微服務(wù)進(jìn)行完備的監(jiān)控,架構(gòu)可以從內(nèi)部以“白盒”的形式進(jìn)行監(jiān)控,也可以以外部服務(wù)訪問者的視角來對微服務(wù)進(jìn)行模擬訪問(即“黑盒”的形式),從而內(nèi)外兼修地構(gòu)建一套針對微服務(wù)的應(yīng)用監(jiān)控體系,達(dá)到保護(hù)系統(tǒng)正常運行的目的。
二、架構(gòu)面臨的問題
隨著領(lǐng)域驅(qū)動設(shè)計、持續(xù)交付、按需虛擬化、基礎(chǔ)設(shè)施自動化、小型團(tuán)隊自治化、大型系統(tǒng)集群化等實踐流行的背景下,微服務(wù)架構(gòu)在軟件架構(gòu)設(shè)計中帶來了一些傳統(tǒng)單體架構(gòu)無法實現(xiàn)的新技術(shù),引領(lǐng)軟件開發(fā)行業(yè)技術(shù)的新方向。但微服務(wù)架構(gòu)在解決了該解決問題的同時,又帶來了新的一些技術(shù)問題,例如服務(wù)間通信變得比單體架構(gòu)復(fù)雜,系統(tǒng)運維的成本大幅提升,服務(wù)“微”化之后,服務(wù)的數(shù)量大大增加了。微服務(wù)程序間的操作一般是以API的方式進(jìn)行相互間的調(diào)用,該方式在數(shù)據(jù)的傳輸時長和訪問時間上相對單體架構(gòu)要增加不少,而且調(diào)用方式更加復(fù)雜,對結(jié)構(gòu)之間的調(diào)用效率存在不少問題,如何解決采用該架構(gòu)帶來的問題是在系統(tǒng)架構(gòu)選型時需要慎重考慮的。目前,微服務(wù)架構(gòu)需要關(guān)注的問題主要圍繞以下幾個方面:(1)微服務(wù)運行的可靠性:微服務(wù)間采用了遠(yuǎn)程調(diào)用的機制,如遇到網(wǎng)絡(luò)問題或者其中的一個服務(wù)節(jié)點出現(xiàn)故障,會導(dǎo)致服務(wù)間調(diào)用失敗,當(dāng)微服務(wù)數(shù)量越來越多時,故障點也隨之增加,為使系統(tǒng)穩(wěn)定運行,就需要有一個較為充分的保障機制,否則,系統(tǒng)的可靠性就無法保證。(2)分布式的復(fù)雜性:微服務(wù)支持分布式部署,各服務(wù)間的調(diào)用存在網(wǎng)絡(luò)延遲等問題,這些問題對系統(tǒng)部分功能來說往往是致命的,是需要提供解決方案的。(3)架構(gòu)運維成本高:微服務(wù)架構(gòu)是一個全新的架構(gòu),需要技術(shù)人員具備較高的知識儲備,需深入了解微服務(wù)中注冊與發(fā)現(xiàn)、網(wǎng)關(guān)、監(jiān)控、負(fù)載均衡、自動化集成部署等一系列技術(shù),提高了系統(tǒng)運維的成本。(4)性能方面的考慮:由于服務(wù)間采用了跨網(wǎng)絡(luò)、基于進(jìn)程的調(diào)用方式,性能部分依賴外部條件,例如網(wǎng)絡(luò)帶寬、服務(wù)器硬件等,造成微服務(wù)架構(gòu)較單體架構(gòu)存在一定的影響。(5)數(shù)據(jù)的同步問題:分布式事務(wù)管理在微服務(wù)架構(gòu)中需要經(jīng)過多個節(jié)點來保障數(shù)據(jù)的同步,技術(shù)實現(xiàn)相對單體架構(gòu)要復(fù)雜很多,成本也會增加很多。
保險行業(yè)的核心業(yè)務(wù)系統(tǒng)與傳統(tǒng)的軟件應(yīng)用系統(tǒng)在技術(shù)架構(gòu)上存在許多共同之處,但在系統(tǒng)安全性、穩(wěn)定性、數(shù)據(jù)一致性、系統(tǒng)持續(xù)性、可維護(hù)性等方面有著更高的要求,如何讓微服務(wù)架構(gòu)應(yīng)用于保險行業(yè)的核心業(yè)務(wù)系統(tǒng),架構(gòu)自身存在的一些問題是需要去思考和解決的。
三、結(jié)束語
基于當(dāng)前科技及互聯(lián)網(wǎng)經(jīng)濟(jì)高速發(fā)展的時代背景下,計算機信息技術(shù)已深入廣泛的應(yīng)用于各行各業(yè)中,如何讓新的信息技術(shù)更好地、及時地應(yīng)用于傳統(tǒng)行業(yè),是我們一直需要研究和探討的課題。而隨著中國保險業(yè)務(wù)的興起和迅猛發(fā)展,為了不斷適應(yīng)現(xiàn)代保險工作的需求,保險公司對于現(xiàn)代化核心業(yè)務(wù)系統(tǒng)的需求越來越迫切。保險公司必須借助先進(jìn)的信息IT技術(shù)構(gòu)建一套規(guī)范及健全的保險管理體系,從而提高保險公司的管理效率,降低公司運維的成本。保險行業(yè)核心業(yè)務(wù)系統(tǒng)是屬于保險管理體系的其中一類系統(tǒng),由于保險公司本身受到國家銀保監(jiān)會的監(jiān)管,因此對核心業(yè)務(wù)建設(shè)的各項要求相比傳統(tǒng)的應(yīng)用軟件系統(tǒng)更高。保險行業(yè)所在的公司在開發(fā)一套成熟的核心業(yè)務(wù)系統(tǒng)后,由于其復(fù)雜性,一般不會輕易地對系統(tǒng)進(jìn)行技術(shù)架構(gòu)上的更新。但信息技術(shù)的發(fā)展日新月異,早期的技術(shù)架構(gòu)或已滿足不了現(xiàn)代系統(tǒng)建設(shè)的要求。因此,如何讓一套新的技術(shù)架構(gòu)更新應(yīng)用于原有行業(yè)系統(tǒng)的開發(fā)而又不帶來新的風(fēng)險是值得我們?nèi)?quán)衡與探討的。
參 ?考 ?文 ?獻(xiàn)
[1] https://spring.io/projects/spring-cloud.
[2] 方志朋. 深入理解Spring Cloud與微服務(wù)構(gòu)建第2版 2020.3
[3] Sam Newman.微服務(wù)設(shè)計 2016.5