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