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