唐志濤+劉星
摘 要:企業(yè)信息化隨著新技術(shù)的不斷發(fā)展,也在不斷進行演進,傳統(tǒng)的單體應(yīng)用架構(gòu)已經(jīng)存在越來越多的挑戰(zhàn)。微服務(wù)架構(gòu)具有越來越多的優(yōu)勢,特別是對于大型企業(yè)的應(yīng)用系統(tǒng),開發(fā)簡單、按需擴展等優(yōu)點,非常適合大型企業(yè)內(nèi)部應(yīng)用的統(tǒng)一化演進。文章主要通過對傳統(tǒng)單體應(yīng)用和微服務(wù)應(yīng)用的對比,分析大型企業(yè)內(nèi)部信息化應(yīng)用系統(tǒng)的演進趨勢。
關(guān)鍵詞:單體應(yīng)用架構(gòu);微服務(wù)架構(gòu);微服務(wù)優(yōu)點;企業(yè)應(yīng)用架構(gòu)趨勢
中圖分類號:F270.7 文獻標志碼:A 文章編號:2095-2945(2017)35-0120-02
1 企業(yè)應(yīng)用系統(tǒng)傳統(tǒng)架構(gòu)
企業(yè)應(yīng)用系統(tǒng)是利用計算機技術(shù),形成各種軟件系統(tǒng),幫助企業(yè)更好地管理企業(yè)生產(chǎn)經(jīng)營中的各種信息,以提高企業(yè)的競爭力和經(jīng)濟效益。由于社會的發(fā)展變化,企業(yè)經(jīng)營環(huán)境也隨之不斷變化,因此應(yīng)用系統(tǒng)也必須不斷升級,滿足新的需求。
目前經(jīng)常被企業(yè)使用的軟件有:財務(wù)軟件、OA軟件、ERP系統(tǒng)、客戶關(guān)系管理軟件、人力資源管理軟件等。這些應(yīng)用系統(tǒng)經(jīng)過多年演進,從C/S架構(gòu)演進為為B/S架構(gòu)的,但基本上都是作為一個單元進行構(gòu)建。隨著軟件系統(tǒng)的功能不斷增加,這個整體變得越來越龐大。系統(tǒng)有任何修改,都需要重新構(gòu)建并部署整個應(yīng)用。原因就是上述系統(tǒng)采用的是一體化架構(gòu)方式,稱之為單體架構(gòu)應(yīng)用。在單體應(yīng)用中,所有處理請求的邏輯都運行在單個進程中,各個邏輯之間如果需要互相調(diào)用,那么直接進行,在進行部署時,全部功能要一起部署。
2 單體架構(gòu)特點
2.1 優(yōu)點
單體架構(gòu)的應(yīng)用由于全部的應(yīng)用邏輯都在一個整體中,并且運行在一個進程里面,因此,在應(yīng)用的開發(fā)、測試、部署、維護、擴展方面,都具有一定的優(yōu)勢。
(1)易于組織
單體架構(gòu)的應(yīng)用是傳統(tǒng)方式的架構(gòu),為人所熟知,對于設(shè)計、開發(fā)人員來說,最容易上手,學(xué)習(xí)成本很低。
(2)易于開發(fā)
單體架構(gòu)的應(yīng)用在開發(fā)時,采用傳統(tǒng)技術(shù)和工具,易于開發(fā)調(diào)試。并且由于全部的邏輯都在一個整體之中,相互之間調(diào)用不需要考慮跨進程、跨服務(wù)器的情況,也易于軟件的設(shè)計和開發(fā)。
(3)易于測試
單體架構(gòu)應(yīng)用程序是一個程序,因此非常容易被測試。只要部署好測試測試環(huán)境,全部功能都可以進行測試,非常方便。
(4)易于部署
對單體架構(gòu)的應(yīng)用程序而言,由于所有的功能最終會達成一個安裝包,因此對安裝包的安裝比較簡單,一般只要拷貝到服務(wù)器相應(yīng)的目錄下,修改一定的配置后,就部署完成了。
(5)易于維護
單體架構(gòu)的應(yīng)用運行時,是作為一個整體進行。在出現(xiàn)問題的時候,只要檢查該程序本身的運行時刻快照、日志,進行錯誤檢查即可,查錯相對容易。
(6)易于水平伸縮
由于單體應(yīng)用全部功能都在一個安裝包內(nèi),因此,水平擴展就是在另外的服務(wù)器上進行新的部署,然后進行一定的配置就可以了,然后通過負載均衡器做多個節(jié)點之間進行負載均衡。
2.2 缺點
隨著企業(yè)規(guī)模及業(yè)務(wù)的不斷變化,各種對應(yīng)用系統(tǒng)的需求也不斷增加,單體架構(gòu)面臨的挑戰(zhàn)越來越多。例如,系統(tǒng)功能不斷增多、代碼庫變得巨大;用戶量攀升,負載變重,性能變慢。單體架構(gòu)的可維護性、靈活性不斷降低,各種成本不斷增加。
(1)培訓(xùn)成本升高
隨著應(yīng)用系統(tǒng)的復(fù)雜和龐大,新成員需要進行更長時間的培訓(xùn),才可以成為一名合格的開發(fā)團隊成員,培訓(xùn)成本隨著系統(tǒng)規(guī)模不斷上升。
(2)技術(shù)選型影響大
由于單體架構(gòu)應(yīng)用系統(tǒng)是作為一個整體開發(fā)和運行,因此全部功能都采用同一個技術(shù)路線。因此,如果在后期要修改技術(shù)路線,需要花費的代價巨大,甚至整個系統(tǒng)要推倒重來。這樣,前期的技術(shù)選型要非常慎重。
(3)后續(xù)開發(fā)難度大
隨著應(yīng)用代碼庫的巨大化,新增功能開發(fā)要非常小心,不能影響已有功能,測試范圍也要不斷增大,以保證整個系統(tǒng)的質(zhì)量。有時原有代碼在架構(gòu)上的限制,會導(dǎo)致新增代碼很困難,不得不屈從于原有結(jié)構(gòu),采用打補丁方式進行,使得代碼合理性變得越來越差。
(4)持續(xù)交付周期長
隨著應(yīng)用系統(tǒng)的功能越來越多,代碼越來越復(fù)雜,設(shè)計、開發(fā)、測試周期都會相應(yīng)增加,以確保原有功能不受影響,這就大大延長了交付的時間。
(5)維護成本增加
由于單體應(yīng)用系統(tǒng)全部代碼在一個整體中,代碼耦合度高。這導(dǎo)致分析缺陷、定位缺陷、修復(fù)缺陷的成本相應(yīng)增高。同時,在開發(fā)人員對全局功能缺乏深度理解時,修復(fù)一個缺陷,容易引入其他缺陷,增加維護成本。
(6)穩(wěn)定性不高
單體應(yīng)用全部功能都在一個進程中運行,出現(xiàn)任何一個致命問題,整個進程都會受影響停止服務(wù),導(dǎo)致穩(wěn)定性不高。
(7)可伸縮性差
應(yīng)用系統(tǒng)不同功能對服務(wù)器硬件需求是不同的,有的功能可能要求CPU速度快,而有的功能要求內(nèi)存大。而由于不同功能的使用率不同,對整個系統(tǒng)進行水平擴展后,某些節(jié)點硬件資源的利用率會比較差,造成較大的浪費。
3 微服務(wù)架構(gòu)特點
隨著互聯(lián)網(wǎng)的高速發(fā)展和軟件開發(fā)技術(shù)、研發(fā)理論的不斷創(chuàng)新,敏捷、精益、持續(xù)交付方法論日益深入人心。在這些因素的共同作用下,誕生了微服務(wù)架構(gòu)。
微服務(wù)架構(gòu)(Microservice Architect)是一種架構(gòu)模式,它提倡將大的應(yīng)用劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,服務(wù)可以進行獨立部署,通過服務(wù)的組合為用戶提供最終價值。每個服務(wù)運行在其獨立的進程中,服務(wù)與服務(wù)間采用輕量級的通信機制互相溝通。不同服務(wù)可以采用不同的開發(fā)語言進行構(gòu)建,并且可以使用不同的數(shù)據(jù)存儲技術(shù)進行數(shù)據(jù)的保存。
3.1 優(yōu)點endprint
(1)強迫設(shè)計
微服務(wù)架構(gòu)下,各個服務(wù)獨立運行,不能像單體架構(gòu)時,直接代碼級調(diào)用。這就要求在設(shè)計時,對各個部分的功能考慮得非常清楚,并定義好各個服務(wù)的邊界。這種對設(shè)計階段的強迫性要求,往往會提高應(yīng)用系統(tǒng)質(zhì)量并減小后期修改工作量。
(2)開發(fā)簡單
微服務(wù)架構(gòu)下,每個服務(wù)內(nèi)部都具有高內(nèi)聚,服務(wù)之間具有低耦合的特點。開發(fā)人員每次僅僅需要面對一個服務(wù)進行開發(fā),邏輯相對簡單,代碼體量小。
(3)技術(shù)棧靈活
微服務(wù)架構(gòu)下,每個服務(wù)都獨立部署運行,服務(wù)間通過API進行調(diào)用。因此,不同服務(wù)可以選擇不同的技術(shù)實現(xiàn),技術(shù)棧的選擇是相當靈活的。即使后期某個服務(wù)技術(shù)路線需要修改,也代價較低,僅僅影響該服務(wù)本身。
(4)服務(wù)獨立無依賴
微服務(wù)架構(gòu)模式下每個微服務(wù)是獨立部署運行的,每個服務(wù)都可以做到多節(jié)點部署。當一個服務(wù)發(fā)生更新后,僅僅需要重新部署該服務(wù)即可,不依賴于其他服務(wù)。并且可以先更新該服務(wù)多個節(jié)點中的一個節(jié)點,測試沒有問題后,再更細其他的服務(wù)節(jié)點,使得持續(xù)化部署成為可能。
(5)獨立按需擴展
微服務(wù)架構(gòu)模式使得每個服務(wù)可以獨立進行擴展,運維人員可以對不同服務(wù)的需求,分別進行多點部署,更加充分利用硬件資源。
(6)可用性高
微服務(wù)架構(gòu)模式下,單個服務(wù)發(fā)生致命故障后,并不會對其他服務(wù)產(chǎn)生影響,可用性高。
3.2 不足
(1)設(shè)計難度增大
微服務(wù)架構(gòu)強調(diào)系統(tǒng)由多個服務(wù)構(gòu)成,服務(wù)內(nèi)部高耦合,服務(wù)之間低耦合。這就要求在系統(tǒng)設(shè)計之初,就需要對各個服務(wù)的功能、邊界劃分清晰、合理。如何設(shè)計合理的服務(wù)粒度,服務(wù)對業(yè)務(wù)的合理封裝,這往往不是一個簡單的任務(wù)。
此外,微服務(wù)應(yīng)用是分布式系統(tǒng),由此會帶來固有的復(fù)雜性。諸如怎么部署,出錯怎么辦,怎么保證數(shù)據(jù)的最后一致性;此外,還有微服務(wù)的粒度大小;如何避免一個服務(wù)改動導(dǎo)致的多個級聯(lián)服務(wù)的失敗等問題,都增大了設(shè)計的難度。
(2)保持數(shù)據(jù)一致性復(fù)雜度高
由于微服務(wù)架構(gòu)中每個服務(wù)都可以有自己的數(shù)據(jù)存儲方式,因此,當需要進行跨服務(wù)的數(shù)據(jù)更新操作時,會比較復(fù)雜,需要更新不同服務(wù)所使用的不同的數(shù)據(jù)庫。最終可能不得不使用一個最終一致性的方法,從而對開發(fā)者提出了更高的要求和挑戰(zhàn)。
(3)服務(wù)間通信成本高
微服務(wù)應(yīng)用是分布式系統(tǒng),服務(wù)之間的需要通過RPC或者REST方式進行通訊,必然增加了網(wǎng)絡(luò)訪問開銷。同時,還需要進行一定的數(shù)據(jù)轉(zhuǎn)換工作,也需要一定的資源消耗。
(4)系統(tǒng)集成測試相對復(fù)雜
測試微應(yīng)用架構(gòu)下的單個服務(wù)比較簡單,因為服務(wù)可以獨立部署。但是測試一個基于微服務(wù)架構(gòu)的完整應(yīng)用也是很復(fù)雜的任務(wù),因為需要將全部的服務(wù)都部署好、配置通。
(5)系統(tǒng)部署復(fù)雜
部署一個微服務(wù)應(yīng)用也很復(fù)雜,一個應(yīng)用由多個服務(wù)構(gòu)成,每個服務(wù)都可能有多個實例,這就造成許多需要配置、部署、擴展和監(jiān)控的工作。
(6)多服務(wù)運維難度大
微服務(wù)架構(gòu)系統(tǒng)是一個分布式系統(tǒng),多個服務(wù)運行在多臺服務(wù)器上。這需要運維人員掌握較多知識,具有綜合解決問題的能力。當系統(tǒng)出現(xiàn)問題時,可能涉及到不同服務(wù)的不同節(jié)點,問題解決難度和速度,都會變大。當然,通過系統(tǒng)監(jiān)控工具、自動化運維工具可以幫助運維人員更好地完成運維工作。
4 企業(yè)應(yīng)用系統(tǒng)架構(gòu)趨勢
隨著微服務(wù)架構(gòu)的應(yīng)用越來越多,未來基于為服務(wù)架構(gòu)的大型企業(yè)一體化應(yīng)用將逐漸成為企業(yè)應(yīng)用的發(fā)展方向。
在傳統(tǒng)單體應(yīng)用架構(gòu)下,企業(yè)多個應(yīng)用相互獨立,造成信息孤島。未解決這種孤島現(xiàn)象,主要是通過SOA技術(shù)來實現(xiàn)各個應(yīng)用系統(tǒng)之間的集成。但是這種集成應(yīng)用之間的交互粒度較粗,不能快速構(gòu)建一個新的應(yīng)用。
而采用微服務(wù)架構(gòu)之后,一個應(yīng)用可以分為兩部分,一部分為應(yīng)用部分,提供對外交互的界面;一部分為微服務(wù)部分,提供支撐應(yīng)用層的各種服務(wù)。微服務(wù)部分由眾多的微服務(wù)構(gòu)成,這些微服務(wù)可以獨立部署,對外提供服務(wù)。應(yīng)用部分是通過對服務(wù)層提供的服務(wù)進行組合調(diào)用,完成總體應(yīng)用。
當一個大型企業(yè)的眾多應(yīng)用都進行微服務(wù)架構(gòu)改造后,提供某項能力的微服務(wù)就不僅僅為某個應(yīng)用所獨有,它可以在眾多企業(yè)應(yīng)用之間被共享,大大提高了某個微服務(wù)的價值。通過這種微服務(wù)集合的方式,可以將原來的多個應(yīng)用系統(tǒng)最終融合成一個統(tǒng)一的應(yīng)用系統(tǒng)。當需要個新的功能時,不再是傳統(tǒng)的重新開發(fā),而是首先在微服務(wù)集中查找是否存在相似服務(wù),如果已經(jīng)存在,只需要進行部分改造即可。同時,頁可以通過眾多微服務(wù)之間的相互關(guān)聯(lián)調(diào)用,組合成一個新的微服務(wù)。這樣就可以極大的加快開發(fā)速度,提高效率,降低成本。
通過上述分析,企業(yè)信息化應(yīng)用系統(tǒng)架構(gòu)由傳統(tǒng)單體應(yīng)用架構(gòu)向微服務(wù)架構(gòu)進行演進是一個大的趨勢,未來的企業(yè)應(yīng)用系統(tǒng)將基于為服務(wù)架構(gòu)進行開發(fā)。
參考文獻:
[1]李忠民,齊占新.業(yè)務(wù)架構(gòu)的微應(yīng)用化與技術(shù)架構(gòu)的微服務(wù)化——兼談微服務(wù)架構(gòu)的實施實踐[J].科技創(chuàng)新與應(yīng)用,2016(35):95-96.
[2]郝哲偉,劉洋.基于微服務(wù)架構(gòu)下的企業(yè)微門戶平臺規(guī)劃[J].信息系統(tǒng)工程,2017(09):140-141.
[3]陳聰敏,陳晨.基于微服務(wù)的衍生品銷售管理平臺設(shè)計方案[J].電信工程技術(shù)與標準化,2017(09):22-27.endprint