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




























