中集移動(dòng)iWork項(xiàng)目
一、項(xiàng)目背景
中集集團(tuán) CIMC 是一家為全球市場(chǎng)提供物流裝備和能源裝備的企業(yè)集團(tuán),主要經(jīng)營(yíng)集裝箱、道路運(yùn)輸車輛、能源和化工裝備、海洋工程、機(jī)場(chǎng)設(shè)備等裝備的制造和服務(wù)。在中國(guó)以及北美、歐洲、亞洲、澳洲等國(guó)家和地區(qū)擁有200余家全資及控股子公司,員工超過(guò)60000人,文職人員15000人以上。
根據(jù)中集集團(tuán)總部信息化發(fā)展規(guī)劃及下屬各板塊企業(yè)的建設(shè)計(jì)劃,移動(dòng)化是中集集團(tuán)未來(lái)信息化建設(shè)的重要主題,同時(shí)中集下屬各企業(yè)也向集團(tuán)總部提出業(yè)務(wù)應(yīng)用移動(dòng)化建設(shè)需求。中集經(jīng)過(guò)了兩年多在移動(dòng)應(yīng)用方面探索,在探索的過(guò)程中總結(jié)經(jīng)驗(yàn),為加快中集移動(dòng)信息化建設(shè)以及響應(yīng)下屬各版塊、各企業(yè)的實(shí)際業(yè)務(wù)需求,中集集團(tuán)總部決定建立“一個(gè)企業(yè)只需要一個(gè) APP”的移動(dòng)門戶平臺(tái)——中集移動(dòng) iWork,實(shí)現(xiàn)“企業(yè)級(jí)移動(dòng)互聯(lián)網(wǎng)+”的統(tǒng)一應(yīng)用平臺(tái),提供協(xié)同辦公的便利性,融合員工福利、生活等等需求,打造工作和生活相結(jié)合的企業(yè)移動(dòng)APP。
二、系統(tǒng)需求
中集集團(tuán)是一家下屬企業(yè)、職員數(shù)目非常龐大的集團(tuán)公司,同時(shí)為深化企業(yè)內(nèi)部信息化改革,加強(qiáng)內(nèi)部溝通交流,提升企業(yè)競(jìng)爭(zhēng)力。為解決員工之間相互溝通、企業(yè)辦公效率,為此建設(shè)企業(yè)辦公管理、開(kāi)發(fā)統(tǒng)一平臺(tái)。建設(shè)該平臺(tái)終極口號(hào)是“集團(tuán)搭臺(tái),企業(yè)唱戲”,企業(yè)的需求是持續(xù)性的,集團(tuán)先統(tǒng)一收集各板塊、企業(yè)的緊急需求,后續(xù)需求由企業(yè)自己去規(guī)劃建設(shè)。
-
(1)移動(dòng)通信平臺(tái)建設(shè)移動(dòng)通信平臺(tái),使得員工之間可以進(jìn)行即時(shí)通信,包括:
- 集成組織架構(gòu)和員工信息到通信錄中;
- 單聊、群聊、機(jī)構(gòu)建群;
- 文字、圖片、語(yǔ)音、視頻通信;
- 微信的幾乎全部功能;
-
(2)移動(dòng)應(yīng)用平臺(tái)建設(shè)移動(dòng)應(yīng)用平臺(tái),作為全部移動(dòng)應(yīng)用的統(tǒng)一入口。包括:
- 支持輕應(yīng)用、Android和iOS原生應(yīng)用;
- 服務(wù)號(hào):?jiǎn)螆D文消息、多圖文消息、自定義表單、素材管理……;
- 同事圈;
- 新內(nèi)容提醒;
- 第三方應(yīng)用接入;
iWork的功能需求主要分為兩塊:
iWork的非功能性需求主要有:
- 安全:安全傳輸,通信錄和應(yīng)用的訪問(wèn)限制;
- 支持VPN訪問(wèn);
- 集成LDAP等外部認(rèn)證源;
- 應(yīng)用單點(diǎn)登錄;
- 自動(dòng)升級(jí);
三、解決方案:WorkPlus
我們使用自主研發(fā)的WorkPlus來(lái)實(shí)現(xiàn)中集iWork的要求。WorkPlus產(chǎn)品是一款服務(wù)于企業(yè)的產(chǎn)品,在滿足企業(yè)移動(dòng)平臺(tái)的功能性需求的同時(shí),自身也在安全性、擴(kuò)展性、性能等各方面進(jìn)行了全面的考慮。
(1)安全
在登錄服務(wù)器的時(shí)候,用戶名密碼采用DES加密后在SSL通道上傳輸,雙重加密保證用戶名密碼不會(huì)被泄漏,登錄成功后服務(wù)器返回唯一的登錄憑證;在通信服務(wù)器方面,通過(guò)加密過(guò)的自定義協(xié)議,客戶端每次與通信服務(wù)器建立鏈接前會(huì)與WorkPlus登錄服務(wù)器進(jìn)行安全協(xié)議的握手,交換加密算法以及密鑰,鏈接建立后,通信的消息使用加密算法以及密鑰加密解密,達(dá)到安全通信的效果,因?yàn)槊看捂溄拥募用芩惴ㄅc密鑰均是隨機(jī)產(chǎn)生,幾乎無(wú)法破解。
(2)性能,輕量級(jí)通信協(xié)議
WorkPlus自定義的一套通信協(xié)議對(duì)比于開(kāi)源的XMPP協(xié)議以及像微信使用的ActiveSync,具有更輕更快的特點(diǎn)。因?yàn)閃orkPlus通信協(xié)議既免去了XMPP協(xié)議繁瑣的用戶狀態(tài)同步,也不像ActiveSync那么冗長(zhǎng)而臃腫。WorkPlus通信協(xié)議的設(shè)計(jì)使得WorkPlus通信功能可以輕易地被擴(kuò)展,并且在通信過(guò)程中大大的節(jié)省用戶流量。
(3)可伸縮性
WorkPlus后臺(tái)有多個(gè)相對(duì)獨(dú)立的服務(wù)進(jìn)程組成,在設(shè)計(jì)時(shí)充分考慮了可伸縮性,隨著接入系統(tǒng)的用戶數(shù)量增長(zhǎng),可根據(jù)具體資源使用情況對(duì)任意的服務(wù)通過(guò)添加服務(wù)器進(jìn)行水平擴(kuò)展。我們也針對(duì)過(guò)大的并發(fā)量進(jìn)行流量整形,使得訪問(wèn)量過(guò)大時(shí)系統(tǒng)可以做到“平穩(wěn)地劣化”。盡管如此,我們還是建議可以在通信服務(wù)器集群加入一定冗余服務(wù)器,以防止某臺(tái)服務(wù)器宕機(jī)造成整個(gè)通信服務(wù)器集群“雪崩”。
(4)基于開(kāi)源技術(shù)構(gòu)建
WorkPlus平臺(tái)實(shí)現(xiàn)所用技術(shù),全部基于主流開(kāi)源軟件完成,全面去IOE,降低建設(shè)成本,解除廠商綁定。整個(gè)平臺(tái)自主可控,為后續(xù)迭代升級(jí)奠定了高度的可拓展基礎(chǔ)。
(5)靈活的消息中心
WorkPlus幾乎實(shí)現(xiàn)了微信的全部IM功能,是一個(gè)“企業(yè)版的微信”,而且專門針對(duì)企業(yè)應(yīng)用場(chǎng)景進(jìn)行擴(kuò)展和優(yōu)化,例如集成了組織架構(gòu)和員工信息,可由客戶自定義配置普通員工是否可以主動(dòng)向高管發(fā)送消息。
平臺(tái)具有強(qiáng)大的IM功能,IM功能除了支持用戶間的即時(shí)通訊外,還為應(yīng)用提供消息通知、提醒。為了滿足企業(yè)多樣化的需求及應(yīng)用場(chǎng)景,WorkPlus平臺(tái)消息提供豐富的消息交互樣式和模板。
(6)企業(yè)通信錄和用戶集成
WorkPlus支持以Excel和接口的形式從外部系統(tǒng)導(dǎo)入組織機(jī)構(gòu)和員工信息。WorkPlus也支持采用外部LDAP系統(tǒng)進(jìn)行用戶認(rèn)證。企業(yè)通信錄可以進(jìn)行讀寫(xiě)權(quán)限控制,可以對(duì)員工實(shí)體提供自定義屬性,針對(duì)機(jī)構(gòu)、員工的固有屬性和自定義屬性進(jìn)行查詢。
(7)應(yīng)用接入
WorkPlus輕應(yīng)用支持是WorkPlus產(chǎn)品的重要特性,企業(yè)用戶可以開(kāi)發(fā)自己的輕應(yīng)用并接入到WorkPlus輕應(yīng)用平臺(tái)中。通過(guò)這種方式,企業(yè)用戶可以實(shí)現(xiàn)已有系統(tǒng),例如OA、ERP、CRM的移動(dòng)化,并整合到WorkPlus平臺(tái)進(jìn)行統(tǒng)一訪問(wèn)。WorkPlus也支持Android和iOS原生應(yīng)用的接入。WorkPlus支持將第三方應(yīng)用集成到系統(tǒng)中,通過(guò)應(yīng)用中心開(kāi)放給用戶訪問(wèn)。
(8)單點(diǎn)登錄支持
部署在WorkPlus應(yīng)用中心中的移動(dòng)App,不管是輕應(yīng)用還是原生應(yīng)用,均可使用當(dāng)前用戶名自動(dòng)登錄到WorkPlus中,不需要重新輸入帳號(hào)口令進(jìn)行登錄。WorkPlus可以作為OAuth授權(quán)服務(wù)器,為第三方應(yīng)用提供用戶認(rèn)證能力。
(9)服務(wù)號(hào)開(kāi)發(fā)與接入
WorkPlus上面可以定義和部署服務(wù)號(hào),等價(jià)于微信的公眾號(hào)。通過(guò)服務(wù)號(hào)可以發(fā)送圖文內(nèi)容,展示給用戶,也可以通過(guò)自定義菜單等接受用戶的輸入,從而實(shí)現(xiàn)和用戶的交互。服務(wù)號(hào)支持各種素材庫(kù)和自定義表單等,可以方便的配置問(wèn)卷調(diào)查、簡(jiǎn)單流程等常見(jiàn)用途。像微信一樣,服務(wù)號(hào)支持編輯模式和開(kāi)發(fā)模式。
(10)開(kāi)放API和SDK
WorkPlus通過(guò)Session向外界暴露IM功能,通過(guò)REST發(fā)布后臺(tái)系統(tǒng)(通信錄、移動(dòng)應(yīng)用等等)的API。用戶登錄到系統(tǒng),獲得access_token之后,可以使用access_token通過(guò)API訪問(wèn)后臺(tái)系統(tǒng)。
為了方便外界使用,我們將API封裝為SDK,供第三方開(kāi)發(fā)者用來(lái)訪問(wèn)后臺(tái)系統(tǒng),以隱藏HTTP訪問(wèn)和JSON序列化/反序列化等底層操作。目前我們已經(jīng)提供了Java、Android、ObjectiveC版本的SDK,JavaScript、Swift和PHP版本的SDK正在開(kāi)發(fā)中,將隨后推出。
(11)桌面版
WorkPlus提供了桌面版,方便企業(yè)員工上班時(shí)使用。
(12)Html5快速開(kāi)發(fā)框架
AmazeUI是中國(guó)首個(gè)開(kāi)源HTML5跨屏前端框架, 它為移動(dòng)而生,組件豐富,模塊化思想,本地化處理優(yōu)秀,輕量級(jí)高性能。WorkPlus基于AmazeUI整合了一套快速開(kāi)發(fā)前端的架構(gòu),為企業(yè)減少人力成本,提高交付效率。
舜宇大數(shù)據(jù)
一、背景
舜宇集團(tuán)是江浙地區(qū)的一個(gè)典型的制造業(yè)企業(yè),是在香港上市的公司。公司的IT部門負(fù)責(zé)人很有遠(yuǎn)見(jiàn)卓識(shí),自主開(kāi)發(fā)了關(guān)鍵性的制造執(zhí)行系統(tǒng)(MES)——卓越制造管理平臺(tái)。多年來(lái)開(kāi)發(fā)人員聚焦于功能性需求,不斷發(fā)展和完善,在業(yè)務(wù)適用性方面,高度契合了業(yè)務(wù)部門的需要。
但是隨著企業(yè)規(guī)模的擴(kuò)大,生產(chǎn)線數(shù)量快速擴(kuò)張(從40條生產(chǎn)線擴(kuò)展到未來(lái)的1000多條),同時(shí)傳感器和檢測(cè)數(shù)據(jù)每天產(chǎn)生大量的數(shù)據(jù),原有的架構(gòu)已經(jīng)不堪重負(fù)(就像上文中的超大型動(dòng)物一樣,原本不成問(wèn)題的都成了問(wèn)題)。性能和吞吐量等非功能性需求開(kāi)始超越功能性需求,成為決定軟件架構(gòu)的關(guān)鍵性驅(qū)動(dòng)力量(就像上文中的引力)。
二、問(wèn)題
我們的大數(shù)據(jù)項(xiàng)目不涉及功能性需求方面(不涉及用例模型的重整和領(lǐng)域模型的重塑),而關(guān)注非功能性需求(質(zhì)量需求)方面的問(wèn)題,尤其是以下三個(gè)方面:
- 性能;
- 吞吐量(并發(fā));
- 海量數(shù)據(jù);
以交通運(yùn)輸系統(tǒng)來(lái)比喻:吞吐量可類比道路的車道數(shù)量——可容納多少輛車同時(shí)跑(而不用顯著降低車輛的行駛速度);高性能可類比車輛的速度——每輛車可以跑得多快;海量數(shù)據(jù)可類比停車場(chǎng)——可以容納多少輛車同時(shí)停放。
三、解決方案
為了實(shí)現(xiàn)上面三個(gè)非功能性需求,以及異構(gòu)集成的需求,我們?cè)O(shè)計(jì)了新的大數(shù)據(jù)平臺(tái)架構(gòu),整體架構(gòu)圖如下:

