蘇寧云臺助手多端設(shè)計(jì)實(shí)踐
原創(chuàng)【51CTO.com原創(chuàng)稿件】1. 云臺助手介紹
1.1 基本介紹
云臺助手是蘇寧面向商家和供應(yīng)商推出的一款多端產(chǎn)品包括iOS版、Android版和PC客戶端,旨在方便服務(wù)各種模式的商戶和供應(yīng)商,店鋪信息隨時(shí)管理,經(jīng)營信息實(shí)時(shí)掌握,讓好生意不難做。它支持多端每端的模式眾多,每個(gè)模式又有很多功能模塊,各種功能模塊怎么在客戶端中集成和展示,中間又面臨著哪些產(chǎn)品和設(shè)計(jì)的挑戰(zhàn)。
1.2 業(yè)務(wù)特點(diǎn)
云臺助手,支持多種合作模式,每個(gè)模式又有很多功能模塊。
平臺 |
自營 |
特賣 |
零售云 |
拼購 |
商品管理 |
商品庫 |
商品管理 |
商品管理 |
|
營銷管理 |
營銷管理 |
|||
訂單管理 |
訂單管理 |
訂單管理 |
交易管理 |
|
退款管理 |
退款管理 |
退款管理 |
退款管理 |
|
投訴管理 |
投訴管理 |
投訴管理 |
||
評價(jià)管理 |
評價(jià)管理 |
|||
數(shù)據(jù)管理 |
數(shù)據(jù)管理 |
數(shù)據(jù)管理 |
數(shù)據(jù)管理 |
|
行業(yè)縱覽 |
行業(yè)縱覽 |
|||
采購訂單 |
||||
預(yù)約管理 |
- 支持多種合作模式,每個(gè)模式又有很多功能模塊,功能多涉及的業(yè)務(wù)線多;
- 對系統(tǒng)穩(wěn)定性安全性要求高;
- 818,雙11,促銷節(jié)點(diǎn),系統(tǒng)承壓時(shí)間比較長;
- 涉及開發(fā)團(tuán)隊(duì)多,各業(yè)務(wù)系統(tǒng)版本交織。
2. 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)上下文
注:RSF為蘇寧RPC遠(yuǎn)程服務(wù)調(diào)用服務(wù)框架(下文同)
接入網(wǎng)關(guān),它是整個(gè)系統(tǒng)的核心組件,一方面負(fù)責(zé)將客戶端的請求轉(zhuǎn)發(fā)給內(nèi)部業(yè)務(wù)系統(tǒng),包括協(xié)議的轉(zhuǎn)換(http -> hessian、rsf、tcp)、接口合并等,同時(shí)將內(nèi)部接口的響應(yīng)報(bào)文轉(zhuǎn)換成MSOP固定結(jié)構(gòu)的響應(yīng)報(bào)文格式,并封裝成統(tǒng)一響應(yīng)對象。內(nèi)部服務(wù)包括商家交易和財(cái)務(wù)及商品模塊等。
同時(shí)負(fù)責(zé)將各個(gè)業(yè)務(wù)內(nèi)部系統(tǒng)產(chǎn)生的通知型消息,主動(dòng)推送給客戶端??蛻舳硕喽酥唤尤刖W(wǎng)關(guān)服務(wù),接入網(wǎng)關(guān)組裝內(nèi)部各業(yè)務(wù)系統(tǒng)的微服務(wù)
各層業(yè)務(wù)功能如下所示:
2.2 接入層設(shè)計(jì)
一個(gè)APP,最核心的東西就是數(shù)據(jù),而數(shù)據(jù)的來源就是接口。
剛開始針對每一個(gè)內(nèi)部服務(wù)相應(yīng)的服務(wù)端也要開發(fā)一個(gè)接口,隨著APP功能越來越豐富,開發(fā)周期變長、響應(yīng)業(yè)務(wù)時(shí)間逐漸變慢了。 所以通過統(tǒng)一規(guī)范,提供接口配置方式提高客戶端接口開發(fā)效率。同時(shí)提供MOCK功能減少客戶端開發(fā)對接口提供方的依賴。
接入層主要功能如下:
- 標(biāo)準(zhǔn)化的配置流程,免發(fā)布,即配即生效;
- 靈活的版本管理,方便客戶端版本的各種兼容和升級;
- 每個(gè)接口單獨(dú)的mock,減少客戶端開發(fā)對接口提供方的依賴,可獨(dú)立開發(fā)和調(diào)試;
- 提高客戶端接口開發(fā)效率,規(guī)范客戶端接口;
不以規(guī)矩,不能成方圓,首先我們定義了以下規(guī)范:
基本規(guī)范
接口參數(shù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):
一些常用的公共入?yún)⒑头祷貐?shù)的名稱提高客戶端接口開發(fā)效率。
比如:列表接口中的當(dāng)前頁,每頁條數(shù),總條數(shù)等。
接口名稱規(guī)范:
服務(wù)上下文/gateway /插件英文名/業(yè)務(wù)名稱/操作類型組成。
異常提示可配置:
有些內(nèi)部接口返回的報(bào)錯(cuò)提示不可直接用于顯示在客戶端頁面,需接入層轉(zhuǎn)換成用戶友好的提示。
接口的合并:
為了減少客戶端和服務(wù)器建立連接和斷開連接消耗的時(shí)間,資源,電量,盡量避免頻繁的間隔網(wǎng)絡(luò)請求。在業(yè)務(wù)場景允許的情況下,盡量1個(gè)頁面對應(yīng)1個(gè)接口。接入層需要做好接口的合并,提升用戶體驗(yàn)。
接口文檔的標(biāo)準(zhǔn)化:
生成可讀性的標(biāo)準(zhǔn)化文檔方便客戶端開發(fā)理解接口的用途,掌握接口的使用。
接口配置
在以上標(biāo)準(zhǔn)化的基礎(chǔ)上,為了縮短開發(fā)周期,我們實(shí)現(xiàn)了接口配置化,能支持自動(dòng)發(fā)布接口、動(dòng)態(tài)修改配置項(xiàng)實(shí)現(xiàn)接口的治理。
MOCK功能
接口mock,在內(nèi)部系統(tǒng)服務(wù)無法提供的情況下,可以使用mock接口。在接口列表頁面打開mock配置即可。
內(nèi)部業(yè)務(wù)系統(tǒng)給出接口文檔后,客戶端就可以按照接口文檔進(jìn)入開發(fā)階段,減少對接口的依賴提高開發(fā)效率。每個(gè)接口都支持模擬數(shù)據(jù)的修改,滿足客戶端的開發(fā)需求。
2.3 權(quán)限管理
由上文提到過的云臺助手的業(yè)務(wù)特點(diǎn),支持多種合作模式,每個(gè)模式又有很多功能模塊。這是通過權(quán)限管理來實(shí)現(xiàn)的。同時(shí)整個(gè)客戶端的權(quán)限可以分為兩種:合作模式權(quán)限 、 主子賬號權(quán)限。
合作模式權(quán)限就是根據(jù)用戶合作模式來控制不同類型的用戶可以操作的數(shù)據(jù)項(xiàng)、功能模塊,以及消息推送和按鈕操作等功能。這些功能權(quán)限控制在全局的攔截器中都做了判斷。
同時(shí)用戶合作模式更新(包含增加、刪除)可以實(shí)時(shí)更新合作模式所屬數(shù)據(jù)項(xiàng)、功能模塊及其他所涉及到的模塊的權(quán)限更新。合作模式權(quán)限是通過權(quán)限中心和云臺運(yùn)營后臺進(jìn)行雙向控制。
主子賬號權(quán)限就是主賬號擁有當(dāng)前合作模式的最大權(quán)限,但同時(shí)還可以管理控制自己所屬子賬號的權(quán)限。主子賬號權(quán)限是通過權(quán)限中心進(jìn)行集中管理。
2.4 多端消息推送設(shè)計(jì)
消息推送這塊系統(tǒng)剛上線階段時(shí)間緊,需求也沒有那么復(fù)雜。為了提高上線速度,所以復(fù)用了公司的推送系統(tǒng)實(shí)現(xiàn)了簡單的推送消息功能。
缺點(diǎn):
無法滿足APP這邊個(gè)性化的推送需求(消息需要有過期時(shí)間,有返回值等)。
MQ消費(fèi)消息有延遲,和別的系統(tǒng)共有一個(gè)推送源,大促數(shù)據(jù)量大是會(huì)受到其他系統(tǒng)的影響。
沒有完善的監(jiān)控日志等,導(dǎo)致出現(xiàn)問題時(shí)常常一臉懵逼。
無法兼容滿足PC客戶端的推送需求。
隨著APP的活躍度上升,推送也是越來越重要,所以我們自己基于Netty實(shí)現(xiàn)了消息推送。
主要功能如下:
- 安全性高,基于RSA精簡的加密握手協(xié)議,簡單,高效,安全。
- 支持?jǐn)嗑€重連,及弱網(wǎng)下的快速重連,無網(wǎng)絡(luò)下自動(dòng)休眠節(jié)省電量和資源。
- 集群部署,路由功能基于Redis的PUB/SUB機(jī)制實(shí)現(xiàn),性能好,可用性高。
- 協(xié)議簡潔,支持多數(shù)據(jù)類型(JSON二進(jìn)制等)以及壓縮,更加節(jié)省流量。
- 支持http代理,一個(gè)長鏈接也可用于請求業(yè)務(wù)數(shù)據(jù),讓APP請求更加及時(shí)。
- 高度可配置化,基本上通過修改配置可滿足大部分場景。
- 監(jiān)控完善,日志詳細(xì),可快速排查線上問題及服務(wù)調(diào)優(yōu)。
處理流程:
1. 各個(gè)業(yè)務(wù)系統(tǒng)通過RSF將產(chǎn)生的消息實(shí)時(shí)發(fā)送給客戶端消息處理系統(tǒng)。
2. 消息處理系統(tǒng)按照配置規(guī)則處理消息內(nèi)容,并往Redis發(fā)布消息。
3. 推送系統(tǒng)訂閱了Redis相關(guān)主題消息,收到消息后檢查通道可用性及發(fā)送推送消息。
4. 無可用通道的消息會(huì)由定時(shí)任務(wù)從HBase拉數(shù)據(jù)按配置邏輯執(zhí)行消息推送。
5. 各個(gè)環(huán)節(jié)都有詳細(xì)的日志記錄,可快速定位問題及性能調(diào)優(yōu)。
后期規(guī)劃:
技術(shù)上基于Redis的PUB/SUB機(jī)制實(shí)現(xiàn)的路由,會(huì)造成資源的浪費(fèi),因?yàn)橛嗛喠酥黝}的容器都會(huì)接受到消息,盡管本地可能不存在該消息的長連接。后期準(zhǔn)備為指向存在該長連接的容器發(fā)送消息。同時(shí)目前的推送系統(tǒng)沒有基于SSL通信,也存在安全隱患。
2.5 高可靠高可用
可靠的系統(tǒng)是業(yè)務(wù)穩(wěn)定、快速發(fā)展的基石。要求高可用系統(tǒng)需要確保每個(gè)部署單元在物理上和邏輯上都是高可用的,不允許有單點(diǎn)故障風(fēng)險(xiǎn)存在。每個(gè)模塊需要是集群架構(gòu)、主備架構(gòu)或雙活架構(gòu)。
當(dāng)一個(gè)節(jié)點(diǎn)不可用時(shí),其他集群節(jié)點(diǎn)或備機(jī)節(jié)點(diǎn)需要能接管服務(wù)請求,并且容量是充足的。
物理機(jī)肯定會(huì)出故障;單個(gè)物理機(jī)宕機(jī)后,系統(tǒng)必須保證服務(wù)仍然可用,且必須保證系統(tǒng)容量充足。所以系統(tǒng)部署圖如下:
上圖中Web服務(wù)器、應(yīng)用服務(wù)器、內(nèi)存數(shù)據(jù)庫、關(guān)系數(shù)據(jù)庫都是集群架構(gòu)部署,符合系統(tǒng)高可用原則。
2.6 全鏈路監(jiān)控
蘇寧有如下告警平臺和告警機(jī)制,能夠準(zhǔn)確地通知開發(fā)及運(yùn)維人員系統(tǒng)的異常狀況,有助于快速定位問題和解決問題。
1. 穆加:蘇寧智能告警平臺,整合了硬件監(jiān)控、云跡服務(wù)端性能監(jiān)控、Kafka后臺管理系統(tǒng)、決策分析平臺、機(jī)器學(xué)習(xí)平臺、準(zhǔn)實(shí)時(shí)計(jì)算平臺監(jiān)控來源,提供更細(xì)致化的、豐富的指標(biāo)種類,提供豆芽(蘇寧自研的實(shí)時(shí)通訊工具)通知、短信、郵件、語言等多種告警方式。
2. 云跡—異常監(jiān)管系統(tǒng):能針對某個(gè)系統(tǒng)的某種異常,在單位時(shí)間內(nèi)異常量或環(huán)比增長量超過配置的閥值,則進(jìn)行短信或者郵件告警。
3. 云跡—APP性能監(jiān)控:云跡APP性能監(jiān)控是下一代移動(dòng)應(yīng)用性能監(jiān)測管理解決方案。專注于幫助開發(fā)者解決應(yīng)用上線后性能問題。通過內(nèi)嵌云跡APP SDK來獲取真實(shí)用戶訪問體驗(yàn)、及時(shí)發(fā)現(xiàn)使用過程中的崩潰、連接超時(shí)、內(nèi)存泄漏等問題,幫助開發(fā)者第一時(shí)間發(fā)現(xiàn)APP的性能問題。
2.7 安全
客戶端的安全性一般來說分為以下三類:
- 客戶端的代碼安全,包括代碼混淆,加密等。
- 客戶端數(shù)據(jù)存儲安全,主要是App本地存儲的數(shù)據(jù)是否有相應(yīng)的安全措施。
- 客戶端數(shù)據(jù)傳輸安全,指數(shù)據(jù)從客戶端傳到服務(wù)端的過程中,數(shù)據(jù)有沒有被抓取篡改等;
第一第二點(diǎn)主要是客戶端相關(guān)的安全問題,在此不做討論。
數(shù)據(jù)傳輸安全主要是通過HTTPS通信保證的,商家端全站HTTPS改造工作2017年上半年已經(jīng)全部完成,所以現(xiàn)在客戶端和服務(wù)端的通信都是Https保證了通信的安全性。技術(shù)方案是:在CDN和WAF層做HTTPS的卸載,到達(dá)應(yīng)用服務(wù)器都是HTTP請求,這樣后期HTTPS的優(yōu)化,證書管理,安全升級等工作就集中在CDN和WAF兩層。
同時(shí)WAF層通過黑、白名單配置IP、User-Agent、Referer、URL等相關(guān)規(guī)則提供接口級別的訪問控制;提供接口級別的流量控制,限制接口訪問流量和用戶訪問頻率,防護(hù)CC攻擊,保證業(yè)務(wù)穩(wěn)定;攻擊防護(hù),證書卸載,負(fù)載均衡等安全策略來專門為Web應(yīng)用提供保護(hù)。
另外蘇寧注重保護(hù)用戶隱私,結(jié)合客戶端開發(fā),主要體現(xiàn)在以下幾方面:
- 響應(yīng)數(shù)據(jù)中包含用戶隱私的字段數(shù)據(jù),需要加*號。如:手機(jī)號,身份證,用戶郵箱,支付賬號,郵寄地址等。
- 請求參數(shù)中包含用戶隱私的字段參數(shù),如:登陸接口的密碼字段,需要進(jìn)行加密傳輸,避免被代理捕捉請求后獲取明文密碼。
- 客戶端和服務(wù)器通過約定的算法,對傳遞的參數(shù)值進(jìn)行簽名匹配,防止參數(shù)在請求過程中被抓取篡改。
- 接入公司的風(fēng)控系統(tǒng),通過靈活的配置具體風(fēng)控規(guī)則,保證風(fēng)險(xiǎn)措施應(yīng)用,進(jìn)一步保證系統(tǒng)的安全穩(wěn)定。
3 未來發(fā)展和挑戰(zhàn)
SaaS化:提供應(yīng)用市場平臺,商戶可以直接定制微應(yīng)用
未來云臺助手將致力于與服務(wù)商共同打造面向所有商家提供豐富的業(yè)務(wù)經(jīng)營插件。為了實(shí)現(xiàn)這個(gè)目標(biāo),插件服務(wù)市場為開發(fā)者提供了插件運(yùn)營平臺。同時(shí)星河為開發(fā)者提供插件開發(fā)及服務(wù)部署環(huán)境。
云臺助手插件從上線到使用的主要流程如下:
(1)插件管理
插件統(tǒng)一由服務(wù)商和開發(fā)者在應(yīng)用中心創(chuàng)建,運(yùn)營在服務(wù)市場運(yùn)營平臺進(jìn)行審核后上線,
服務(wù)商可以在應(yīng)用中心管理自己創(chuàng)建的應(yīng)用。
(2)插件使用
客戶端通過云臺助手服務(wù)端來調(diào)用服務(wù)市場插件列表進(jìn)行插件選擇、訂購。插件使用授權(quán)通過應(yīng)用中心進(jìn)行。
(3) 插件權(quán)限
賬號及子賬號的使用權(quán)限由權(quán)限中心統(tǒng)一維護(hù),客戶端啟動(dòng)插件調(diào)用服務(wù)時(shí)由云臺助手服務(wù)端判斷賬號是否有使用權(quán)限。
作者:陸躍躍,蘇寧易購IT總部供應(yīng)商及商戶平臺研發(fā)中心高級技術(shù)經(jīng)理,多年互聯(lián)網(wǎng)移動(dòng)應(yīng)用服務(wù)端技術(shù)開發(fā)經(jīng)驗(yàn),從事云臺助手APP的架構(gòu),開發(fā)及維護(hù)。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請注明原文作者和出處為51CTO.com】