陳龍 劉勇
摘 要:一方面,隨著互聯網高速發展,IT技術日新月異變化,傳統的單塊架構應用面臨著越來越多的挑戰,已無法適應快速迭代更新,其改造與重構勢在必行。另一方面,隨著敏捷開發、持續集成交付、DevOps、云計算、虛擬技術docker化等的深入人心,微服務的誕生勢在必行。微服務架構是一項在云中部署應用和服務的新架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,滿足用戶需求,實現了可擴展性、易伸縮性及高可用性。首先介紹了微服務架構的定義及工作原理;然后與傳統架構進行對比,并分析兩者優缺點;接著介紹了微服務架構現有的應用框架;最后提出了微服務架構未來的發展方向。
關鍵詞:微服務;架構;SOA;SpringCloud;Dubbo
1引言
隨著市場的快速發展,業務的不斷擴大,單塊架構應用面臨著越來越多的挑戰,其改造與重構勢在必行。而微服務架構的誕生,是互聯網高速發展,虛擬化技術應用以及持續交付、DevOps深入人心的綜合產物。隨著用戶需求個性化、產品生命周期變短,微服務架構是未來軟件軟件架構朝著靈活性、擴展性、伸縮性以及高可用性發展的必然方向。同時,以Docker為代表的容器虛擬化技術的盛行,將大大降低微服務實施的成本,為微服務落地以及大規模使用提供了堅實的基礎和保障。
2微服務架構的定義及原理
ThoughtWorks的首席科學家,馬丁 -福勒先生對微服務的這段描述,似乎更加具體、貼切,通俗易懂:微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相溝通(通常是基于HTTP協議的RESTful API)。每個服務都圍繞著具體業務進行構建,并且能夠被獨立的部署到生產環境、類生產環境等。另外,應當盡量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建。
3 微服務與傳統架構的區別
3.1單塊架構
傳統的單塊架構是以技術分層,譬如表示層、業務邏輯層、數據訪問層。單塊架構雖然邏輯上分為3層,但是它依舊是功能集中、代碼和數據中心化的一個發布包,運行在同一個機器的同一個進程中。當業務量較小時,它擁有易開發、易測試、易部署、易水平伸縮等多項優勢。
但隨著業務量擴大化、用戶需求個性化、產品生命周期變短、市場需求不穩定等因素的出現,單塊架構系統面臨著越來越多的挑戰。
主要提現在以下六點:1)維護成本增加;2)持續交付周期長;3)新人培養周期長;4)技術選型成本高;5)可伸縮性差;6)構建全功能團隊難。
3.2 SOA架構與微服務
SOA(Service-Oriented Architecture),是一種粗粒度、松耦合服務架構,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立于實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。劉穎說“SOA 即面向服務的架構,大多數企業采用 SOA 來降低項目業務之間的耦合程度, 將龐大的項目拆分成多個獨立的微小服務, 服務之間根據定義標準的接口規范通過 API 接口的形式進行通信,這樣不僅可以使項目解耦,同時簡化了復雜的業務流程,可以根據業務需要從不同的入口進行處理,提高了系統調度的靈活性,但是與此同時也會引入一些新的問題,由于各個服務之間需要約定標準和規范,才能保證正常的使用,這樣限制了業務多元化發展,SOA 相當于向外部提供了定制化的服務。 而且在項目部署的時候習慣將基礎服務生成 jar包,供其他業務服務調用的時候添加依賴,這其實在項目部署的時候并沒有將整體項目進行徹底的拆分, 服務與服務之間依然存在依賴關系,為了能夠更好的解決上述問題,微服務架構便應運而生了”。
仔細分析SOA架構與服務器架構的概念,二者的基本思想幾乎一致,但是從具體的實現出發,二者大相徑庭。
相比傳統SOA的服務實現方式,微服務更具有靈活性、可實施性以及可擴展性,其強調的是一種獨立測試、獨立部署、獨立運行的軟件架構模式。
4. 微服務架構的優點和不足
4.1 微服務架構優點
微服務架構的優點主要有以下五個方面:
(1)復雜度可控:在將應用分解的同時,規避了原本復雜度無止境的積累。每一個微服務專注于單一功能,并通過定義良好的接口清晰表述服務邊界。由于體積小、復雜度低,每個微服務可由一個小規模開發團隊完全掌控,易于保持高可維護性和開發效率。
(2)獨立部署:由于微服務具備獨立的運行進程,所以每個微服務也可以獨立部署。當某個微服務發生變更時無需編譯、部署整個應用。由微服務組成的應用相當于具備一系列可并行的發布流程,使得發布更加高效,同時降低對生產環境所造成的風險,最終縮短應用交付周期。
(3)技術選型靈活:微服務架構下,技術選型是去中心化的。每個團隊可以根據自身服務的需求和行業發展的現狀,自由選擇最適合的技術棧。由于每個微服務相對簡單,當需要對技術棧進行升級時所面臨的風險較低,甚至完全重構一個微服務也是可行的。
(4)容錯:當某一組建發生故障時,在單一進程的傳統架構下,故障很有可能在進程內擴散,形成應用全局性的不可用。在微服務架構下,故障會被隔離在單個服務中。若設計良好,其他服務可通過重試、平穩退化等機制實現應用層面的容錯。
(5)擴展:單塊架構應用也可以實現橫向擴展,就是將整個應用完整的復制到不同的節點。當應用的不同組件在擴展需求上存在差異時,微服務架構便體現出其靈活性,因為每個服務可以根據實際需求獨立進行擴展。
4.2 微服務架構的不足
微服務架構的優點主要有以下六個方面:
(1)運營開銷。更多的服務也就意味著更多的運營,產品團隊需要保證所有的相關服務都有完善的監控等基礎設施,傳統的架構開發者只需要保證一個應用正常運行,而現在卻需要保證幾十甚至上百道工序高效運轉,這是一個艱巨的任務。
(2)DevOps要求。使用微服務架構后,開發團隊需要保證一個Tomcat集群可用,保證一個數據庫可用,這就意味著團隊需要高品質的DevOps和自動化技術。而現在,這樣的全棧式人才很少。
(3)隱式接口。服務和服務之間通過接口來“聯系”,當某一個服務更改接口格式時,可能涉及到此接口的所有服務都需要做調整。
(4)重復勞動。在很多的服務中可能都會使用到同一個功能,而這一功能點沒有足夠大到提供一個服務的程度,這個時候可能不同的服務團隊都會單獨開發這一功能,重復的業務邏輯,這違背了良好的軟件工程中的很多原則。
(5)分布式系統的復雜性。微服務通過REST API或消息來將不同的服務聯系起來,這在之前可能只是一個簡單的遠程過程調用。分布式系統也就意味著開發者需要考慮網絡延遲、容錯、消息序列化、不可靠的網絡、異步、版本控制、負載等,而面對如此多的微服務都需要分布式時,整個產品需要有一整套完整的機制來保證各個服務可以正常運轉。
(6)事務、異步、測試面臨挑戰。跨進程之間的事務、大量的異步處理、多個微服務之間的整體測試都需要有一整套的解決方案,而現在看起來,這些技術并沒有成熟。
5. 微服務發展現狀(SpringCloud dubbo 以及網易云整合,優缺點)
目前應用微服務架構的框架主要有兩種,一種是dubbo,另一種是spring cloud。本文從四個方面對兩者進行簡要分析。第一,背景方面來看,Dubbo是阿里巴巴服務化治理的核心框架,并被廣泛應用于阿里巴巴集團的各成員站點,在國內十分流行。spring-colud是一種云端分布式架構解決方案,利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,在國外影響較大;第二,從社區活躍度的角度來看,在Github上,截止今日(2018年10月9月),Dubbo的最近一次更新在一月之前,更新頻率不高且中途存在長時間不更新的情況,而SpringCloud的最近一次更新是在5分鐘之前,活躍度十分高;第三,架構完整度,根據微服務架構在各方面的要素,看看Spring Cloud和Dubbo都提供了哪些支持。
從上圖可看出,Dubbo只實現了微服務整體架構中的部分組件,需要與其他組件組合才能形成完整的微服務架構,比如其中的分布式配置可以配合淘寶的diamond、百度的disconf來實現,服務跟蹤可以使用京東開源的Hydra,批量任務可以使用當當開源的Elastic-Job等等,因此,可將Dubbo看作一個類似Netflix的子集。從文檔質量的角度來看,Dubbo的文檔 可以說在國內開源框架中算是一流的,非常全,并且講解的也非常深入,由于版本已經穩定不再更新,所以也不太會出現不一致的情況,另外提供了中文與英文兩種版本,對于國內開發者來說,閱讀起來更加容易上手,這也是dubbo在國內更火一些的原因吧。Spring Cloud由于整合了大量組件,文檔在體量上自然要比dubbo多很多,文檔內容上還算簡潔清楚,但是更多的是偏向整合,更深入的使用方法還是需要查看其整合組件的詳細文檔。與此同時,網易云推出了輕舟微服務,即圍繞應用和微服務打造的一站式 PaaS 平臺,幫助用戶快速實現易接入、易運維的微服務解決方案。它的優勢主要集中于以下四點。第一,基于開源、兼容開源。全面兼容SpringCloud和dubbo框架,支持已有的服務框架平滑遷移;第二,支持大規模業務的生產環境驗證;第三,低成本、易接入。支持代碼零改動支持微服務框架,支持應用擴撲可視化,支持平臺統一的平臺認證和權限管控;第四,智能運維和立體化監控。支持實時監控,精準掌控服務健康狀況。提供服務拓撲,調用鏈跟蹤可視化呈現。采用多維度關聯分析,預防系統級故障。由此可見,網易云方便了中小企業更快捷的接入微服務框架,降低了中小企業的技術成本,同時使微服務的應用更加廣泛。
結束語
綜上所述,微服務架構正在逐步走向完善與成熟。它解決了單塊架構的痛點,相對SOA架構,微服務真正實現了單個業務系統內部真正的組件化和服務化,可獨立地進行開發、管理和加速,使得部署、管理和交付變得更加簡單,充分體現了它的靈活性和可擴展性。同時,不論是國內的dubbo框架還是國外的SpringCloud,亦或是網易云整合的輕舟微服務平臺,都具有非常高的可行性,隨著它們不斷的發展與完善,我們堅信微服務架構將在未來的架構之路上扮演者重要角色。
參考文獻:
[1] 侯海平,李龍.基于Dubbo服務治理模式的單體架構改造[J].通化師范學院學報,2018,39(8):64-68.
[2] 王方旭. 基于SpringCloud實現業務系統微服務化的設計與實現[J]. 電子技術與軟件工程, 2018(8).
[3] 王方旭. 基于Spring Cloud和Docker的微服務架構設計[J]. 中國信息化, 2018(3).
[4] 張峰. 微服務技術構建大規模web系統的研究[J]. 科技創新與應用, 2017(22):48-49.
[5] 王紀軍, 張斌, 顧永生,等. 云環境中Web應用的微服務架構評估[J]. 計算機系統應用, 2017, 26(5):9-15.
[6] 王磊. 微服務架構與實踐[M]. 電子工業出版社, 2016.
[7]王磊.解析微服務架構(一)單塊架構系統以及其面臨的挑戰 [2015-05-11].http://www.infoq.com/cn/articles/analysis-thearchitecture-of-microservice-part-01
[8]解析微服務架構(二)微服務架構綜述
[2015-07-10]. http://www.infoq.com/cn/articles/analysis-the-architecture-of-microservice-part-02
[9]張晶, 王琰潔, 黃小鋒. 一種微服務框架的實現[J]. 計算機系統應用, 2017, 26(4):82-86.
作者簡介:
陳龍,三峽大學計算機與信息學院,碩士研究生在讀,研究方向:軟件工程。
劉勇,三峽大學計算機與信息學院,博士,教授,研究方向:計算機應用。