□陳嘉
近五年來(lái),移動(dòng)互聯(lián)網(wǎng)全面取代PC互聯(lián)網(wǎng),手機(jī)全面取代電腦,成為主流的媒體終端。城市電視臺(tái)的新媒體業(yè)務(wù),主陣地也從PC網(wǎng)站轉(zhuǎn)移到了手機(jī)客戶端。CUTV城市聯(lián)合網(wǎng)絡(luò)電視臺(tái)從2014年開始進(jìn)入移動(dòng)互聯(lián)網(wǎng),先后為16個(gè)聯(lián)盟電視臺(tái)合作開發(fā)建設(shè)客戶端,積累了不少經(jīng)驗(yàn)。在這個(gè)過(guò)程中,互聯(lián)網(wǎng)技術(shù)的應(yīng)用,極大地提高了項(xiàng)目執(zhí)行的效率,降低技術(shù)成本,有效地推進(jìn)業(yè)務(wù)的快速發(fā)展。
國(guó)內(nèi)電視臺(tái)為國(guó)企,技術(shù)系統(tǒng)的建設(shè)參照國(guó)企的規(guī)范流程,融合媒體客戶端一般要經(jīng)過(guò)需求收集、調(diào)研、規(guī)劃、立項(xiàng)、招標(biāo)采購(gòu)、實(shí)施、驗(yàn)收、上線等幾個(gè)階段。整體建設(shè)周期長(zhǎng),往往從有需求到客戶端上線,時(shí)間跨度要超過(guò)一年。這當(dāng)中耗費(fèi)的人力、物力,特別是時(shí)間成本比較高,而移動(dòng)互聯(lián)網(wǎng)是分秒必爭(zhēng)的競(jìng)爭(zhēng)型市場(chǎng)。
在長(zhǎng)周期的客戶端建設(shè)項(xiàng)目中,往往會(huì)出現(xiàn)各種變化:從內(nèi)部來(lái)講,一開始規(guī)劃的業(yè)務(wù)需求,經(jīng)過(guò)一段時(shí)間之后,需求已隨著業(yè)務(wù)的深入不斷變更,與最初設(shè)想的模樣可能大不相同;從外部來(lái)講,移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)風(fēng)向變化極快,規(guī)劃時(shí)還處于風(fēng)口浪尖上的業(yè)務(wù),半年一年后風(fēng)口一過(guò),便成雞肋。
進(jìn)入移動(dòng)互聯(lián)網(wǎng)這個(gè)領(lǐng)域,電視臺(tái)與民營(yíng)的、資本化運(yùn)作的互聯(lián)網(wǎng)公司直接競(jìng)爭(zhēng),按照原有國(guó)企的步調(diào)難以適應(yīng),如若適當(dāng)引入互聯(lián)網(wǎng)技術(shù)及管理手段,則能有效提高競(jìng)爭(zhēng)力。
近年來(lái),互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)技術(shù)大放異彩。選擇合適的技術(shù)支撐城市臺(tái)融合媒體客戶端,能有效地降低技術(shù)成本提高業(yè)務(wù)效率。
傳統(tǒng)廣電技術(shù)系統(tǒng)為了確保安全做好隔離,每臺(tái)服務(wù)器只安裝一個(gè)系統(tǒng),跑一兩個(gè)應(yīng)用。而在城市電視臺(tái)客戶端這類區(qū)域性業(yè)務(wù)上,服務(wù)器的負(fù)載往往不高,導(dǎo)致服務(wù)器的計(jì)算資源、內(nèi)存資源、硬盤資源、用電及空間等閑置浪費(fèi)。而通過(guò)虛擬化技術(shù)可以在一臺(tái)計(jì)算機(jī)上同時(shí)運(yùn)行多個(gè)邏輯計(jì)算機(jī),每個(gè)邏輯計(jì)算機(jī)可運(yùn)行不同的操作系統(tǒng),并且應(yīng)用程序都可以在相互獨(dú)立的空間內(nèi)運(yùn)行而互不影響。CUTV三年前轉(zhuǎn)向虛擬化方向后,采購(gòu)的都是高密度的服務(wù)器,一臺(tái)服務(wù)器可以虛擬出幾十臺(tái)邏輯服務(wù)器,大大減少了機(jī)柜空間、能耗等基礎(chǔ)資源消耗,并有效提高了資源利用率,再通過(guò)負(fù)載調(diào)度手段做好設(shè)備的物理冗余,在安全保障上也得到提升。設(shè)備的減少跟統(tǒng)一,讓運(yùn)維的難度大大降低。
近三年,整個(gè)互聯(lián)網(wǎng)行業(yè)已轉(zhuǎn)向云服務(wù)承載。電視臺(tái)大多屬于國(guó)企,采購(gòu)服務(wù)器作為硬件資產(chǎn)理所當(dāng)然,但隨之而來(lái)的問題就是采購(gòu)周期長(zhǎng)、資產(chǎn)成本重、擴(kuò)容不靈活,這對(duì)于城市臺(tái)融合客戶端業(yè)務(wù)無(wú)疑是一大障礙。而大膽采用云服務(wù),能有效降低項(xiàng)目啟動(dòng)成本,按需求、按業(yè)務(wù)使用情況付費(fèi),并能跟隨著業(yè)務(wù)的發(fā)展快速擴(kuò)容。CUTV建設(shè)的私有云加公有云的廣電混合云平臺(tái),將生產(chǎn)、發(fā)布管理等對(duì)安全性要求高的業(yè)務(wù)放在私有云上,將支撐互聯(lián)網(wǎng)用戶并發(fā)訪問的業(yè)務(wù)放在伸縮靈活的公有云上,兩相結(jié)合,達(dá)到很好的互補(bǔ)效果。
容器化可以稱為輕量級(jí)虛擬化技術(shù),與傳統(tǒng)的VM相比,它更輕量,啟動(dòng)速度更快,單臺(tái)硬件上可以同時(shí)跑成百上千個(gè)容器,非常適合在業(yè)務(wù)高峰期通過(guò)啟用大量容器進(jìn)行橫向擴(kuò)展;容器也是可移植的,可以在各種主流Linux發(fā)行版或者OS X以及Windows上使用,可以稱為“構(gòu)建一次,在各平臺(tái)上運(yùn)行”。容器技術(shù)重新定義了軟件開發(fā)、測(cè)試、交付和部署的流程,交付的東西不再是代碼、配置文件、數(shù)據(jù)庫(kù)定義等,而是整個(gè)應(yīng)用程序的運(yùn)行環(huán)境。無(wú)論是測(cè)試、運(yùn)維、開發(fā),都在同一個(gè)環(huán)境下,可以與其他服務(wù)集成,進(jìn)行開發(fā)流程的自動(dòng)化。CUTV采用容器化技術(shù),除了進(jìn)一步提高資源利用率,另一大好處就是大大提高業(yè)務(wù)部署的效率:過(guò)去部署一個(gè)環(huán)境,從上架服務(wù)器、安裝系統(tǒng)、安裝驅(qū)動(dòng)、逐一安裝LNMP環(huán)境大概要半天時(shí)間,通過(guò)容器化幾分鐘就可以完成一個(gè)LNMP環(huán)境的部署并提供給研發(fā)、測(cè)試使用,還可以批量自動(dòng)化部署。
城市臺(tái)客戶端一般包括圖文資訊發(fā)布、視音頻流媒體播放、用戶數(shù)據(jù)管理、表單交互互動(dòng)等較為獨(dú)立的后臺(tái)支撐系統(tǒng),如采購(gòu)第三方軟件,這些軟件大多都是各種獨(dú)立系統(tǒng)的堆砌,隨著系統(tǒng)規(guī)模的擴(kuò)大,復(fù)雜性逐漸變高,技術(shù)債務(wù)逐漸上升,部署速度逐漸變慢,會(huì)阻礙技術(shù)創(chuàng)新并且無(wú)法按需伸縮。如果研發(fā)時(shí)這些后臺(tái)系統(tǒng)采用微服務(wù)架構(gòu),就能有效地拆分應(yīng)用,實(shí)現(xiàn)敏捷開發(fā)和部署。因?yàn)槊總€(gè)微服務(wù)相當(dāng)于一個(gè)模塊項(xiàng)目,開發(fā)這個(gè)模塊就只需關(guān)心這個(gè)模塊的邏輯即可,代碼量和邏輯復(fù)雜度都會(huì)降低,從而易于開發(fā)和維護(hù),局部修改也容易部署。在開發(fā)中發(fā)現(xiàn)了一個(gè)問題,如果是單體架構(gòu)的話,就需要重新發(fā)布并啟動(dòng)整個(gè)項(xiàng)目,非常耗時(shí)間,但是微服務(wù)則不同,哪個(gè)模塊出現(xiàn)了bug,只需要單獨(dú)解決并重啟該模塊服務(wù)即可。同時(shí)技術(shù)棧不受限,可以有Java編寫的服務(wù),也可以有Python編寫的服務(wù),他們是靠Restful架構(gòu)風(fēng)格統(tǒng)一成一個(gè)系統(tǒng)的。所以微服務(wù)本身與具體技術(shù)實(shí)現(xiàn)無(wú)關(guān),擴(kuò)展性強(qiáng)。微服務(wù)之間只要定義好明確的接口,采用輕量級(jí)通信,每個(gè)服務(wù)達(dá)到服務(wù)自治,就可以配合敏捷開發(fā),達(dá)到快速迭代的目的,大大提高后臺(tái)開發(fā)效率。
城市臺(tái)融合媒體客戶端的強(qiáng)互動(dòng)、高并發(fā)、功能快速迭代等業(yè)務(wù)形態(tài),只有引入并用好互聯(lián)網(wǎng)技術(shù),才能高效支撐業(yè)務(wù)部門開展融合媒體的綜合運(yùn)營(yíng)工作,甚至能開發(fā)出創(chuàng)新型功能。有了以上的技術(shù)基礎(chǔ),CUTV在汕頭橄欖臺(tái)項(xiàng)目上,才能實(shí)現(xiàn)三年150萬(wàn)用戶的增長(zhǎng),才能實(shí)現(xiàn)1秒15萬(wàn)互動(dòng)并發(fā)的承載,才能實(shí)現(xiàn)每月小迭代、每年大迭代的不斷更替,支撐汕頭橄欖臺(tái)超越傳統(tǒng)電視成為粵東第一媒體。
在開展融合媒體客戶端的項(xiàng)目開發(fā)過(guò)程中,掌握好互聯(lián)網(wǎng)化的技術(shù)管理手段、管理工具,能使開發(fā)業(yè)務(wù)事半功倍。
傳統(tǒng)計(jì)算機(jī)軟件開發(fā),普遍采用瀑布式開發(fā)管理辦法。瀑布模型式是最典型的預(yù)見性的方法,嚴(yán)格遵循預(yù)先計(jì)劃的需求、分析、設(shè)計(jì)、編碼、測(cè)試的步驟順序進(jìn)行。CUTV在大型業(yè)務(wù)系統(tǒng)如城市電視臺(tái)統(tǒng)一融合媒資系統(tǒng)的開發(fā)上,采用瀑布式方法,該系統(tǒng)需求明確,功能模塊之間邏輯嚴(yán)密。但瀑布式方法在需求不明確并且在項(xiàng)目進(jìn)行過(guò)程中可能變化的情況下基本是不可行的。所以對(duì)于處于不斷探索演進(jìn),并且要跟隨業(yè)務(wù)經(jīng)營(yíng)隨時(shí)迭代的融合媒體客戶端項(xiàng)目,敏捷開發(fā)管理更加適用。
敏捷開發(fā)以業(yè)務(wù)的需求進(jìn)化為核心,采用迭代、循序漸進(jìn)的方法進(jìn)行軟件開發(fā)。在敏捷開發(fā)中,軟件項(xiàng)目在構(gòu)建初期被切分成多個(gè)相互聯(lián)系但也可獨(dú)立運(yùn)行的小項(xiàng)目并分別完成,在此過(guò)程中軟件一直處于可使用狀態(tài)。CUTV在壹深圳APP上采用敏捷開發(fā)模式,將項(xiàng)目開發(fā)分為兩個(gè)階段,第一個(gè)階段完成新聞發(fā)布、壹深圳訂閱號(hào)、廣播模塊、視頻模塊、記者幫模塊、個(gè)人中心等主要功能模塊的開發(fā),在三個(gè)月內(nèi)達(dá)到可運(yùn)行狀態(tài),發(fā)布上線;第二個(gè)階段,在上線后,采用每月一個(gè)版本迭代的方式,增加廣播回聽、發(fā)現(xiàn)版塊、壹視頻、VR功能、智能推薦、搖一搖互動(dòng)、視頻彈幕、新聞地圖、積分兌換等功能。期間根據(jù)用戶反饋和業(yè)務(wù)運(yùn)營(yíng)部門的需求,隨時(shí)調(diào)整功能規(guī)劃,快速響應(yīng),不斷變更及優(yōu)化APP功能。如采用傳統(tǒng)瀑布式開發(fā)模型,從規(guī)劃、開發(fā)到上線,至少半年時(shí)間。按互聯(lián)網(wǎng)的節(jié)奏,可能半年風(fēng)口已過(guò),天翻地覆。而采用敏捷開發(fā),能在以周為單位的時(shí)間內(nèi)響應(yīng)變化,快速上線業(yè)務(wù),并根據(jù)上線后的運(yùn)營(yíng)情況持續(xù)迭代優(yōu)化,真正做到伴隨式開發(fā)。壹深圳改版上線后,業(yè)務(wù)部門在用戶需求不明確、不詳細(xì)但又需要不斷探索發(fā)展的情況下,以敏捷開發(fā)管理解決實(shí)際問題,近半年新增用戶近百萬(wàn)。
在客戶端項(xiàng)目的開發(fā)過(guò)程中,經(jīng)常會(huì)遇到前端后臺(tái)多個(gè)團(tuán)隊(duì)、多個(gè)模塊的協(xié)同開發(fā),并且往往團(tuán)隊(duì)人數(shù)眾多,還常常不在同一地點(diǎn)辦公。如何提高協(xié)同開發(fā)的效率,降低團(tuán)隊(duì)交互過(guò)程中的各種規(guī)范化、流程化及溝通障礙問題,是項(xiàng)目能否高效、高質(zhì)量推進(jìn)的核心問題。針對(duì)這些問題,CUTV引入了互聯(lián)網(wǎng)化的管理工具,成效明顯。
比如在流程管理上,采用禪道之類的研發(fā)管理平臺(tái),將產(chǎn)品管理、項(xiàng)目管理、質(zhì)量管理、文檔管理、組織管理等工作放到平臺(tái)上,每一個(gè)項(xiàng)目參與人員在平臺(tái)上發(fā)布、接收自己的工作任務(wù),并共享項(xiàng)目相關(guān)文檔,令標(biāo)準(zhǔn)統(tǒng)一、流程規(guī)范、工作透明、業(yè)務(wù)可追溯,使得整個(gè)研發(fā)工作可視化,便于管理與統(tǒng)計(jì),甚至作為KPI考核、獎(jiǎng)勵(lì)激勵(lì)等研發(fā)團(tuán)隊(duì)管理的重要參考工具。
在代碼管理上,采用GitHub平臺(tái),作為云端的代碼托管平臺(tái)。采用GitHub的好處,是可以跨終端、跨平臺(tái),隨時(shí)隨地接入下載或更新代碼。GitHub發(fā)展至今由于注冊(cè)用戶眾多,其托管版本數(shù)量也非常多,是一個(gè)專門為程序員量身打造的代碼開源共享及私有軟件項(xiàng)目的托管平臺(tái)。它有許多非常貼心、實(shí)用的功能,能非常方便地進(jìn)行代碼的合并及版本控制。CUTV考慮到安全性及軟件資產(chǎn)問題,一開始采用私有化部署的SVM平臺(tái),但客戶端的源碼處于不斷的迭代更新過(guò)程中,三個(gè)月到半年,經(jīng)過(guò)幾個(gè)版本迭代,舊源碼的價(jià)值已不用太過(guò)重視。GitHub作為一個(gè)大型的平臺(tái),相應(yīng)的安全保護(hù)措施也比較成熟,在客戶端代碼托管上,使用云端平臺(tái)利大于弊,也是互聯(lián)網(wǎng)移動(dòng)化、輕量化、云化的必然趨勢(shì)。
在Bug管理上,由于需要業(yè)務(wù)部門、運(yùn)營(yíng)部門的同事參與,太過(guò)于專業(yè)化的平臺(tái)對(duì)非開發(fā)人員來(lái)說(shuō)不夠友好,于是CUTV引入bugclose系統(tǒng),方便非開發(fā)人員參與到客戶端優(yōu)化的工作中來(lái)。通過(guò)這個(gè)更輕量化、更簡(jiǎn)潔易用的平臺(tái),測(cè)試人員及非技術(shù)人員可以隨時(shí)反饋bug,再由項(xiàng)目經(jīng)理指派給具體研發(fā)人員,通過(guò)微信就能可視化地全程跟蹤問題解決的進(jìn)展。
產(chǎn)品質(zhì)量管控是客戶端研發(fā)的一個(gè)難題,難在兩個(gè)方面:一是兼容性問題,市面上手機(jī)型號(hào)眾多,系統(tǒng)版本眾多,特別是安卓手機(jī),以及手機(jī)廠商的各種深度定制化系統(tǒng)眾多,如果買齊各種手機(jī)作為測(cè)試用機(jī),投資巨大;二是嚴(yán)密性問題,測(cè)試工作嚴(yán)謹(jǐn)而繁瑣,重復(fù)且枯燥,人工測(cè)試百密難免一疏。CUTV在這一塊踩過(guò)不少坑,現(xiàn)采用兩種類型的工具,較為有效地解決了品控難題。
一是在完成開發(fā)交付測(cè)試的環(huán)節(jié),除了人工用例測(cè)試,還引入互聯(lián)網(wǎng)云化測(cè)試平臺(tái),將安裝包傳到云平臺(tái),通過(guò)云平臺(tái)上千臺(tái)真機(jī)進(jìn)行測(cè)試,通過(guò)這個(gè)手段能有效解決崩潰、閃退等嚴(yán)重的兼容性問題,可多家公司同測(cè),針對(duì)測(cè)試出來(lái)的問題有針對(duì)性地進(jìn)行優(yōu)化。
二是采用APM工具,在APP里埋點(diǎn),嵌入探測(cè)SDK,監(jiān)測(cè)客戶端的運(yùn)行狀態(tài)。在APP上線后,通過(guò)APM系統(tǒng)實(shí)時(shí)監(jiān)控APP的運(yùn)行狀態(tài)。目前CUTV采用的APM工具,能實(shí)時(shí)采集到所有用戶使用APP各個(gè)功能時(shí)的大數(shù)據(jù),能匯總導(dǎo)致崩潰的具體代碼,以及網(wǎng)絡(luò)延時(shí)、服務(wù)端響應(yīng)時(shí)間等重要的運(yùn)行質(zhì)量數(shù)據(jù)。通過(guò)這些數(shù)據(jù)反饋,能及時(shí)發(fā)現(xiàn)問題,再通過(guò)前后端代碼、網(wǎng)絡(luò)、服務(wù)器的優(yōu)化,逐一解決問題,確??蛻舳颂幱谝粋€(gè)良好的運(yùn)行狀態(tài),達(dá)到上線后的良好品控。