从无从下手到见招拆招,苏宁金融移动端登录优化之道

1,351 阅读9分钟
原文链接: mobile.51cto.com

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

【编辑推荐】

  1. AI开发者看过来,主流移动端深度学习框架大盘点
  2. iOS下的图片处理与性能优化
  3. 超全面的移动端UI 设计规范整理汇总
  4. 实践App内存优化:如何有序地做内存分析与优化
  5. Android APP 性能优化的一些思考
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 1