移动域全链路可观测架构和关键技术

328次阅读  |  发布于2年以前

本文侧重阐述团队对移动领域全链路技术理念的原创性引入,整篇约1.2万字、阅读需要15分钟,读者将收获移动技术域体验优化的思路转变,以及软件定义体验的沉淀和研发实践。

App现有架构挑战

2013年开始All in无线到如今,集团移动技术发展十余年,历经几个关键阶段,

中后期通过移动小组机制进行各BU拉通和能力共建。自此,移动基础设施基本成型,各个领域各自沉淀若干组做到能力复用,App基本形成上层业务、中间研发框架或容器、基础能力三层的架构。我们团队作为无线端侧基础设施的承建方,过去重点是负责集团移动端的基础能力建设,近年来,团队重点深入淘宝业务场景展开性能优化,通过体验优化项目横向剖析App架构和及相关调用链路,感受到集团App普遍存在如下共性问题: (图1 淘宝App架构挑战)

以上是从APP结构的角度对当前客户端在运维排查、度量监控、全链路优化等方面的不足进行的一些思考,也是我们后续的发力方向。

可观测体系

监控到可观测性的演变

可观测性是一套理念系统,没有对技术实现的具体要求,重点是通过引入该理念,将理念应用到我们的业务迭代和问题洞察中。传统的运维可能只能给我们带来最顶层的告警和异常的概况,当需要更深层次的错误信息定位的时候,往往会通过建群拉人,然后先通过人肉找寻问题的特征,甚至是某个模块的开发承担起分析各个模块的依赖关系等的工作,问题处理基本涉及3个角色以上(业务、测试、开发、架构、平台等)。

相比传统的监控,可观测性能够通过结合数据,并且将数据有机联系在一起,产生更好的连接,帮助我们更好的观察系统的运行状况,快速定位和解决问题。「监控告诉我们系统的哪些部分是工作的,而可观测性告诉我们那里为什么不工作了」,下图2说明了两者之间的关系,监控侧重宏观大盘展现,而可观测性包含了传统监控的范畴。

(图2 监控和可观测的关系)

从上图来看,核心还是观察各个模块以及关键调用和依赖等的输出,基于这些输出来判断整体的工作状态,业界通常会把这些关键点总结为Traces、Loggings、Metrics

可观测性关键数据

(图3 可观测性关键数据)

结合Traces、Loggings、Metrics的定义和淘宝现有情况,做了一些解读:

全链路可观测性架构

上述可观测体系理念在后端有一些实践落地,但回归到移动领域的特性和现状,有种种问题如下:

因此,我们需要围绕以上这些问题对移动技术领域全链路进行定义,并建立起相关领域级的分析能力和好的评价标准,才能更深刻的洞察移动端的问题所在,才能在问题排查和性能度量领域持续服务好集团各App以及跨域的问题。

(图4 全链路可观测架构定义设想)

回顾全链路可观测项目的目标,我们设定为“打造全链路可观测体系,改善性能并驱动业务体验改善,提升问题定位效率”,后续章节会重点讲解每一层的实践。

移动端opentracing可观测架构

全链路构成

(图5 端到端情况、详情场景分层图)

端到端现有链路长,端侧存在各类研发框架和能力,虽然后端调用链路明确,但从全链路视角看,并没有与端侧打通。以用户浏览详情动线为例,一次首屏打开,会触发奥创、MTOP(无线网关)、DX三个模块不同的调用时序,不同的模块有各自的处理过程,不同阶段有不同的耗时和状态(成功、失败等);接着继续看滑动,可以看到模块的调用时序组合又不一样,因此不同场景下可以由若干要素随机组合,需要根据用户实际场景,划分若干维度来定义全链路:

全链路,就是把复杂的大调用分解为有限个结构化的小调用,并且**可以衍生出各种case:**

Falco-基于OpenTracing模型

全链路为了支持Logs + Metrics + Tracing 行业标准,引入分布式调用规范opentracing协议,在上述的客户端架构上进行二次建模(后续简称为Falco)。OpenTracing 规范是 Falco 的模型基础,以下不再列举,完整可参考OpenTracing设计规范,https://opentracing.io/docs/overview/。Falco定义了端侧领域的调用链追踪模型,主要表结构如下: (图6 Falco数据表模型)

Falco-关键要点

(图7 Falco关键实现)

  1. 端侧traceID:满足唯一性、生成快、可扩展、可读、长度短等原则生成。

  2. 调用&还原抽象:由traceID和span多级序列号一路透传,明确上下游关系。

  3. 端到端串联:核心解决云端串联的问题,端侧ID透传到服务端,服务端存放和鹰眼ID的映射关系;接入层返回鹰眼ID,端侧全链路模型存在鹰眼ID,通过这样的双向映射关系,我们能知道一个未返回的请求究竟是因为在网络阶段没有成功、还是没有到达接入层、或者是业务服务没有返回,从而将耳熟能详、粗粒度的网络问题变得可定义和可解释

  4. 分层度量:核心目的是让同层的不同模块具备一致的对比口径,支撑框架升级后的性能横向对比,思路为抽象客户端领域模型,如以框架类为例子,虽然框架不同,但一些关键调用和解析是一致的,因此可以抽象成为标准阶段,其它类似。

  5. 结构化埋点:首先采用列式存储,利于大数据集的数据聚合操作和数据压缩,减少数据量;其次,业务+场景+阶段沉淀到一张表中,方便关联查询。

  6. 基于Falco的领域问题沉淀:包括复杂问题的关键定义、追踪问题的线索型日志、某些特殊诉求的埋点。所有领域问题的信息被结构化沉淀到Falco,领域技术开发者也可以基于沉淀的领域信息持续开展分析能力的建设,只有实现数据的有效性供给和领域性解释合一,才能定义和解决更深层次的问题。