我們從三個(gè)方面處理大數(shù)據(jù)需求:存儲(chǔ)、計(jì)算和接入。
(一)存儲(chǔ)
1. 設(shè)計(jì)原則
- 不同類型的數(shù)據(jù)采用不同的存儲(chǔ)機(jī)制;
- 根據(jù)事務(wù)一致性、實(shí)時(shí)性、區(qū)域性等原則分流數(shù)據(jù);
- 通過(guò)數(shù)據(jù)分片降低每個(gè)數(shù)據(jù)庫(kù)實(shí)例的數(shù)據(jù)量,提高吞吐量和性能;
我們首先按下面的幾個(gè)維度劃分?jǐn)?shù)據(jù)類型:
2. 數(shù)據(jù)分類
- 按數(shù)據(jù)結(jié)構(gòu)形式劃分為結(jié)構(gòu)化數(shù)據(jù)(生產(chǎn)數(shù)據(jù))、半結(jié)構(gòu)化數(shù)據(jù)(傳感器數(shù)據(jù)、檢測(cè)數(shù)據(jù))和非結(jié)構(gòu)化數(shù)據(jù)(Word文檔、圖片、視頻);
- 按業(yè)務(wù)類型劃分為主數(shù)據(jù)(相對(duì)靜態(tài)的、被應(yīng)用中的多個(gè)模塊共享的數(shù)據(jù),如供應(yīng)商、產(chǎn)品類別、組織機(jī)構(gòu)、員工等)和事務(wù)性數(shù)據(jù)(動(dòng)態(tài)的,局限在業(yè)務(wù)單元內(nèi)部的、每日大量產(chǎn)生的數(shù)據(jù),如生產(chǎn)訂單、銷售訂單、在制品、出入庫(kù)記錄等)。事務(wù)性數(shù)據(jù)引用主數(shù)據(jù);
- 按時(shí)間敏感度劃分為實(shí)時(shí)生產(chǎn)數(shù)據(jù)、歷史生產(chǎn)數(shù)據(jù)和統(tǒng)計(jì)數(shù)據(jù);
3. 數(shù)據(jù)存儲(chǔ)設(shè)施
- 事務(wù)數(shù)據(jù)庫(kù)MySQL;
- 分析數(shù)據(jù)庫(kù)Greenplum;
- NoSQL數(shù)據(jù)庫(kù)HBase;
- 文件存儲(chǔ)TFS;
4. 數(shù)據(jù)分流
- 結(jié)構(gòu)化數(shù)據(jù)(生產(chǎn)和生產(chǎn)支持)存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)(MySQL和Greenplum)上,半結(jié)構(gòu)化數(shù)據(jù)(傳感器和檢測(cè))存儲(chǔ)在HBase上,非結(jié)構(gòu)化數(shù)據(jù)(圖片、視頻和文件)存儲(chǔ)在TFS上;
- 主數(shù)據(jù)作為全局表,存儲(chǔ)于所有的MySQL分片服務(wù)器上;事務(wù)性數(shù)據(jù)分片存儲(chǔ)到不同的MySQL分片服務(wù)器上;
- 實(shí)時(shí)數(shù)據(jù)存儲(chǔ)于MySQL數(shù)據(jù)庫(kù)和HBase上,歷史數(shù)據(jù)和統(tǒng)計(jì)性數(shù)據(jù)存儲(chǔ)于Greenplum上;
- 所有的數(shù)據(jù)最終匯聚到Greenplum,用于永久存儲(chǔ)和數(shù)據(jù)分析;
5. MySQL分片
通過(guò)將非結(jié)構(gòu)化數(shù)據(jù)和歷史數(shù)據(jù)分別分流到HBase和Greenplum,MySQL中只儲(chǔ)存主數(shù)據(jù)和在制品(正在制造,未交付給客戶的產(chǎn)品)的事務(wù)性數(shù)據(jù),已經(jīng)大大減少生產(chǎn)數(shù)據(jù)庫(kù)MySQL要存儲(chǔ)的數(shù)據(jù)量。但是,為了進(jìn)一步提高性能和吞吐量,我們還需要使用MyCAT對(duì)MySQL進(jìn)行分片。分片可以同時(shí)應(yīng)對(duì)上文中提到的三個(gè)質(zhì)量需求:
- 用多個(gè)分片服務(wù)器存儲(chǔ)數(shù)據(jù),使得每臺(tái)服務(wù)器只需要存儲(chǔ)1/n的數(shù)據(jù)量,降低了數(shù)據(jù)存儲(chǔ)量;
- 不同的生產(chǎn)單元的事務(wù)性數(shù)據(jù)分流到不同的分片服務(wù)器,每臺(tái)服務(wù)器只需要承擔(dān)1/n的并發(fā)讀寫(xiě),提高了吞吐量;
- 因?yàn)閿?shù)據(jù)量的減少和每臺(tái)服務(wù)器需要承擔(dān)的并發(fā)訪問(wèn)量減少,性能得到了很大的提高;
我們做了這樣的分片決策:
- 分片的最高原則是:絕不允許跨分片關(guān)聯(lián)(例如分片A中的一行數(shù)據(jù)的一個(gè)外鍵列關(guān)聯(lián)到分片B中的一行數(shù)據(jù)的主鍵列),但允許跨分片聚合(從多個(gè)分片中獲取數(shù)據(jù),聚合為一個(gè)總數(shù)據(jù)集返回給用戶);
- 以生產(chǎn)單元(各個(gè)生產(chǎn)公司)作為分片依據(jù);
- 主數(shù)據(jù)存儲(chǔ)于每臺(tái)分片服務(wù)器上,不同生產(chǎn)單元的事務(wù)性數(shù)據(jù)保存在不同的分片服務(wù)器上。因?yàn)槭聞?wù)性數(shù)據(jù)關(guān)聯(lián)主數(shù)據(jù),這樣的設(shè)計(jì)可以使得關(guān)聯(lián)可以局限在分片內(nèi)部;
- 主從表(例如訂單表和訂單條目表)中的數(shù)據(jù)行必須劃分到同一個(gè)分片,以消除夸分片關(guān)聯(lián)的需要;
- 每個(gè)分片用三臺(tái)服務(wù)器做主-從-備配置,以保證高可用;
(二)計(jì)算
在計(jì)算方面,我們?cè)O(shè)計(jì)和建議下面的優(yōu)化方案。
1. 負(fù)載均衡
我們分別采用LVS和nginx作為第四層和第七層負(fù)載均衡設(shè)施,以提高系統(tǒng)的吞吐量并實(shí)現(xiàn)高可用。Nginx只為應(yīng)用服務(wù)器Tomcat提供負(fù)載均衡能力,LVS同時(shí)為應(yīng)用服務(wù)器Tomcat、存儲(chǔ)服務(wù)器MyCAT和網(wǎng)絡(luò)服務(wù)器Netty提供負(fù)載均衡能力。
2. Redis高速緩存
我們以主備方式構(gòu)建了一個(gè)Redis集群作為高速緩存,以提高系統(tǒng)的總體性能。
- 全局性的配置數(shù)據(jù);
- 被頻繁引用的主數(shù)據(jù)。如操作員、倉(cāng)庫(kù)、設(shè)備等等。當(dāng)主數(shù)據(jù)發(fā)生變動(dòng)時(shí)及時(shí)更新 Redis 中緩存的數(shù)據(jù);
- 生產(chǎn)過(guò)程中在制品經(jīng)歷過(guò)的每個(gè)工位產(chǎn)生的數(shù)據(jù)。在卓越系統(tǒng)中,一個(gè)在制品在某個(gè)工位的處理邏輯依賴于前幾個(gè)工位的處理結(jié)果,因此每個(gè)工位的操作都要訪問(wèn)數(shù)據(jù)庫(kù),查詢以前工位的處理結(jié)果(涉及多個(gè)相互關(guān)聯(lián)的表),這是影響系統(tǒng)整體性能的最主要因素。緩存這些數(shù)據(jù)可以大大提高系統(tǒng)的性能;
3. SQL改進(jìn)
卓越系統(tǒng)的主要性能損耗在SQL上。除了建立索引等常規(guī)措施外,我們向客戶建議以下的改進(jìn)措施:
- 減少每條SQL語(yǔ)句中的表間關(guān)聯(lián)的數(shù)量。可以將一個(gè)關(guān)聯(lián)查詢修改為多個(gè)單表查詢,在數(shù)據(jù)量很大的情況下這樣做比關(guān)聯(lián)查詢更快,而且持久化框架的緩存機(jī)制可以進(jìn)一步改進(jìn)此措施的性能。另外,由于絕大多數(shù)的關(guān)聯(lián)都是事務(wù)性數(shù)據(jù)對(duì)主數(shù)據(jù)的關(guān)聯(lián),而且主數(shù)據(jù)的變化頻率非常低,可以將主數(shù)據(jù)加載到Redis高速緩存,這樣可以只對(duì)數(shù)據(jù)庫(kù)中的事務(wù)性數(shù)據(jù)表進(jìn)行查詢,不須關(guān)聯(lián)主數(shù)據(jù)表,可以非常有效地提高性能;
- 消除事務(wù)需要。在詳盡分析的基礎(chǔ)上,采用最終一致性等方式取代事務(wù)一致性;
- 降低事務(wù)的粒度。在詳盡分析的基礎(chǔ)上,優(yōu)化系統(tǒng)設(shè)計(jì),使得在一個(gè)事務(wù)中要更新的表的數(shù)量和數(shù)據(jù)行的數(shù)量盡可能的小;
- 消除數(shù)據(jù)加鎖的需要。盡量保證數(shù)據(jù)行(尤其是事務(wù)性數(shù)據(jù))只增加不修改不刪除。例如不要修改零件的庫(kù)存數(shù)量,而通過(guò)出入庫(kù)表計(jì)算庫(kù)存數(shù)量(通過(guò)每月/日一次的快照存儲(chǔ)減少計(jì)算量)。數(shù)據(jù)只通過(guò)一個(gè)字段標(biāo)記做邏輯刪除而不要做物理刪除。如果有誤操作,通過(guò)一個(gè)反向記錄沖銷;
- 減小查詢結(jié)果集。修改設(shè)計(jì),使得每個(gè)查詢返回的數(shù)據(jù)量保持在一定限度之內(nèi),以免消耗大量的計(jì)算資源和內(nèi)存空間,占用過(guò)多的IO通道;
(4)使用新的Java語(yǔ)言特性進(jìn)行并行、并發(fā)和異步編程。
利用新版本的 Java 語(yǔ)言特性,進(jìn)行并行、并發(fā)和異步編程,可以充分利用硬件能力提高系統(tǒng)性能。以下的 Java 語(yǔ)言特性對(duì)提高性能很有幫助:
- Java 5 引入的 Executors 框架,用 Executor、Callable、Future 等新 API 進(jìn)行多線程和異步編程;
- Java 7 引入的 Fork-Join 框架,用類似于 Map Reduce 的方式將大任務(wù)分解為小任務(wù),并行執(zhí)行;
- Java 8 引入的 Lambda 表達(dá)式、Stream API,將函數(shù)式編程范式引入 Java 編程語(yǔ)言,通過(guò)取消可變共享狀態(tài)和函數(shù)組合等方式提高性能和可靠性,同時(shí)提高代碼的可讀性和可維護(hù)性。Stream 還提供了方便的使代碼并行執(zhí)行的方式;
(三)接入
為了與異構(gòu)的第三方系統(tǒng)進(jìn)行交互,我們建議了三種接入方式:
1. Netty
在卓越制造平臺(tái)中建立Netty高性能Socket通信服務(wù)器,接收傳感器和檢測(cè)系統(tǒng)發(fā)送過(guò)來(lái)的海量數(shù)據(jù)。Netty可充分應(yīng)對(duì)這方面的高并發(fā)需求。未來(lái)的產(chǎn)線系統(tǒng)也通過(guò)Netty將產(chǎn)線系統(tǒng)的數(shù)據(jù)上報(bào)到卓越制造平臺(tái)。
2. ActiveMQ
ActiveMQ用于在卓越制造系統(tǒng)和ERP、OA等第三方系統(tǒng)之間的通信上。另外,卓越制造平臺(tái)也通過(guò)ActiveMQ向產(chǎn)線系統(tǒng)下發(fā)生產(chǎn)指令。
3. WebSocket
WebSocket接受系統(tǒng)中產(chǎn)生的事件,向分布在各廠區(qū)的電子顯示屏廣播,例如呈現(xiàn)傳感器的時(shí)間序列數(shù)據(jù)。
南航運(yùn)行數(shù)據(jù)核心(COD)項(xiàng)目
一、項(xiàng)目背景
在電影《安德的游戲》中,安德在大屏幕上以可視的方式,從瞬息萬(wàn)變的戰(zhàn)場(chǎng)上收集多方信息,指揮由成千上萬(wàn)戰(zhàn)艦組成的艦隊(duì)成功炸毀了蟲(chóng)族的母星。
在《三國(guó)演義》中,諸葛亮端坐中軍帳,四方的探子不斷將各方信息即時(shí)報(bào)送過(guò)來(lái),諸葛亮得以“運(yùn)籌帷幄之中,決勝千里之外”。
現(xiàn)代大型企業(yè)的運(yùn)作,其復(fù)雜度絲毫不遜于一場(chǎng)戰(zhàn)爭(zhēng)。對(duì)于南航這樣的大型國(guó)企來(lái)說(shuō),從多方渠道及時(shí)獲取信息,據(jù)此進(jìn)行工作安排、業(yè)務(wù)監(jiān)控,是提高效率、降低成本、贏得競(jìng)爭(zhēng)的關(guān)鍵因素。而目前南航?jīng)]有一套以航班為核心結(jié)合飛機(jī)調(diào)配、機(jī)組管理、旅客服務(wù)及地面保障等全運(yùn)行業(yè)務(wù)過(guò)程的集成應(yīng)用系統(tǒng),要進(jìn)行有效調(diào)配,需要從不同業(yè)務(wù)系統(tǒng)中獲取數(shù)據(jù)。這就是南航運(yùn)行數(shù)據(jù)核心(COD)項(xiàng)目的意義——和困難——所在。
二、問(wèn)題與挑戰(zhàn)
COD系統(tǒng)面臨的挑戰(zhàn)是要從多方來(lái)源快速、準(zhǔn)確獲取異構(gòu)的數(shù)據(jù)。由于現(xiàn)有系統(tǒng)的交互方式是網(wǎng)狀的一對(duì)一通信,當(dāng)集成新的子系統(tǒng)或修改現(xiàn)有的子系統(tǒng)時(shí),維護(hù)上面臨很大的困難。

