王宏明,寧 博,金 云,聶 超
(通號(hào)萬全信號(hào)設(shè)備有限公司,杭州 310000)
城市化水平的不斷提高,人們對(duì)公共交通的出行需求越來越多。現(xiàn)代有軌電車因投資少、建設(shè)周期短、節(jié)能環(huán)保等特點(diǎn),也被越來越多的中小城市、旅游城市采用。隨著技術(shù)的發(fā)展,運(yùn)營(yíng)管理水平的提高,也對(duì)現(xiàn)代有軌電車系統(tǒng)提出更高的要求,比如智能化、綜合化等要求。作為現(xiàn)代有軌電車系統(tǒng)中的核心子系統(tǒng)——信號(hào)系統(tǒng),也要求與各種各樣的子系統(tǒng)進(jìn)行溝通交互,功能越來越復(fù)雜、接口格式也多種多樣。
現(xiàn)代社會(huì)中,隨著互聯(lián)網(wǎng)技術(shù)的蓬勃發(fā)展,一種面向服務(wù)的體系架構(gòu)(SOA)也在互聯(lián)網(wǎng)技術(shù)的實(shí)踐中越來越成熟。同時(shí),由于互聯(lián)網(wǎng)系統(tǒng)的大用戶、大數(shù)據(jù)、高并發(fā)等特點(diǎn),又催生了云服務(wù)等技術(shù)。各種技術(shù)的融合運(yùn)用,產(chǎn)生了微服務(wù)架構(gòu)。微服務(wù)架構(gòu)是一項(xiàng)在云中部署應(yīng)用和服務(wù)的新技術(shù),使用輕量級(jí)機(jī)制通信,通常是HTTP API,這些服務(wù)基于業(yè)務(wù)能力構(gòu)建,能夠通過自動(dòng)化部署機(jī)制來獨(dú)立部署,這些服務(wù)使用不同的編程語(yǔ)言,以及不同數(shù)據(jù)存儲(chǔ)技術(shù)來實(shí)現(xiàn),并保持最低限度的集中式管理。
在有軌電車行業(yè)中,很多軟件是運(yùn)行于資源受限設(shè)備上,比如各種各樣的嵌入式設(shè)備,使用MCU 的各種板卡。受限于資源、安全需求、歷史原因等無法使用HTTP 等協(xié)議,照搬互聯(lián)網(wǎng)行業(yè)的微服務(wù)架構(gòu)是不可能的,但微服務(wù)的理念在功能越來越復(fù)雜的有軌電車行業(yè)中大有用武之地。微服務(wù)有以下幾項(xiàng)優(yōu)勢(shì),可以很好地運(yùn)用于有軌電車控制系統(tǒng)的開發(fā)運(yùn)營(yíng)。第一是敏捷性,微服務(wù)的功能比較獨(dú)立,可以更快速、更獨(dú)立地進(jìn)行開發(fā),縮短開發(fā)周期。第二是擴(kuò)展性,通過微服務(wù),可以獨(dú)立擴(kuò)展各項(xiàng)服務(wù)以滿足支持其他子系統(tǒng)的功能需求。第三是輕松部署,微服務(wù)支持持續(xù)繼承和持續(xù)交付,可以輕松嘗試新想法。當(dāng)有新的子系統(tǒng)需求出現(xiàn)的時(shí)候,可以開發(fā)一個(gè)新的微服務(wù),而不影響現(xiàn)有的信號(hào)控制系統(tǒng)。技術(shù)自由、可重復(fù)使用的代碼、彈性等微服務(wù)的優(yōu)勢(shì),也可以很好地運(yùn)用于有軌電車行業(yè)中。
完整的現(xiàn)代有軌電車信號(hào)系統(tǒng)主要由各子系統(tǒng)和設(shè)備組成為:1)綜合調(diào)度子系統(tǒng);2)正線軌旁控制子系統(tǒng);3)路口優(yōu)先控制子系統(tǒng);4)車載控制子系統(tǒng);5)數(shù)據(jù)通信子系統(tǒng);6)車輛段控制子系統(tǒng);7)維護(hù)監(jiān)測(cè)子系統(tǒng);8)其他需要信號(hào)信息的子系統(tǒng)。整體系統(tǒng)構(gòu)成如圖1 所示。
綜合調(diào)度系統(tǒng)以行車指揮和運(yùn)行計(jì)劃為核心,它的主要功能為:1)行車信息顯示;2)列車識(shí)別號(hào)、跟蹤功能;3)運(yùn)行圖編制及管理;4)進(jìn)路自動(dòng)控制;5)信號(hào)設(shè)備控制;6)操作與數(shù)據(jù)記錄、輸出及統(tǒng)計(jì)處理;7)列車運(yùn)用、派班計(jì)劃及車輛管理;8)與其他系統(tǒng)交換信息。