(图8 Falco领域问题模型)

基于Falco的运维实践

运维的范畴极为广泛,围绕问题发现、问题接手、定位分析、问题修复关键流程,从海量设备的指标观测、告警,到单机排查、日志分析等,大家都知道要这么做,里面每个流程都涉及很多能力的建设,但实际执行起来很难做,各方也不认可,淘宝客户端一直以来存在指标准确性和日志拉取效率低下的问题。如APM性能指标为例,淘宝App过去很多指标不准,业务同学不认可,不能指导实际优化。本章节会从重点分享下淘宝App在指标准确性和日志拉取效率方面的相关优化实践。

(图9 问题扭转用户动线以及运维系统)

宏观指标体系

以端性能横向战役为契机,基于用户体感的体验,APM开启了相关升级工作,核心涉及启动、外链以及各业务场景下的可视可交互指标,如何做到让指标对应的终点更贴近用户体感,主要有以下一些工作:

以启动为例,APM 在 校准后,包含了图片上屏等阶段后,数据虽然上涨了,但更符合业务方诉求

(图10 校准后启动数据趋势)

以外链为例,打通H5后,新口径也出现了上涨,但更符合体感

(图11 校准后外链前后口径数据对比)

基于此战役,已实现打通若干研发框架可视指标和校正工作。

单机排查体系

对于问题排查,目前核心还是基于TLOG,本次仅围绕用户问题排查动线中日志上报日志分析定位诊断关键环节遇到的问题(无日志、日志看不懂、定位难等),介绍运维排查体系为提升问题定位效率做的努力。 (图12 单机排查问题定位核心功能)

以上是今年在运维做的一些尝试,目的是希望可以通过技术升级,在排查领域用技术赋能代替流程赋能。 下面接着继续给大家展示下淘宝的实践和集团其它app接入的效果。

全链路运维实践

内部同事反馈在海外用淘宝App,出现卡、部分页面打不开等现象,经过上诉排查过程,提取到TLOG日志后。

(图13 全链路可视化功能)

(图14 全链路卡顿诊断功能)

冷启全链路

(图15 饿了么全链路视图-冷启全链路)

店铺全链路

(图16 饿了么全链路视图-店铺全链路)

基于Falco的优化实践

新指标体系

现在重点介绍下我们怎么围绕Falco可观测模型,从端到端全链路视角构建线上性能基线,用数据驱动淘宝App体验持续改善,首先就是数据指标体系的构建,主要有如下几点:

(图17 App性能指标体系)

定义了滑动相关的指标如下:

(图18 APM相关指标定义方案)

某个具体业务下,对于用户的一次交互行为,从发起响应到结束响应,从前端到服务端到客户端的完整调用链路,详情基于场景全链路下的详情首屏指标:

(图19 场景全链路-详情首屏定义)

还有其他等等... ...

可以看到,整个数据体系是多元化的,后续整个性能体验数据会有一个标准的输出,敬请期待。

新指标体系下的优化

FY22 平台技术围绕全链路视角,以体验为出口,深入业务开展摸排优化,围绕指标定义并拆解问题域,面向用户真实体感开展各大专项优化。我们自底向上一一介绍,通用的网络层策略优化,如何围绕请求周期,从连通性->传输层->超时策略提升;面向用户体感的有技术策略升级,如网关和图片的优化;面向业务场景的技术改造,会场框架的预处理预加载、安全保镖的轻量化实践,甚至是业务上的体验分级,如首页信息流低端机下不启用端智能,下面会重点介绍相关实践。

(图20 淘宝App全链路优化技术方案)

以MTOP请求作为一个场景,链路主要涉及「MTOP到网络库」的交互,通过对全链路线程模型现状分析,从MTOP发起到网络层接收到会几点会导致请求慢:、

以上几点问题,在大批量请求、系统资源竞争激烈场景下下(冷启动,几十个请求一拥而上),更为明显。 (图21 线程模型优化前后-极简调用)

改造方案,通过MTOP直接调用网络库接口来获得较大性能体验提升

数据效果:可以看到,在系统资源更为紧张环境下,如低端机上优化幅度更为明显。

(图22 极简调用AB优化幅度)

在WIFI信号差、弱网环境下,有时候多次重试对成功率提升效果并不明显。系统提供了一种能力,允许设备在WIFI环境下将请求切换蜂窝网卡的能力。网络应用层可以利用该技术,减少请求的超时等一类错误,提升请求的成功率。