- 數(shù)據(jù)來(lái)源多樣:除了南航自己的多個(gè)系統(tǒng)外,還有航信、地方機(jī)場(chǎng)等外部機(jī)構(gòu)的數(shù)據(jù);
- 數(shù)據(jù)存儲(chǔ)形式多樣:數(shù)據(jù)庫(kù)、文件……
- 數(shù)據(jù)傳輸形式多樣:Web Service、MQ、FTP……
- 系統(tǒng)間的調(diào)用為網(wǎng)狀結(jié)構(gòu),交互數(shù)量為n!;
三、系統(tǒng)需求
系統(tǒng)需要從航空公司、機(jī)場(chǎng)及應(yīng)用三個(gè)層次集成與公司運(yùn)用控制、基地保障及機(jī)場(chǎng)服務(wù)相關(guān)的公用數(shù)據(jù)和私有數(shù)據(jù),時(shí)間上跨越運(yùn)用控制和機(jī)場(chǎng)服務(wù)全過(guò)程。同時(shí),它將集成與公司運(yùn)用控制,基地保障及機(jī)場(chǎng)服務(wù)相關(guān)的各大業(yè)務(wù)應(yīng)用系統(tǒng),在數(shù)據(jù)上為各大業(yè)務(wù)應(yīng)用系統(tǒng)提供無(wú)縫支持。
- 提供航班計(jì)劃、動(dòng)態(tài)、機(jī)組、離港、機(jī)場(chǎng)等數(shù)據(jù)服務(wù);
- 考慮與各個(gè)外圍系統(tǒng)的數(shù)據(jù)整合;
- 總線上提供多種形式的接口供外圍系統(tǒng)調(diào)?(EJB2/3、WS等);
- 支持作業(yè)調(diào)度、基礎(chǔ)數(shù)據(jù)、安全、日志以及SLA相關(guān)功能;
四、關(guān)鍵設(shè)計(jì)決策
系統(tǒng)的關(guān)鍵是建設(shè)一條企業(yè)服務(wù)總線ESB(稱之為“運(yùn)行數(shù)據(jù)服務(wù)總線”,簡(jiǎn)稱ODSB),使各個(gè)系統(tǒng)通過(guò)相應(yīng)的接口連接到ESB上,進(jìn)行數(shù)據(jù)整合、服務(wù)整合和流程整合。
(一)子系統(tǒng)劃分

