【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】