薛皓辰,柳先輝
(同濟大學電子與信息工程學院,上海 201804)
現代制造業(yè)專業(yè)化分工越來越細,越來越多的制造企業(yè)將部分生產活動交給更專業(yè)的外部協(xié)同加工資源完成,從而專注于自身核心業(yè)務,快速、高質和低成本地生產市場所需的產品[1];除此之外,很多教育機構和實訓基地也需要這樣的制造技術資源對學生和工人進行初步培訓。但是,制造資源突破了地理范圍的制約,分散在不同的物理區(qū)域內,同時又相對獨立、功能和形式各異,要快速、靈活組織資源,就必須對其集成[2]。因此,需要制造技術資源服務平臺對分散的資源進行集成,并匹配對應的服務。傳統(tǒng)的制造技術資源平臺多采用單體應用的架構,但是隨著平臺業(yè)務要求的日趨多樣化和復雜化,單體架構設計的局限性開始顯現。存在的主要問題如下:
(1)系統(tǒng)健壯性不足。在單體架構的制造技術資源服務平臺中,很有可能因為對某一特定服務訪問人數的激增而導致特定服務的不可用。單體應用的一個顯著缺點就是服務相互不獨立,所以單體應用程序中某個模塊的癱瘓必將導致整個系統(tǒng)不可用[3]。
(2)部署復雜。制造技術資源平臺業(yè)務邏輯復雜,每一個資源服務的修改都需要重新編譯整個應用,非常繁瑣。
(3)伸縮擴展性不足。隨著制造技術資源平臺的訪問人數增加,平臺會對其中的某個特定模塊調優(yōu),在傳統(tǒng)的單體應用中,如果出現性能瓶頸只能對軟件整體進行擴展,無法滿足動態(tài)擴展的要求[4]。
針對以上問題,本研究提出一種新的微服務架構來滿足制造技術資源與服務平臺高可用、敏捷開發(fā)和動態(tài)擴展的要求。
微服務是一個新興的軟件架構,就是把一個大型的單個應用程序和服務拆分為數十個的支持微服務[5]。微服務的策略可以使復雜的業(yè)務邏輯松耦合,從而實現敏捷開發(fā)、動態(tài)擴展的目的。
微服務應用的一個最大的優(yōu)點是,它們往往比傳統(tǒng)的應用程序更有效地利用計算資源[6]。功能瓶頸的問題主要通過組件來解決,計算資源分配的最小單位是微服務,而不是應用,這樣就意味著可以充分靈活地利用現有的計算資源。
微服務應用程序的另一個好處是,它們更快且更容易更新[7]。在面對不同的需求時,可以讓不同的微服務承擔不同的職責,同時快速部署上線,讓用戶的需求盡早實現。
微服務應用程序的第3 個好處是,基于微服務架構的系統(tǒng)具備更高可用性和彈性[8]?;谖⒎占軜嫷南到y(tǒng)是去中心化的,當一個微服務下線時,其他同類的微服務將承擔相應的功能,對外仍可以提供服務,不會造成整個系統(tǒng)無法訪問。
Docker 是用Go 語言開發(fā)的,基于Linux 內核的CGroup、Namespace 以及AUFS 類的Union FS 技術。Docker 通過容器虛擬化、共享內核,把應用需要的運行環(huán)境、緩存環(huán)境、數據庫環(huán)境等封裝起來,以最簡單的方式支持其運行[9]。
傳統(tǒng)的服務架構應用部署方式是通過插件或腳本來安裝應用。這樣做的缺點是應用的運行、配置、管理、所有生存周期將與當前操作系統(tǒng)綁定,不利于應用的升級更新回滾等操作[10]。虛擬機是解決這一問題的一種方法,但是傳統(tǒng)虛擬機的創(chuàng)建速度和資源利用率會遠遠低于Docker。
新的微服務架構應用部署方式是通過部署Docker 來實現快速發(fā)布、自動運維、自動擴容和微服務的動態(tài)擴展。Docker 在實際應用中的作用主要體現在如下幾個方面:
(1)代碼管道化管理。使用Docker 能夠令代碼直接發(fā)布到生產環(huán)境中,實現端到端的發(fā)布流程管理。
(2)作為多租戶容器。Docker 有著靈活發(fā)布和運維的管理機制,可以作為云平臺的多租戶容器。
(3)應用隔離。在微服務架構中,需要把一個單體應用拆分為多個微服務,而多個應用服務部署在多個Docker 上即可實現應用間的隔離[11]。
微服務系統(tǒng)的整體架構如圖1 所示,基于微系統(tǒng)的服務平臺架構包含4 層:第一層為資源層,提供網絡協(xié)同制造過程中涉及的各類資源;第二層為服務層,建立虛擬資源池,實現對不同的資源與服務接入、感知、共享、協(xié)同和組合,形成微服務集群,并提供平臺引擎與工具;第三層為接口訪問層,實現平臺高效的對外接口,使用戶能夠通過一個便捷方式來使用平臺的資源;第四層為用戶層,技術資源的使用者、提供者等不同類型的用戶都可以通過不同的終端與服務平臺進行交互。
圖1 制造技術資源服務平臺架構
針對技術資源分布分散、服務能力具有差異性、資源信息平臺間缺乏共享渠道等問題,研究以數據抽象、數據映射、知識表示等為關鍵內容的,基于本體的技術資源與服務能力虛擬化技術,實現對技術資源與服務能力的高效組織和管理,為技術資源以及服務能力的查詢、管理、選擇、聚合等提供支持,將現實生活中的多種資源,例如技術成果、技術方案、專利信息等,通過技術資源虛擬化和服務能力虛擬化,異構為多種不同的資源池,并向上提供統(tǒng)一的數據接口,便于上層調用。
4.2.1 微服務集群
采用微服務技術降低服務間耦合程度,將粗粒度的應用層面服務拆解成細粒度的微服務,構建出由資源檢索、分析利用等構成的微服務集群,提高服務的內聚程度,使其具有隔離服務、按需彈性部署以及通信輕量化的特點,達到敏捷開發(fā)和部署的效果,最終能更快地響應服務動態(tài)組織的調用。針對微服務化后帶來的功能分散、資源消耗嚴重以及運維困難的問題,采用容器化技術對微服務進行編排管理,根據每個容器上部署微服務的不同進行資源的合理分配,最大化地利用服務器資源實現對微服務應用調度、資源管理、服務管理等多維度的統(tǒng)一管理,極大減少運維成本,達到統(tǒng)一功能的效果。主要采用Spring Cloud 微服務框架體系中的各個組件來實現微服務集群,具體包括:
(1)服務發(fā)現。在服務發(fā)現這一部分,采用的是Spring Cloud 提供的Eureka 組件。Eureka 組件分為Eureka server 和Eureka client 兩種。Eureka server中存儲服務注冊表,將Eureka server 分別部署到多個不同的物理服務器上,當一個Eureka 因為物理或其他不可逆因素造成損壞時,可以利用其他服務器上的Eureka server 正常運行,減輕運維的壓力。每個服務和客戶端都有Eureka client,服務端的client在server 中注冊后,需要和server 保持“心跳”,即在規(guī)定時間內確認該服務正常運行的狀態(tài),否則該服務會被移除??蛻舳说腸lient 通過網關訪問server,找到所需服務的接口,進行訪問。
(2)服務容錯。在服務容錯這一部分,采用的是Spring Cloud 提供的Hystrix 組件和鏈路追蹤的組件。微服務相比之前的單體應用,最大的優(yōu)勢在于當一個微服務出現調用異常時,可以及時地關閉當前出現異常的微服務,避免影響其余可以正常運行的微服務。利用Hystrix 組件,當一個微服務出現一定次數的異常請求的時候,開啟繼電器、關停當前服務。在這里,對于時效性要求不高的服務請求,將從緩存中拿出數據,返回用戶,使得用戶擁有更好的用戶體驗,之后等待一段時間后繼電器進入半開啟狀態(tài),嘗試再次調用該服務,如果該服務可以正常調用,繼電器關閉,否則繼電器開啟,繼續(xù)停用當前服務;利用輔助鏈路追蹤的組件,當服務調用失敗時,結合微服務的調用關系,快速確定出現問題的微服務。
(3)服務配置。在制造技術資源云平臺中的服務眾多,每個服務的配置也不盡相同,并且在后續(xù)的維護過程中也會繼續(xù)擴容、增加更多的微服務,而Spring Cloud 提供的Spring Cloud Config 組件可以統(tǒng)一管理每個微服務的配置信息[12]。
4.2.2 引擎及工具研發(fā)
圍繞技術資源服務平臺的構建,根據微服務架構的要求,本研究研發(fā)一系列公共套件、管控套件和運營管理套件,包括展現框架、可視化界面、消息隊列、數據緩存、系統(tǒng)日志等引擎以及服務注冊發(fā)現、統(tǒng)一數據訪問、第三方服務管控等工具,通過這些構件支撐微服務底層架構穩(wěn)定運行。
4.3.1 服務網關
服務網關負責接收客戶端請求,并將請求轉發(fā)到業(yè)務層上去。服務網關的核心功能就是負責服務請求路由、組合及協(xié)議轉換[13]。首先,所有的客戶端請求都會經過服務網關,然后服務網關再將服務請求路由到合適的微服務,以提供具體的服務處理,所以服務網關通常會通過編排多個微服務來處理一個服務請求。
4.3.2 請求處理過濾
服務網關作為整個系統(tǒng)與外界的門戶,負責外界對系統(tǒng)請求處理過程進行過濾,主要實現了安全訪問控制、監(jiān)控限流和自適應路由等功能[14]。通過Spring Security 框架從接口層面實現權限管理的功能,當某一用戶訪問無權限的服務時,返回錯誤信息,提示用戶無權訪問;當某一個接口在短時間內訪問量過大時,進入等待隊列等待,直至該接口空閑可用時再進行訪問。
4.3.3 負載均衡
負載均衡模塊是通過Spring Cloud 框架中的Zuul網關組件和Ribbon 微服務組件并結合Eureka Server實現。Zuul 網關可以實現外部和內部隔離,并保證后臺服務的安全性[15];同時,識別用戶的訪問權限,過濾不符合要求的請求。在用戶訪問量過大的時候,也可以采用令牌環(huán)的策略對接口限流,因為所有的請求都需要通過API Gateway,所以API Gateway 通常有著較高的負載。Ribbon 組件可以實現負載均衡的功能。如圖2 所示,客戶端通過http 請求的方式,訪問微服務網關,Zuul 網關對來自客戶端的請求進行過濾和轉發(fā)以及限流,防止短時間內過多的http請求導致系統(tǒng)阻塞;Ribbon 組件則選取負載量相對較低的服務進行組合,響應用戶請求。
圖2 微服務系統(tǒng)中服務注冊與發(fā)現模塊結構
針對技術資源服務平臺動態(tài)擴展、資源利用方式不斷衍生的需求,研究應用服務(APP)動態(tài)構建技術,包括應用服務功能規(guī)劃、人機交互接口定義、技術資源動態(tài)抽取、功能模塊動態(tài)封裝、基于服務平臺的動態(tài)部署等,通過應用服務動態(tài)構建技術實現技術,不斷擴展平臺的功能,并支撐技術資源利用生態(tài)體系的形成。
圖3 技術資源生態(tài)體系
本研究主要針對制造技術資源與服務,運用虛擬化技術異構各類資源池,探索使用微服務技術將龐大復雜的資源與服務進行拆解,并利用Spring Cloud 中所提供的組件及一系列包括消息隊列、數據緩存的中間件進行有效管理,使云平臺的開發(fā)和運維到達標準化、模塊化、組件化的目的,并利用Docker 技術實現對不同系統(tǒng)下的資源服務打包、移植,為應用創(chuàng)建輕量化、秒級部署、彈性伸縮的容器,實現最終敏捷開發(fā)的目的。最終通過應用APP 動態(tài)構建技術,為制造企業(yè)和相關教育機構提供統(tǒng)一的接口,實現各類資源的調用。
當前,我國提出了實施制造強國發(fā)展戰(zhàn)略,制造業(yè)處于高速發(fā)展的階段,但是在資源管理方面往往存在管理人員復雜、管理方式混亂、自動化程度低的問題,而通過微服務及容器化技術對傳統(tǒng)單體資源管理系統(tǒng)的改造,可以在很大程度上解決這一問題。