(二)邏輯架構(gòu):

(三)ESB架構(gòu):

(四)關(guān)鍵技術(shù)點(diǎn):
- 分布式部署;
- 負(fù)載均衡/集群;
- FuseESB:ServiceMix + ActiveMQ + CXF + Camel;
- 高可用;
- 分布式緩存集群;
- 外圍系統(tǒng)數(shù)據(jù)整合;
- 作業(yè)調(diào)度集群;
- 跨系統(tǒng)業(yè)務(wù)流程定制;
(五)開(kāi)源技術(shù)棧:
- Redhat Enterprise Linux;
- LVS;
- JBoss Application Server;
- Memcached;
- FuseESB;
- Quartz;
- Kettle;
五、合作方式
我方提供資深顧問(wèn)和開(kāi)發(fā)人員與南航的項(xiàng)目組共同封閉式開(kāi)發(fā),負(fù)責(zé)架構(gòu)定義、設(shè)計(jì)、開(kāi)發(fā)、測(cè)試管理等。
六、客戶收益
COD項(xiàng)目的成功實(shí)施,使得南航以航班為中心的航運(yùn)和客服管理達(dá)到了“運(yùn)籌帷幄之中,決勝千里之外”的境界。
在企業(yè)效益方面:
- 提升了企業(yè)信息系統(tǒng)的集成水平;
- 加強(qiáng)了企業(yè)核心數(shù)據(jù)的安全管理;
- 節(jié)省了維護(hù)多系統(tǒng)接口及數(shù)據(jù)交互鏈路的成本;
- 減少了大量接口、功能重復(fù)建設(shè)的費(fèi)用;
在社會(huì)效益方面:
- 利用信息訂閱功能,及時(shí)推送最新消息確保乘客第一時(shí)間知情;
- 利于外圍系統(tǒng)的建設(shè),給用戶提供更多個(gè)性化的、貼心的服務(wù);
南航客戶行為數(shù)據(jù)庫(kù)(CBD)項(xiàng)目
一、項(xiàng)目背景
作為中國(guó)運(yùn)輸飛機(jī)最多、航線網(wǎng)絡(luò)最發(fā)達(dá)、年客運(yùn)量最大的航空公司,到2010年為止,南航經(jīng)營(yíng)著包括波音777、747、757、737,空客A330、321、320、319、300在內(nèi)的客貨運(yùn)輸機(jī)400架,機(jī)隊(duì)規(guī)模躍居世界前六,形成了以廣州、北京為中心樞紐,密集覆蓋國(guó)內(nèi)150多個(gè)通航點(diǎn),全面輻射亞洲全面輻射亞洲40多個(gè)通航點(diǎn),鏈接歐美澳非洲的發(fā)達(dá)航線網(wǎng)絡(luò)。
截至2009年,南航旅客運(yùn)輸量6628萬(wàn)人次,位列亞洲第一、全球第三,已連續(xù)31年居國(guó)內(nèi)各航空公司之首,是亞洲唯一進(jìn)入世界航空客運(yùn)前五強(qiáng),國(guó)內(nèi)唯一連續(xù)5年進(jìn)入世界民航客運(yùn)前十強(qiáng)的航空公司。
與此同時(shí),同行競(jìng)爭(zhēng)越來(lái)越激烈(甚至面臨高鐵的競(jìng)爭(zhēng)),燃油等成本費(fèi)用越來(lái)越高昂,航空業(yè)正在步入微利時(shí)代。在競(jìng)爭(zhēng)白熱化、利潤(rùn)率不斷下降的時(shí)候,通過(guò)為顧客提供針對(duì)性的服務(wù),吸引新客戶,留住老客戶,以龐大的客戶量來(lái)降低人均營(yíng)運(yùn)成本,以差異化的優(yōu)質(zhì)服務(wù)提升VIP客戶的消費(fèi)水平來(lái)增加收入,對(duì)南航來(lái)說(shuō),具有生死攸關(guān)的戰(zhàn)略意義。在這個(gè)戰(zhàn)略中,客戶行為數(shù)據(jù)庫(kù)擔(dān)當(dāng)著中流砥柱的角色。
“客戶行為數(shù)據(jù)庫(kù)就是從旅客查詢航空公司的產(chǎn)品開(kāi)始,直到預(yù)定、支付、出票,再到辦理登記手續(xù),過(guò)安檢,在候機(jī)室、兩艙休息室,或者是在登機(jī)口休息,登機(jī)完成后在機(jī)艙的服務(wù),到最后到達(dá)目的地后的行李的提取,再到旅客里程的累積,通知以及下一次旅行的開(kāi)始,這就相當(dāng)于形成了一個(gè)閉環(huán),我們叫做旅行價(jià)值鏈?!?——南航CBD項(xiàng)目負(fù)責(zé)人黃文強(qiáng)。
在旅行價(jià)值鏈條里面,客戶行為數(shù)據(jù)庫(kù)會(huì)記錄下所有旅客和航空公司的接觸點(diǎn)(touch point)信息,接觸點(diǎn)的行為的記錄都存儲(chǔ)在客戶行為數(shù)據(jù)庫(kù)里面,然后就能夠通過(guò)數(shù)據(jù)庫(kù)和識(shí)別引擎來(lái)獲知旅客的一些行為習(xí)慣,在下一次旅行的時(shí)候就調(diào)出上一次旅行的情況,比如說(shuō)他是通過(guò)網(wǎng)上訂票的還是通過(guò)代點(diǎn)訂票的,他的支付方式是用信用卡的還是傳統(tǒng)的支付模式,對(duì)于高端旅客(公務(wù)艙和頭等艙)在兩艙休息室里喝的是紅茶、綠茶還是咖啡,這些細(xì)節(jié)都會(huì)被記錄下來(lái)了。在他下一次旅行的時(shí)候,空乘人員就不用再去詢問(wèn)他你要喝茶還是和咖啡,這樣就會(huì)讓旅客感覺(jué)到服務(wù)的貼心。也有可能當(dāng)上一次在乘坐南航航班的時(shí)候,航班延誤了,那么在下一次旅行的時(shí)候,南航的工作人員就會(huì)向旅客道歉,南航也會(huì)針對(duì)航班延誤出臺(tái)一些政策,比如對(duì)里程做一些補(bǔ)償,做問(wèn)候或者送一些小禮物,讓旅客能夠感受到南航的關(guān)懷。而這些,都是基于對(duì)客戶信息的把握。
對(duì)于一些還并沒(méi)有成為南航會(huì)員的旅客,南航就會(huì)通過(guò)旅客行為數(shù)據(jù)庫(kù)來(lái)進(jìn)行識(shí)別,當(dāng)一名旅客進(jìn)入客艙之后,系統(tǒng)就會(huì)“認(rèn)出”他/她,若顯示已有3次乘坐南航飛機(jī)的經(jīng)歷,客艙乘務(wù)員就會(huì)在飛機(jī)上直接邀請(qǐng)其加入會(huì)員,并把之前的里程也準(zhǔn)備好一并加入,這樣就增強(qiáng)了旅客忠誠(chéng)度,做到精準(zhǔn)發(fā)展,精準(zhǔn)維系。
“在沒(méi)有客戶行為數(shù)據(jù)庫(kù)之前,一些客戶的資料我們甚至都沒(méi)有記錄下來(lái)。也許是分散的沒(méi)有集中起來(lái),也許是根本就沒(méi)有記錄。因此,也談不上形成一個(gè)整體的關(guān)注旅客的數(shù)據(jù)庫(kù)。通過(guò)記錄旅客數(shù)據(jù)庫(kù)的行為,我們可以更好的總結(jié)旅客個(gè)性化的需求、提供更有針對(duì)性的服務(wù),維系客戶和我們的關(guān)系,確保他們的忠誠(chéng)度?!?——南航CBD項(xiàng)目負(fù)責(zé)人黃文強(qiáng)。
客戶行為數(shù)據(jù)庫(kù)與客戶資料數(shù)據(jù)核心(簡(jiǎn)稱SVC)、產(chǎn)品數(shù)據(jù)核心(簡(jiǎn)稱SAC)共同組成了南航營(yíng)銷與服務(wù)的三大核心數(shù)據(jù)庫(kù)。此項(xiàng)目的建立基于CBD的營(yíng)銷服務(wù)管控模式,對(duì)所有高價(jià)值客戶實(shí)施針對(duì)性營(yíng)銷和個(gè)性化服務(wù),可以很好的提高營(yíng)銷服務(wù)精準(zhǔn)率,提升營(yíng)銷業(yè)績(jī)和品牌效應(yīng),并推動(dòng)了南航戰(zhàn)略轉(zhuǎn)型全面落地。
二、問(wèn)題與挑戰(zhàn)
- 用戶識(shí)別困難:常客資料分散、異構(gòu);
- 資源浪費(fèi):子系統(tǒng)繁多、功能冗余,溝通成本高;
- 維護(hù)成本高:異構(gòu)的系統(tǒng)、難以擴(kuò)展;
- 信息孤島:信息共享困難,通信方式混亂;
- 缺乏全流程的概念:系統(tǒng)各自為政;
- 營(yíng)銷困難:缺乏統(tǒng)一的數(shù)據(jù)收集系統(tǒng),無(wú)法全面分析;
三、系統(tǒng)需求
- 建立統(tǒng)一的客戶行為數(shù)據(jù)模型;
- 從??蛿?shù)據(jù)庫(kù)、高端客戶數(shù)據(jù)庫(kù)、B2C、呼叫中心多種旅客信息來(lái)源聚合客戶行為數(shù)據(jù);
- 建設(shè)明珠會(huì)員系統(tǒng)(對(duì)外)、旅客忠誠(chéng)度系統(tǒng)(對(duì)內(nèi))和智能化??头e分體系;
四、關(guān)鍵設(shè)計(jì)決策
(一)邏輯架構(gòu)

