朱 廷,賁道偉
(上海振華重工(集團)股份有限公司智慧集團,上海 200125)
伴隨著移動互聯(lián)網(wǎng)的發(fā)展,Restful作為一種基于分布式架構,標準的API越來越普及,它小巧輕便,易于擴展,低耦合,支持各種平臺發(fā)布。為了滿足多種移動應用對碼頭設備的監(jiān)控數(shù)據(jù)的分發(fā),振華重工設計了標準的服務接口API,使用云平臺微服務和傳統(tǒng)UA REST實現(xiàn)了該服務系統(tǒng)的API,并使用接口測試工具Postman進行了測試[1]。
前端和后端程序共同組成了網(wǎng)絡應用程序。當前的發(fā)展趨勢是前端設備層出不窮。因此,必須有一種統(tǒng)一的接口方案,方便不同的前后端設備進行溝通。RESTful API就是目前較為成熟的互聯(lián)網(wǎng)應用程序的API設計理論。REST(Representational State Transfer)表述性狀態(tài)轉換,REST指的是一組架構約束條件和原則,支持分布式架構[2]。
REST是一種設計風格,REST包括幾個重要的設計原則[3]:①資源可以是視頻、圖像、文本等,抽象所有的物品作為資源;②每一個資源都有用一個URI作為唯一的資源標識符;③每個資源的操作使用統(tǒng)一的接口,使用HTTP協(xié)議,使用HTTP協(xié)議的post、delete、put、get方法進行增、刪、改、查操作;④對資源的操作是無狀態(tài)的并且每一個HTTP請求之間是相互獨立的。
簡單來說,REST是一種使用URL來定位資源,使用HTTP請求描述操作的Web服務規(guī)范?;赗ESTful API的分布式監(jiān)控系統(tǒng)有以下優(yōu)點:①前后端分離,和前端無關;②沒有和操作系統(tǒng)綁定,可以支持多種操作系統(tǒng),支持多種語言;③完備的軟件支持方案,支持Swagger Editor在線編輯,便于API的共享。
振華設計了基于RESTful的微服務設計,將業(yè)務邏輯劃分為小塊的服務,服務之間是解耦的,服務之間使用消息隊列,RESTful API通信,提供每一小塊服務的程序可以使用容器封裝,分布式管理,可彈性伸縮[4]。微服務架構如圖1所示。
圖1 微服務架構
采用微服務架構可以做到臨時使用、單體應用、即開即用,覆蓋碼頭各類場景,并且做到大數(shù)據(jù)量,高可用性,彈性伸縮。微服務還包含如下優(yōu)點[5]:①系統(tǒng)邏輯清晰,每個程序員的職責明確,上手容易;②靈活性高,服務組件積木式搭建,擴容縮容方便;③技術異構,一個系統(tǒng)可以使用多種語言;④持續(xù)集成容易,修改一行代碼不用發(fā)布整個系統(tǒng),無感知更新;⑤高可用,服務可熔斷、降級,局部故障不影響核心功能。
微服務有如此多的優(yōu)點,但同時也存在如下缺點:①服務太多,難以定位故障;②服務太多,運維工作量大;③消息中間件、RESTful API性能不如內(nèi)存復制。由于工程不需要反復變動,整體來看利大于弊。
UA RESTful是在ZPMC OPC UA Server基礎上封裝的一套RESTful接口支持,其技術特點主要體現(xiàn)在以下幾點[6]:①安全,采用TCP/IP協(xié)議的固定端口服務,對防火墻友好,同時支持用戶名密碼及證書連接機制,保障安全性;②簡便,集成了實時、歷史及報警功能,以及統(tǒng)一的配置調(diào)試工具,方便工程制作與部署,大大提升現(xiàn)場實施效率;③高效,支持64位架構,將單服務采集點數(shù)提升一個數(shù)量級(20萬點),能有效提升單點能力;④通用,采用跨平臺技術,同時給出了Windows/Linux兩套服務軟件,并且采用了容器技術方便運維;⑤靈活,采用新的插件技術,將通訊、日志、模擬數(shù)據(jù)等共用組件公共化,給每個驅動賦能。
RESTful API架構如圖2所示,Redis主要用于存放各個碼頭設備的實時狀態(tài)數(shù)據(jù)及報警數(shù)據(jù);History DB主要用于存放各個碼頭設備的歷史狀態(tài)數(shù)據(jù)及報警數(shù)據(jù);Mongo DB主要用于存放各個碼頭設備的傳感器數(shù)據(jù);平臺對外提供Restful API,供Web GUI或其他服務調(diào)用;碼頭設備的數(shù)據(jù)通過MQTT協(xié)議上傳至智能平臺的MQTT Server中。
圖2 RESTful API架構
以RESTful為標準,定制了一系列API標準,包括實時數(shù)據(jù)、歷史數(shù)據(jù)、實時故障、歷史故障;支持訂閱功能、統(tǒng)一登陸、在線狀態(tài)查詢等一系列功能。
以實時數(shù)據(jù)為例,我們用BrowsePort,BrowseMachine查詢所有碼頭和機器列表,用BrowseItem查詢所有數(shù)據(jù)列表,ReadItem讀取數(shù)據(jù)項。RESTful API示例見表1。
表1 RESTful API示例
新一代ZPMC WEB CMS平臺整合了邊緣數(shù)據(jù)采集、數(shù)據(jù)流處理、故障告警、歷史數(shù)據(jù)存儲等全流程數(shù)據(jù)層功能,為Web應用提供豐富的RESTful數(shù)據(jù)接口,包括數(shù)據(jù)點的讀寫、訂閱,以及數(shù)據(jù)點定義的在線更新接口。
通過MQTT協(xié)議,平臺支持百毫秒級的實時數(shù)據(jù)采集,在上層Web應用內(nèi)實時呈現(xiàn)。同時支持靈活的故障表達式定義,無需工程配置,直接在用戶瀏覽器即可進行故障點定義和更新。經(jīng)過Kafka消息分發(fā),流處理功能提供額外的數(shù)據(jù)處理、分析能力;歷史功能則通過歷史數(shù)據(jù)庫存儲、備份完整數(shù)據(jù),保證任意數(shù)據(jù)可追溯。
運用云原生開發(fā)理念,借助Kubernetes生產(chǎn)級容器編排系統(tǒng),使得平臺具備彈性伸縮,故障自愈能力。同時集成Prometheus監(jiān)控系統(tǒng)及EFK日志系統(tǒng),實時監(jiān)控系統(tǒng)各組件運行狀態(tài),出現(xiàn)節(jié)點故障、負載過大等異常情況時,運維人員可以快速發(fā)現(xiàn)并定位問題,保證系統(tǒng)在線。平臺可以適應各類公有云及私有云環(huán)境,對于大數(shù)據(jù)量,融合多碼頭數(shù)據(jù)等業(yè)務場景擁有巨大的潛力。
ZPMC作為振華重工歷經(jīng)十多年研發(fā)和應用產(chǎn)品,支持OPC、UA數(shù)據(jù)協(xié)議,在最新的RESTful協(xié)議提供之后,加入了對RESTful API的支持,我們采用輪詢的方式,對原來的接口做出了修改封裝,在不改變原邏輯的情況下,無縫銜接了新的RESTful接口[7,8]。
如 圖3所 示,RESTful服 務 支 持 跨 平 臺,可 以在Windows和Linux上 運 行,提 供 了OPC、Alarm、UA等服務,客戶端支持網(wǎng)站、傳統(tǒng)PC客戶端和微服務。
圖3 分布式監(jiān)控架構
本文提出了基于RESTful API的微服務云平臺的應用,作為UA接口插件的RESTful API的第三方支持,基于RESTful的分布式監(jiān)控系統(tǒng),跨系統(tǒng)、跨平臺進行軟件監(jiān)控。致力于解決碼頭用戶的智能監(jiān)控需求,提供更多便捷的數(shù)據(jù)監(jiān)控接口,穩(wěn)定的架構,大數(shù)據(jù)、大容量的數(shù)據(jù)支持,為振華的硬件服務保駕護航。