在Android 21之后,系统提供了新的获取网络对象的方式,即使设备当前具有通过以太网的数据连接,应用程序也可以使用此方法来获取连接的蜂窝网络。所以,当用户设备同时存在WIFI和蜂窝网络的情况下,可以在特定策略下将不同请求同时调度到以太网和蜂窝网两个网卡通道上,实现网络加速。

核心改动点:

(图23 Android多通道网络能力优化+用户合规授权)

数据效果:在网络资源竞争剧烈的情况下,WiFi+蜂窝双通道网络场景下,长尾和超时率优化较为明显,AB数据,首页API, P99/P999分位性能分别提升23%/63%,错误率减少1.19‰,首页图片, P99/P999分位性能分别提升12%/58%,错误率减少0.41‰。

不同设备性能千差万别,业务的复杂度也越来越高,很多业务无法在低端设备上让用户体验到应有的效果,反而会带来卡顿等不良的体验。以往会通过“延迟、并发、预加载”等手段来优化性能,但只是规避了问题,核心链路仍然要要直面关键的调用耗时。所以,我们需要对业务做体验分级,基于对业务流程的分级处理,让高端设备体验最完美复杂的流程,低端设备也能顺滑的使用核心功能,理想是期望实现 用户体验 & 业务核心指标 的双高,退一步来说,让部分功能有损(不影响核心业务指标)的情况下,让性能体验更佳,初步的设想是希望分2步走来实现:

传统CDN适配规则会根据网络、view大小、系统等因素动态拼装获取「最佳」的图片尺寸来减少网络带宽、位图内存占用,提升设备图片加载体验,本次设备分级视角,并且会基于UED给出的规范,实现压缩参数可配置,扩展原有CDN适配规则,实现不同机型的图片分级策略,通过该能力,可以让图片的尺寸进一步缩小,加快图片上屏。 (图24 图片设备分级规则)

外链拉端链路从启动到海关请求再到落地页加载(主请求仍是MTOP),涉及多次安全加签,加签属于CPU密集型任务,低端机长尾明显,拉端耗时过长会导致流量跳失,FY22 S1 在巨浪业务上,拉端链路做了很多性能优化,优化性能可以带来跳失率的降低,目前性能大头海关请求,海关请求安全加签耗时占比高,因此希望跳过安全加签,业务可以根据情况使用,提升进端的流量价值,链路涉及到MTOP、Aserver(统一接入层)、安全多方改造: (图25 安全免签架构变化)

总结&展望

总结

本文主要阐述了面对移动端现有挑战,如何通过实现调用链路Tracing、标准Logging及场景化追踪完成可观测能力的建设,并基于全链路视角和新可观测能力,打造全链路运维体系和性能持续优化体系,补齐移动端长久缺失的调用链追踪能力、解决复杂调用场景下问题的快速定位、改变过去拉群人肉排查的低效过程,开始了流程赋能到技术赋能的转变,并围绕该能力构建全链路Metrics指标,打造全链路性能指标体系,深入业务场景展开治理,升级平台技术能力,用数据驱动业务体验改善和体验的长效追踪。

▐ 不足

虽然淘宝App陆续在接入各类场景,但离15分钟内定位出问题还有不小的差距,相关的卡点还较多,如日志上报成功率、服务端日志获取的有效性、问题定位效率的提升、接入源头的数据质量检验产品化&技术化、领域技术方对问题的认识和持续沉淀结构化信息,最后就是整个产品的用户体验,需要持续优化。

展望

延续阿里巴巴移动技术小组的移动原生技术理念,我们要做好技术做好体验,需深入移动域腹地,直面东西向多研发框架、南北向端到端全链路等领域挑战。18年体验优化一期,我们在请求领域就引入类似理念并开展尝试,直到如今寻求到合适的结构化理论基础,并通过立足移动端特性开展深入实践,持续做厚领域问题的定义和解决模型。希望打造出移动域可观测技术体系、形成架构沉淀。

参考资料

  1. 可观测性技术大会 https://ppt.infoq.cn/list/qconsh2021
  2. OpenTracing设计规范 https://opentracing.io/docs/overview/
  3. 万字破解云原生可观测性 https://xie.infoq.cn/article/598fd893709f01ae751dbd7b8?utm_medium=article
  4. Apache APISIX https://www.apiseven.com/zh/blog/why-we-need-Apache-APISIX
  5. Mesh: SideCar 是什么 https://cloud.tencent.com/developer/article/1706553
  6. gatner APM 分析报告 https://www.gartner.com/doc/reprints?id=1-25SQ95K7&ct=210414&st=sb
  7. New Relic APM https://blog.csdn.net/yiyihuazi/article/details/107974539
  8. dynatrace https://www.dynatrace.cn/platform/application-performance-management/
  9. OpenTelemetry 简析 https://zhuanlan.zhihu.com/p/361652744
  10. AppDynamics https://www.appdynamics.com/
  11. SkyWalking 分布式追踪系统 https://www.jianshu.com/p/2fd56627a3cf

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8