從無從下手到見招拆招,蘇寧金融移動端登錄優化之道
原創【51CTO.com原創稿件】古人云:天下之難事必作于易,天下之大事必作于細;意思是說解決難事要從容易解決時去謀劃,做大事要從細小處做起,軟件工程也是如此。
在登錄優化過程中,蘇寧金融秉持“圖難于其易,為大于其細的思想”,已經達成登錄響應時間、成功率及用戶體驗的提升。
本文主要從如下幾個方面介紹蘇寧金融移動端登錄優化的道和術:
- 找到登錄優化之道
- 完善系統的監測和度量
- 梳理登錄的每個環節
- 優化登錄的各個環節
找到登錄優化之道
隨著用戶數量的急劇增長,以及業務系統接入數量的不斷增多,我們經常接到用戶的反饋:登錄響應慢,登錄被踢等情況。從何處著手解決這個問題,對于項目團隊來說非常困難,感覺如大海撈針。
我們團隊在思考這兩個問題:
- 登錄異常發生時,為什么我們需要花費大量時間、人力去還原現場?
- 登錄出現異常后,為什么我們開發人員***才發現?
“圖難于其易”,我們想的是應該先拋開單個點的優化,從容易的地方著手,先收集數據,追溯用戶使用行為和系統運行時快照,完善系統的監測和度量,建立端到端全鏈路覆蓋的監控系統,從而建立全鏈路的數據指標體系。
“為大于其細”,然后梳理整個流程各環節,針對流程中每個細節再對癥下藥,各個擊破。
完善系統的監測和度量
建立端到端全鏈路覆蓋的監控系統,我們把監控系統分成三個細小的階段:
- 客戶端數據收集
- 端到端鏈路打通
- 網關與后端微服務監控打通
具體如下圖:
圖 1:端到端的監控系統鏈路圖
完善客戶端監控采集
客戶端自動收集所有登錄方法的響應時間、成功率、異常時系統運行時快照信息、用戶訪問軌跡等信息。
當發生網絡異常時,使用網絡監測小工具,采集相關網絡異常數據,針對異常概率較高的網絡異常針對性進行監控。
打通端到端鏈路
客戶端每次網絡請求時生成全局 uniqueFlag,上傳客戶端監控系統同時作為客戶端請求信息傳入 API 網關系統,實現客戶端與后端全鏈路日志打通。
打通后端各服務系統監控
API 網關系統與后端服務系統,通過自研 RSF 微服務調用框架,每次微服務調用,用 traceID 貫穿鏈路上的所有微服務,并收集后端業務邏輯、異常堆棧、運行時快照等信息日志,異步拋送監控系統。
API 網關系統和單點登錄系統都接入自研秒級監控系統,并實現秒級快速反饋系統問題。
圖 2:移動端登錄秒級監控系統大盤
梳理登錄的每個環節
蘇寧金融移動端的登錄涉及的系統眾多,本身又處于一個復雜的硬件和網絡環境中,如下圖:
圖 3:蘇寧金融移動端登錄影響因素
這里面涉及的因素很多,包含客戶端、網絡、后端各系統等等,具體如下:
- 用戶網絡狀態--用戶網絡是否連接、可用
- 用戶網絡質量--用戶網絡接入方式、是不是弱網環境
- 客戶端登錄相關邏輯處理
- 客戶端 Cookie 管理
- 運營商 DNS 服務
- CDN 服務
- 網絡鏈路連接質量
- 后端各系統環境
- 后端各系統間調用
- 后端各系統登錄相關業務邏輯
- 后端系統 Cookie 管理
- ...
優化登錄的各個環節
優化網絡鏈路
建立端到端的全鏈路監控之后,我們發現,分析以前難以定位的問題,已經不再那么困難了。
表 1:優化前登錄響應時間
如上圖,從監控數據看:網絡耗時明顯太長,證明我們蘇寧金融 App 的網絡質量并不好。
那么,首要是提高網絡質量,有如下幾個方法:
升級 CDN 服務
由于歷史遺留問題,我們之前的客戶端網絡庫不支持 SNI,導致接入了不支持 SNI 擴展的舊版本加速平臺。舊平臺不僅邊緣節點少而且覆蓋范圍也小。
客戶端立即更新了支持 SNI 的網絡基礎庫,并把我們金融 CDN 服務也切到新的加速平臺。
新平臺對比舊平臺,有了一個質的提高,特點有:效率高,節點多,覆蓋廣,支持 HTTP/2.0。
使用 HTTP/2,多路復用,加速傳輸
HTTP/2 采用二進制幀格式而非文本格式進行傳輸,突破了請求并發數的限制,能夠實現完全的多路復用,帶來數據的傳輸效率和建鏈復用效益***化。在 3G/4G/Wi-Fi 網絡下,HTTP2 均提供了***的網絡性能。
圖 4:HTTP/2.0 加速效果
在實施了網絡鏈路優化后,查看監控數據顯示,網絡鏈接性能平均提升了 200ms,但我們并不是很滿意。
合并網絡請求,去掉所有的重定向
能否進一步優化網絡鏈路?通過鏈路分析,網絡鏈路涉及到用戶設備,基礎運營商網絡,CDN 廠商,服務器性能,在網絡上進一步優化的難度很大,而提升空間有限。
“圖難于其易”,我們在想,能否減少不確定的網絡交互,從登錄核心流程調整進行優化呢?
通過分析監控系統采集的日志,發現每次客戶端與后端系統均有三次網絡請求交互(兩次重定向請求),時序圖如下:
圖 5:優化前登錄核心流程時序圖
很明顯,我們需要做減法,較容易解決的方案就是減少重定向。通過改造單點登錄系統和 API 網關系統,客戶端與后端系統的三次網絡請求變為一次網絡請求。
之前客戶端重定向請求改為 API 網關系統通過 RPC 遠程服務調用其他后端各系統。時序圖如下:
圖 6:優化后登錄核心流程時序圖
合并網絡請求優化后,效果令人驚喜。登錄響應時間,如下圖:
表 2:優化后登錄響應時間對比
規范 Cookie 管理
優化結果很***,但登錄成功率依然不是特別高,結合監控系統分析,主要有以下幾種原因:
- 各類網絡錯誤,因為登錄場景的特殊性,經常出現用戶網絡異常、網絡不穩定的情況。
- Cookie 失效或為空,情況一:用戶超過 15 天未使用,用戶登錄 Cookie 正常過期,屬于正常登錄業務邏輯。
情況二:非正常 Cookie 失效或為空,通過分析,主要是由于客戶端和后端多系統的 Cookie 管理混亂導致的,這也是導致登錄被踢的主要原因。
那怎么才能做到更加規范管理,我們主要從下面幾個細節來規范前后端 Cookie 管理:
規范后端系統 Cookie 管理
后端系統(API 網關系統、單點登錄系統)Cookie 各屬性進行規范設置,特別是 domain,path,expires 等屬性進行統一規范管理。
規范客戶端 Cookie 管理,由手動管理改為系統自動管理
客戶端需支持各種業務系統的登錄狀態管理,包含 native 和 H5 等不同形式。
由于每個業務系統的差異,Android 之前的設計是手動處理 Cookie,導致后期維護成本特別大。
優化后,Android 端使用系統 framework CookieManager 管理 Cookie,使用 UC 的 CookieManager 存儲 Cookie。如下圖:
圖 7:優化后 AndroidCookie 管理
規范 Cookie 管理后,登陸成功率提升非常明顯。見下圖:
表 3:優化后登錄成功率對比
從登錄異常發生時的大海撈針、無從下手,到問題的快速、準確定位;從登錄過程中每個環節的梳理到登錄流程每一步的優化,我們始終秉持“圖難于其易,為大于其細 ”的理念!
結束語
路漫漫其修遠兮,吾將上下而求索!經過項目團隊的不懈努力,蘇寧金融 App 的登錄更加高效、穩定。
然而,以極客的精神打造***物種,追求***體驗的腳步從來沒有終點!未來,我們將在監控系統智能化、網絡鏈路深度優化、登錄新型交互方式等方向繼續努力探索,永不停歇!
作者:張旭東、谷裕
簡介:張旭東,蘇寧易購金融研發中心資深工程師,主要負責移動端性能監控、性能優化相關工作。有社交、電商、教育、支付、金融等相關行業 7 年以上工作經歷,對移動互聯網技術研發具有深刻認識和豐富經驗。
谷裕,蘇寧易購金融研發中心資深服務端工程師,9 年移動互聯網開發工作經驗,擅長服務端架構和規劃。現負責蘇寧金融移動端網關架構相關工作,對互聯網服務端的規劃、需求、體驗等各個方面都有著深刻、系統性的理解和認識。
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】