各種來(lái)源的數(shù)據(jù)經(jīng)過(guò)ETL清洗、轉(zhuǎn)換,通過(guò)ESB自動(dòng)匯入客戶行為數(shù)據(jù)庫(kù)中,為旅客忠誠(chéng)度系統(tǒng)、智能化??头e分體系等上層分析應(yīng)用提供基礎(chǔ)數(shù)據(jù)。使用規(guī)則引擎Drools分析客戶行為。
(二)部署圖:

(三)關(guān)鍵技術(shù)點(diǎn):
- 分布式部署;
- 負(fù)載均衡/集群;
- 高可用;
- 動(dòng)靜分離;
- 數(shù)據(jù)整合與割接;
(四)開(kāi)源技術(shù)棧:
- Redhat Enterprise Linux;
- LVS;
- GFS;
- JBoss;
- EJB3;
- Apache Web服務(wù)器;
- Drools;
- Jasper ETL;
- MySQL;
五、合作方式
紅帽提供資深顧問(wèn)和開(kāi)發(fā)人員與南航的項(xiàng)目組共同封閉式開(kāi)發(fā)。
六、客戶收益
CBD項(xiàng)目是南航與開(kāi)源技術(shù)的第一次完美結(jié)合,是南航IT開(kāi)源化的第一塊奠基石,該項(xiàng)目的成功促成南航堅(jiān)定地、不可逆地轉(zhuǎn)向開(kāi)源技術(shù)的方向。
CBD項(xiàng)目至少給南航帶來(lái)以下的收益:
- 降低實(shí)施成本。如果采用某廠商的商業(yè)軟件組合,成本至少高出1000萬(wàn)元以上;
- 避免廠商鎖定,獲得技術(shù)自主權(quán)。通過(guò)使用開(kāi)源軟件自主研發(fā),獲得真正的技術(shù)主導(dǎo)權(quán);
- 獲得業(yè)務(wù)敏捷性。為了在競(jìng)爭(zhēng)中獲得關(guān)鍵的競(jìng)爭(zhēng)優(yōu)勢(shì),企業(yè)需要實(shí)現(xiàn)差異化的業(yè)務(wù)戰(zhàn)略,使用開(kāi)源軟件可以大大縮短從業(yè)務(wù)意圖到技術(shù)實(shí)現(xiàn)之間的上線時(shí)間;
- 為南航培養(yǎng)了開(kāi)源技術(shù)人才,形成了開(kāi)源文化氛圍。我們不僅“授人與魚(yú)”,還做到了“授人與漁”;
南航移動(dòng)運(yùn)行網(wǎng)項(xiàng)目
一、項(xiàng)目背景
天合聯(lián)盟成員中國(guó)南方航空股份有限公司(以下簡(jiǎn)稱南航),總部設(shè)在廣州,以藍(lán)色垂直尾翼鑲紅色木棉花為公司標(biāo)志,是中國(guó)運(yùn)輸飛機(jī)最多、航線網(wǎng)絡(luò)最發(fā)達(dá)、年客運(yùn)量最大的航空公司。目前,南航經(jīng)營(yíng)客貨運(yùn)輸機(jī)600多架,機(jī)隊(duì)規(guī)模居亞洲第一,世界第五(數(shù)據(jù)來(lái)源:國(guó)際航協(xié)),是全球第一家同時(shí)運(yùn)營(yíng)空客A380和波音787的航空公司。
移動(dòng)化是南航信息化建設(shè)的重要主題,結(jié)合公司業(yè)務(wù)流程、實(shí)際運(yùn)行情況等推出南航移動(dòng)運(yùn)行網(wǎng),實(shí)現(xiàn)移動(dòng)化工作,提供信息公告、航班動(dòng)態(tài)、保障錄入、值班領(lǐng)導(dǎo)、機(jī)組管理、空勤查班、乘務(wù)申請(qǐng)、消息推送、運(yùn)行概覽、個(gè)人待辦等功能,打造工作的移動(dòng)APP。
二、系統(tǒng)需求
- 可在Android和iOS兩大移動(dòng)操作系統(tǒng)上運(yùn)行;
- 包括航班動(dòng)態(tài)、機(jī)組任務(wù)、空勤任務(wù)、保障信息等多個(gè)功能模塊;
三、關(guān)鍵設(shè)計(jì)決策
使用高科研發(fā)的變色龍移動(dòng)開(kāi)發(fā)平臺(tái)構(gòu)建南航移動(dòng)運(yùn)行網(wǎng)。變色龍平臺(tái)具備模塊化、高性能、跨平臺(tái)、快速開(kāi)發(fā)等功能,可以快速實(shí)現(xiàn)業(yè)務(wù)需求。變色龍移動(dòng)平臺(tái)具備強(qiáng)大的擴(kuò)展性,有豐富的組件、模板,滿足不同需求的自由組合。
(一)跨平臺(tái)
- 原生實(shí)現(xiàn):各移動(dòng)操作系統(tǒng)的編程語(yǔ)言不統(tǒng)一,需要單獨(dú)開(kāi)發(fā),多屏幕尺寸適配困難,技術(shù)門檻高,研發(fā)成本高;
- HTML5實(shí)現(xiàn):一次編碼,隨處運(yùn)行。支持輕應(yīng)用方式發(fā)布,支持客戶端方式發(fā)布;
(二)高性能
- 高性能Webkit加速器,解決HTML5兼容性問(wèn)題,大大提升運(yùn)行速度;
- 用戶體驗(yàn)優(yōu)先的架構(gòu)(SPA);
- 可離線使Hybird性能加速;
(三)模塊化
- 貫穿平臺(tái)的模塊化架構(gòu);
- 自由組裝;
- 可重用;
- 個(gè)性定制;
(四)快速開(kāi)發(fā)
- 快速開(kāi)發(fā)SDK:一鍵創(chuàng)建?程、模塊、UI ,代碼模板,組件庫(kù),交叉調(diào)試套件;
- UI模板:內(nèi)置多種代碼模板,SDK快速應(yīng)用模板,接口業(yè)務(wù)對(duì)接即完成;
- UI組件:List,Calendar,HUD,Segment,Navigation,Button,Cache等;
(五)移動(dòng)云服務(wù)
1. 消息推送
- 支持APNs、GCM、NIO三種推送渠道;
- 支持回執(zhí),確保消息到達(dá);
- 發(fā)送失敗消息自動(dòng)重發(fā);
- 支持按模塊推送;
- 支持分類發(fā)送;
2. 設(shè)備管理
- 設(shè)備資產(chǎn)登記;
- 信息信息采集;
- 集成MDM;
3. 系統(tǒng)公告
4. 意見(jiàn)反饋
5. 權(quán)限管理
- 基于RBAC0模型構(gòu)建;
- 實(shí)現(xiàn)應(yīng)用、模塊訪問(wèn)權(quán)限控制;
- 細(xì)粒度權(quán)限管理;
6. 即時(shí)通信
(六)云管理平臺(tái)
- 應(yīng)用管理;
- 模塊管理;
- 效能分析;
- 用戶行為分析;