根據(jù)微服務(wù)的理念,可以對(duì)其進(jìn)行功能切割,分為多個(gè)獨(dú)立的微服務(wù)。行車信息顯示功能需要顯示全線的線路車站布局、軌旁設(shè)備的狀態(tài)(信號(hào)機(jī)、區(qū)段、進(jìn)路、道岔等),列車信息(位置、速度、識(shí)別號(hào)、早晚點(diǎn)信息、扣車信息、目的地、前后車距離等),路口信息(信號(hào)機(jī)、紅綠燈時(shí)間)。這是一個(gè)綜合性的信息顯示,需要各個(gè)微服務(wù)提供各種信息。列車識(shí)別號(hào)及跟蹤功能,可以分為車輛信息微服務(wù),列車識(shí)別號(hào)管理微服務(wù),列車正線跟蹤微服務(wù),列車車輛段跟蹤微服務(wù)。運(yùn)行圖編制為離線編制,可以單獨(dú)作為一個(gè)程序運(yùn)行。運(yùn)行圖的實(shí)時(shí)顯示需要列車的位置信息,可以使用運(yùn)行圖數(shù)據(jù)微服務(wù)來提取運(yùn)行圖顯示的數(shù)據(jù)。進(jìn)路的自動(dòng)控制功能、信號(hào)設(shè)備的控制功能都需要和軌旁、聯(lián)鎖系統(tǒng)進(jìn)行交互,可以分為自動(dòng)進(jìn)路微服務(wù)、軌旁微服務(wù)、聯(lián)鎖微服務(wù)。列車運(yùn)用、排班計(jì)劃等可以劃分為單獨(dú)微服務(wù)。其他系統(tǒng),如乘客信息系統(tǒng)(PIS)、公共廣播系統(tǒng)(PA)、自動(dòng)售檢票系統(tǒng)(AFC)、無線調(diào)度系統(tǒng)(LTE)、車輛段檢修管理系統(tǒng)也需要列車的位置信息,每個(gè)單獨(dú)的系統(tǒng)接口需求都可以作為微服務(wù)提供。整理完成的微服務(wù)架構(gòu)綜合調(diào)度系統(tǒng)組成如圖2 所示。

