王師
摘要:本文著重介紹了高清播出網(wǎng)絡(luò)中接口服務(wù)器的使用,對接口服務(wù)器的特點和部署進行了說明,詳細講解了在使用過程接口消息服務(wù)可能出現(xiàn)的若干問題和解決辦法。
關(guān)鍵詞:消息服務(wù)器;分布式系統(tǒng);MSMQ;C/S結(jié)構(gòu);高清播出
概述
重慶廣播電視集團(總臺)高清播總控項目由大洋公司進行軟件開發(fā)和系統(tǒng)集成。根據(jù)實際需求,結(jié)合系統(tǒng)地域分散和內(nèi)外網(wǎng)互聯(lián)互通、分布式系統(tǒng)的情況,大洋公司在系統(tǒng)內(nèi)核保持較少改變的基礎(chǔ)上,通過接口消息系統(tǒng)定制開發(fā),保持軟件系統(tǒng)可靠性和穩(wěn)定性,滿足我臺需求,達到內(nèi)外網(wǎng)系統(tǒng)互聯(lián)互通。對大洋軟件工程師而言,使用接口消息服務(wù)器既做到了滿足客戶需求,精減高效,又達到靈活、穩(wěn)定、安全、快捷的目的。
在內(nèi)網(wǎng)播出機房范圍內(nèi),為高效安全專用機房環(huán)境,使用C/S結(jié)構(gòu),直接與數(shù)據(jù)庫進行讀寫操作,直接與消息服務(wù)進行通信。在外網(wǎng)環(huán)境中,相對比較復(fù)雜,使用虛偽專網(wǎng)、B/S結(jié)構(gòu),通過接口消息服務(wù)器傳遞播出系統(tǒng)內(nèi)各個數(shù)據(jù)庫內(nèi)表格的信息更新,滿足播出、編單、上載、節(jié)目代碼申請等不同的業(yè)務(wù)需求。
一.接口服務(wù)器介紹
接口服務(wù)器作為網(wǎng)絡(luò)中的節(jié)點,專門用來存儲、轉(zhuǎn)發(fā)相關(guān)數(shù)據(jù)、信息。它是網(wǎng)絡(luò)上一種為客戶端計算機提供各種消息類服務(wù)的高性能的計算機,它的高性能主要體現(xiàn)在高速度運算能力、可靠性、強大的外部數(shù)據(jù)吞吐能力等。
為什么會需要消息服務(wù)器?
主要原因是由于在高并發(fā)、分布式系統(tǒng)中,由于數(shù)據(jù)來不及實時同步處理,請求往往會發(fā)生堵塞,直接導(dǎo)致無數(shù)的行鎖表鎖,從而觸發(fā)連接錯誤。通過使用消息隊列,我們可以異步處理請求,緩解系統(tǒng)壓力。
根據(jù)我臺內(nèi)外網(wǎng)結(jié)構(gòu),編播實時互動,地域分散,高安全性的特點,唯有在分布式系統(tǒng)才能滿足需求,這也開創(chuàng)一個國內(nèi)少有的精編排、布式部署、全高清播總控大系統(tǒng),滿足13個電視頻道的高清播出。分布式系統(tǒng)部署優(yōu)缺點:一方面是分布式調(diào)用的各模塊高效、獨立,另一方面是系統(tǒng)自身存在的數(shù)據(jù)庫同步缺陷。無論是何種開發(fā)平臺,都因為駐留在不同進程空間的分布式組件,而引入額外的復(fù)雜度,并可能對系統(tǒng)的效率、可靠性等諸多方面的負面影響。然而,不可否認的是在應(yīng)用系統(tǒng)領(lǐng)域,我們總是會面對不同系統(tǒng)之間的通信、集成與整合,尤其當(dāng)面臨異構(gòu)系統(tǒng)時,這種分布式的調(diào)用與通信變得困難,但它在架構(gòu)設(shè)計中又有不可被取代的獨特的價值。從業(yè)務(wù)分析與架構(gòu)質(zhì)量的角度來講,我們也希望在系統(tǒng)架構(gòu)中盡可能地形成對服務(wù)的重用,通過獨立運行在進程中服務(wù)的形式,徹底實現(xiàn)客戶端與服務(wù)端的耦合。這常常是架構(gòu)演化的必然道路。認為可以通過“將獨立的模塊放入獨立的進程”來解決架構(gòu)因為代碼規(guī)模變大而腐化的問題。比如我臺的播出軟件,已經(jīng)被大洋公司整合進了它的播出架構(gòu)中,為整個幾十上百個的小系統(tǒng)中的一個,從軟件規(guī)模上講,極其腐化,最多只用幾十分之一的代碼。
我們需要一種技術(shù)能將在設(shè)計時并未考慮互操作的應(yīng)用集成起來,打破它們之間的隔閡,獲得比單個應(yīng)用更多的效益。這或許是分布式架構(gòu)存在的主要意義,這就是消息服務(wù)所存在的意義。
消息服務(wù)器,是位于應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器之間的一個服務(wù)器。消息隊列服務(wù)器作為一個緩沖,接收應(yīng)用服務(wù)器發(fā)送過來的數(shù)據(jù)庫操作命令,然后按照自己的配置,依次發(fā)送給對應(yīng)的不同的服務(wù)器來執(zhí)行。這種數(shù)據(jù)庫執(zhí)行的方式,我們稱之為異步寫入數(shù)據(jù)庫。增加消息隊列服務(wù)器有以下幾點好處:
1,由于消息隊列服務(wù)器的速度遠遠高于數(shù)據(jù)庫服務(wù)器,所以能夠快速處理并返回數(shù)據(jù);
2,消息隊列服務(wù)器具有更好的擴展性;
3,在高并發(fā)的情況下,延遲寫入數(shù)據(jù)庫,可以有效降低數(shù)據(jù)庫的壓力;
凡事都會有利有弊,消息隊列也不例外,所謂知己知彼,百戰(zhàn)不怠。我們要想把消息隊列用的爐火純青,消息隊列的“弊端”也要銘記于心。
由于消息隊列是在寫入消息隊列服務(wù)器之后,馬上返回給用戶,此時數(shù)據(jù)并沒有真正的寫入到數(shù)據(jù)庫,后續(xù)的數(shù)據(jù)庫操作可能會執(zhí)行失敗,這顯然是有問題的。我們的做法是通過業(yè)務(wù)的手段來解決異步帶來的不一致問題。比如我們可以稍微修改一下業(yè)務(wù)流程,在寫入消息隊列后,不立即返回成功信息,而是等待消息隊列里的進程真正的執(zhí)行完以后,再通知當(dāng)前業(yè)務(wù)成功。如果業(yè)務(wù)允許,也可在業(yè)務(wù)上設(shè)計重發(fā)機制。在我臺,使用的是重發(fā)機制。
消息隊列有特殊的應(yīng)用場景,就是要從中進行取舍,拿出一套權(quán)衡利弊之后的解決方案,解決項目中遇到的問題。特別是在新媒體等視音頻業(yè)務(wù)中磁盤IO的速度與內(nèi)存的速度差距太大,數(shù)據(jù)讀寫通常都會成為系統(tǒng)的瓶頸,而升級硬件成本較高,所以通常都會采取軟件的方法來解決這類問題。通常就采用消息隊列的方式來處理。另外,從業(yè)務(wù)方面來考慮,有些用戶不是很關(guān)心的業(yè)務(wù),可以從主流程中剝離出來,降低系統(tǒng)的復(fù)雜性。隨著電視臺內(nèi)系統(tǒng)的擴大,系統(tǒng)的復(fù)雜性會越來越大,我們都知道,越是復(fù)雜的系統(tǒng),越難維護。消息隊列對解決這種應(yīng)用場景,也是一個不錯的選擇。各個系統(tǒng)都要調(diào)用核心接口,請求核心接口的數(shù)據(jù),這種系統(tǒng),正是通過消息隊列來實現(xiàn)的。消息隊列的使用,可以減少聯(lián)調(diào)和開發(fā)的工作量。
二.接口服務(wù)器的部署
安裝消息服務(wù)器程序,在所有與消息相關(guān)的計算機中配置MicroSoft Message Queue微軟消息隊列,在大洋D3系統(tǒng)配置軟件中的模塊公共配置中,設(shè)置消息服務(wù)器、消息隊列名和系統(tǒng)隊列名。
如下圖,所有消息日志必須經(jīng)接口服務(wù)器與消息服務(wù)器進行通訊,傳遞播出系統(tǒng)內(nèi)各個數(shù)據(jù)庫內(nèi)表格的信息更新,滿足播出、編單、上載、節(jié)目代碼申請等不同的業(yè)務(wù)需求。
消息類別:
1.節(jié)目整備類
2.節(jié)目上載后播出刷新
3.上載完成后節(jié)目整備
4.播出值班員節(jié)目單更新
5.廣告審查后頻道編單
三.消息服務(wù)的故障和解決方案
所有消息客戶端都是在操作系統(tǒng)MicroSoft Message Queue微軟消息隊列中配置調(diào)用,在播出系統(tǒng)中第一次調(diào)用大洋軟件時,將SysConfig配置的消息服務(wù)器,消息類別與操作系統(tǒng)通訊,調(diào)入在線進程中。
播控消息服務(wù)工作異常,表現(xiàn)為打開素材播控軟件素材管理器時,顯示“打開消息隊列錯誤”,或者提交一條素材同步,遷移或回遷任務(wù)時,任務(wù)查看窗口中顯示“未處理”。
節(jié)目編單消息服務(wù)工作異常,表現(xiàn)為廣告已審核通過的廣告,頻道節(jié)目編單顯示為廣告未審核,不能使用。
消息服務(wù)器故障分析:
運維工作本身就是“路漫漫其修遠兮 吾將上下而求索”,在今年的5-6月份,連續(xù)出現(xiàn)了多次消息服務(wù)器的問題,一次比一次嚴重,先是消息服務(wù)器有短時堵塞,接著是有時延,最后是完全不通。這個過程讓我們一次又一次加深了對消息服務(wù)器的理解,明白了它固有的優(yōu)勢和劣勢,發(fā)現(xiàn)了現(xiàn)有播出系統(tǒng)存在的缺陷和解決之道,也算“塞翁失馬,焉知非福”,最終收獲滿滿。
通過消息服務(wù)器的觀察,常態(tài)的消息日志約為幾秒一條,最多的消息處理速度為一秒十條這個數(shù)量級,如果消息太多,消息服務(wù)器就會有排隊,導(dǎo)致消息處理堵塞,在出現(xiàn)問題時,會發(fā)現(xiàn)消息顯示和消息日志記錄的量呈現(xiàn)數(shù)量級爆炸式增長,進一步抓包分析,懷疑可能是系統(tǒng)內(nèi)某臺電腦持續(xù)發(fā)送消息引起。在消息機制有時延的情況下,退出中止消息服務(wù)器工作后,還能正常運行,但在嚴重堵塞時,只有重啟消息服務(wù)器,將所有未處理的消息事務(wù)全部拋棄才能解決問題。如圖所示,2018年7月8日到12日測試堵塞的情況,MSG_CIIPMGR就非常多的日志記錄,7月13日到16日正常時,MSG_CIIPMGR就很少的日志記錄。如下圖的文本TXT,文件大小可很清楚。
這就是分布式系統(tǒng)中固有的問題,如同蝴蝶效應(yīng)般,一個小的BUG,通過系統(tǒng)放大,可能影響整個系統(tǒng)安危。我們通過屏蔽禁用軟件的某些功能,防止問題再次出現(xiàn)。處理措施:
1.重新啟動消息服務(wù)器上的消息服務(wù)
2.重啟消息服務(wù)器
3.在SysConfig中修改消息服務(wù)器的IP指向為冷備消息服務(wù)器。
日常工作中,可以通過不定期的檢查,觀察消息服務(wù)器的運行界面,核查屏幕上的顯示記錄,可以在一定程度上判斷是否正常,提前處理。消息服務(wù)器的定期重啟也有助于服務(wù)器正常運行。
四、總結(jié)
經(jīng)過兩年的使用,我們很好的理解了消息服務(wù)器的運行規(guī)律,經(jīng)歷了實戰(zhàn)的風(fēng)雨,經(jīng)歷住了時間的考驗,相信在接下來的時間內(nèi),我們的運行維護水平會有更進一步的提高。
參考文獻
[1]徐曉東.數(shù)字播控系統(tǒng)若干技術(shù)問題的分析[J].西部廣播電視,2015(22)
[2]孫國峰.電視臺播出系統(tǒng)的構(gòu)建分析[J].科技傳播,2014(23)