圖2 微服務(wù)架構(gòu)Fig.2 Microservice architecture
考慮HTTP 協(xié)議在有軌電車控制系統(tǒng)中的使用狀況,在本系統(tǒng)中不適用HTTP 形式的API 來提供服務(wù),系統(tǒng)使用數(shù)據(jù)池的數(shù)據(jù)共享方式來實(shí)現(xiàn)信息的流轉(zhuǎn)。同時(shí),因?yàn)樾枰逻_(dá)命令等功能需要,系統(tǒng)需要一個(gè)既能提供消息隊(duì)列功能,又能提供快速數(shù)據(jù)訪問的高可用性的中間件。Redis 的以下幾個(gè)特性很好地符合此需求。
1)內(nèi)存數(shù)據(jù)庫(kù),速度快、開源
Redis 是一個(gè)開源的使用 ANSI C 語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的Key-Value 數(shù)據(jù)庫(kù)。它把所有數(shù)據(jù)放在內(nèi)存中,因此性能極高,讀的速度是10 萬次/秒,寫的速度是8 萬次/秒。
2)操作的原子性、支持事務(wù)
Redis 的所有操作都是原子性的,同時(shí)還支持事務(wù)。不需要特別考慮各個(gè)系統(tǒng)之間的數(shù)據(jù)互鎖等,降低程序的同步復(fù)雜性。
3)發(fā)布訂閱功能
Redis 提供發(fā)布訂閱功能,可以用來實(shí)現(xiàn)消息隊(duì)列系統(tǒng)。
4)高可用和分布式
Redis 提供高可用的特性Sentinel,能在某個(gè)Redis 接點(diǎn)故障時(shí)實(shí)現(xiàn)自動(dòng)轉(zhuǎn)移。它也提供了分布式的實(shí)現(xiàn)Redis Cluster,提供高可用性、讀寫和容量的擴(kuò)展性。
5)簡(jiǎn)單穩(wěn)定
簡(jiǎn)單性主要表現(xiàn)在Redis 的源碼很少,而且開源;Redis 使用單線程模型,處理模型簡(jiǎn)單;Redis獨(dú)立實(shí)現(xiàn)事件處理的相關(guān)功能,不需要依賴于操作系統(tǒng)中的類庫(kù)。
基于以上的特點(diǎn),系統(tǒng)使用Redis 作為各個(gè)微服務(wù)的數(shù)據(jù)池,各微服務(wù)處理完成的信息以Key-Value 的方式放在Redis 中,便于其他系統(tǒng)使用。
在微服務(wù)架構(gòu)應(yīng)用以前,單進(jìn)程的綜合調(diào)度系統(tǒng)架構(gòu)如圖3 所示。

圖3 單進(jìn)程架構(gòu)Fig.3 Single process architecture
在單進(jìn)程的架構(gòu)中,如果需要添加一個(gè)新的第三方接口功能,比如需要給路口程序發(fā)送車輛位置信息的功能。雖然此功能相對(duì)比較獨(dú)立,但所需信息都在一個(gè)程序內(nèi),無法以一個(gè)單獨(dú)的程序來實(shí)現(xiàn),研發(fā)人員就需要在本來就復(fù)雜的程序中,再添加一個(gè)新的功能模塊來處理與路口的信息交互。此時(shí),因?yàn)楹诵牡某绦蜻M(jìn)行了變動(dòng),所以需要測(cè)試的范圍除了新功能的需求以外,還需要對(duì)原有的功能進(jìn)行測(cè)試,以確認(rèn)在原有的功能模塊中沒有引入新的問題。
在引入微服務(wù)的架構(gòu)后,實(shí)現(xiàn)上述的功能,研發(fā)人員只需要從數(shù)據(jù)池中獲取微服務(wù)產(chǎn)生的車輛信息,然后再使用另一微服務(wù)產(chǎn)生的列車計(jì)劃、列車識(shí)別號(hào)等信息,將兩個(gè)信息結(jié)合進(jìn)行處理,將處理結(jié)果發(fā)送給第三方接口即可。這樣開發(fā)一個(gè)程序,功能相對(duì)簡(jiǎn)單,需求明確,因而開發(fā)、測(cè)試所需的工作量也可控制,而且是新的獨(dú)立程序,不會(huì)影響原有的程序,減少了測(cè)試的工作量。
在軌道交通信號(hào)領(lǐng)域中,一方面是通信信號(hào)領(lǐng)域的安全性要求使然,另一方面則是由于長(zhǎng)久以來信號(hào)領(lǐng)域的技術(shù)壟斷,所以一些新技術(shù)、新編程語(yǔ)言的應(yīng)用比較少。但是在安全性要求較高的領(lǐng)域,使用C/C++語(yǔ)言同樣可以在不改動(dòng)原有設(shè)備的情況下,引入一些新技術(shù)、新理念達(dá)成較好的效果,提高開發(fā)效率、降低成本。自主研發(fā)的微服務(wù)架構(gòu)的有軌電車車載系統(tǒng)已在云南某地實(shí)際項(xiàng)目中實(shí)施運(yùn)行,取得了良好的效果。證明一些新技術(shù)、新理念在通信信號(hào)領(lǐng)域的產(chǎn)品研發(fā)及應(yīng)用中是可行的。