今天给各位分享携程机票前台Trace系统的演进之路-携程机票cto的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
作者|Devin,携程资深后端开发工程师,专注 Java相关领域以及自动化相关的研究;Hank,携程资深后端开发工程师,专注 java以及.net技术领域的研究
一、前言
随着微服务架构的普及,这些微服务构成了复杂的分布式网络,在支撑我们海量查询的同时,也带来了一些问题。
机票前台预订主流程服务现在有若干个系统,每个系统部署了多个服务,每个服务又依赖多个API,用户通过终端设备(手机、PC等)预订了机票产品,过程中出现“系统异常”该如何分析排查呢?
运营人员将问题抛给开发/测试人员定位,开发/测试人员只知道有异常,如何高效地从复杂的调用链条中找到原因,这对开发/测试人员会带来很大的挑战。
开发/测试人员借助单点日志逐个排查的效率是非常低的,特别是一些UI层的“待确认”的问题,只依赖一些日志报文进行排查效率是非常低下的。
如何提高开发/测试人员的排查效率,同时降低非开发人员的使用门槛?答案或许就是携程机票前台Trace系统。
二、Trace系统的发展历程
2.1 基于原始日志的Dev&Ops
机票前台的日志记录还是比较完善的,我们将系统中的服务以及上下游依赖的服务都进行了日志写入。依据业务属性制作了一些Kibana面板,结合一些解压缩工具是可以满足日常需求的。
在微服务架构中,随着业务的不断增加,复杂度同样也会越来高,对开发/测试以及运维人员的效率带来了很大的挑战,主要问题体现在:
- 不同的微服务,多个日志Topic,多个查询面板
- 需要人为手动聚合/串联不同的微服务的日志,还原用户行为
- 不同团队的服务,日志压缩方式存在差异,解压方式不同
- 面向开发的服务名称,可读性低
- 公司内部系统间未打通,互相之间操作需要手工方式处理
2.2 基础建设
经过长时间的实践和探索,机票前台的日志体系和自动化设施都较为完备。
日志体系在机票前台主要有以下三类日志,这三类日志可以满足日常开发运维的基本需求,实现对整个流程的精准把控。
- UBT日志,主要记录用户的一些行为日志,便于解决用户反馈的问题
- Mertics日志,主要记录一些业务指标,作为内部后续业务需求演进的依据
- Trace日志,记录服务处理过程中所产生的信息日志,如接口报文,错误信息等。
自动化设施,大幅度降低日常运维开发的成本。
- Mock平台:通过Mock平台可以实现数据源(接口、DB等)定制化,从而控制和分析程序的逻辑走向。
- 接口自动化平台:结合Mock平台实现服务接口的自动化测试
2.3 基于Chrome插件版本的Trace 工具
机票前台通过日志和自动化建设来保证日常开发运维的基本流程,通过Chrome插件来解决一些重复工作。比如:
- 解压缩日志报文
- 格式化解压后的报文
插件模式解决了一些重复工作,对效率有一定的提升。
2.4 遇到的问题
随着业务的不断膨胀,微服务越来越多。作为BFF层(Backends For Frontends 服务于前端的后端)我们需要聚合多个接口方提供的微服务,使得BFF层的调用关系也会越来越复杂。
现有的“插件模式”已经很难满足日常工作。
“插件模式Trace系统”遇到了如下一些问题:
- 如何通过日志清晰的展示调用关系
- 如何查询“过期日志”(ES有效期以外)
- 微服务越来越多,如何快速通过搜索条件检索目标微服务
- 如何高保真的还原用户预订时所见
- 如何与其他系统打通(例如Mock系统、用户行为系统等)
- 提高偏技术的“晦涩难懂”信息的可读性
三、系统设计
针对上述的问题,Trace系统进行了一些针对性的优化和演进。目前Trace系统大致架构如图所示。
- 业务层:根据业务使用方分为前台主流程、机酒业务、增值业务、IBU等
- Web层:主要有四个部分,搜索条件、数据展示、页面回放、一键Mock
- 搜索引擎层:根据Web传达到服务的请求(搜索条件),构建Clickhouse的搜索SQL,从Clickhouse获取数据
- 数据处理层:根据业务线将CK数据进行加工组装、处理一键Mock请求,并将数据传送至Web进行反馈
- 配置信息:配置信息主要是针对引擎层做Clickhouse搜索配置以及业务层做业务字段配置
- 日志记录:隶属于各个业务方的具体应用
四、系统的功能介绍
4.1 友好的搜索条件
针对Kibana的搜索条件进行了降噪和业务封装,采用了更适合用户行为习惯的友好搜索条件,见下图标志1。
4.2 日志查看功能
报文日志一般记录在ES/Clickhouse中,并最终在Kibana中呈现。在Kibana中可以通过组合过滤条件来获取我们需要的日志,并且也可以实现聚合服务整个链路日志的目的,但是Kibana存有一些用户行为习惯上的问题。
- Kibana暴露原始的查询条件,所以数据较多,对于业务人员来说有冗余条件。
- Kibana聚合日志的方式需要人工组合,并且日志类别一致,链路层次感不够清晰。
结合这两点,Trace系统对搜索条件进行了降噪,并且对链路日志采用分层处理,给予用户友好的使用体验。对日志报文支持自动解压缩以及格式化。
4.3 聚合多平台
上面提到的日志体系,三类日志存放在不同的数据源,通过不同平台进行展示。这也就导致日常过程中需要游走于多平台进行数据采集和分析。
比如在分析服务日志的同时需要查询用户的UI访问日志,需要在两个平台间跳转,并且平台的搜索数据无法同步。为了解决该问题,Trace系统采用了外链的形式进行聚合并关联单次查询的搜索数据,如时间和用户标志等,进行多平台之间的传递,从而达到数据串联的效果。
之所以采用外链方式而非在系统内部集成多平台内容,主要的考虑在于该系统的定位是做链路的追踪处理。如果耦合了过多的数据,系统就会变的复杂,会给系统用户造成过多的干扰。
4.4 多业务场景聚合,过期日志补偿
系统在一次搜索中聚合多个业务线,如主流程预订,低价订阅,增值产品等,无需用户手动区分搜索渠道。并且对于Clickhouse过期(ClickHouse日志只存储半个月时间)数据采用Hive查询进行数据补偿。解决用户在ClieckHouse和Hive中切换。
4.5 基于CRN_Web技术的页面回放功能
日志体系和自动化设施的结合除了两者处于割裂状态之外,还有一个问题在于双方都是隶属于技术驱动,而对于非开发人员来说,具有较高的使用壁垒。比如在运维人员复现用户反馈问题的时候,需要开发人员介入,进行日志数据准备,环境Mock准备,而后才可以复现用户反馈的问题。而往往用户反馈的问题中,大多数是UI展示层面的问题,如果按照上述流程,则排障的成本较大。
因而Trace系统在链路追踪和自动Mock的基础上提供了用户页面回放的功能。系统会收集用户访问页面关联的所有服务请求的日志,将日志报文进行Mock,再通过CRNWeb技术,真实发起一次页面访问,此时服务会返回相应的Mock报文,从而达到页面回放的效果,让运维人员更加直观的了解用户所反馈的问题。
通过BatcheId关联一次页面访问中的同批次服务,系统进行自动拉取报文并进行Mock,然后将Mock结果关联当前用户标志,通过CRNWeb实现页面回放,高保真还原所见界面。
4.6 一键Mock功能
日常工作中,日志体系和自动化设施处于割裂状态,主要体现在日志和Mock系统的结合使用。
在之前的使用流程中,我们需要在Kibana中搜索到链路日志,然后将接口调用的报文,在Mock系统中进行配置,这样的操作是比较费时费力的。有些服务调用的接口数量高达二三十个,这样的数据人工配置的话需要浪费非常长的时间。
针对这个问题,Trace系统在链路聚合的基础上提供了一键Mock的功能,将此次服务所涉及的链路调用全部自动配置到接口中,过程无需人工干涉,将之前需要十分钟的工作降低至五秒内,极大地提高了工作效率。
4.7 关键信息外露
针对一些服务的错误场景,将错误码转换为实际错误文案,友好提示系统用户。
4.8 联通报表系统
报表系统是前台用于日常业务的监控系统,它能实时监控异常的业务场景和业务处理结果。Trace系统联通报表系统,在报表系统中可以通过外链跳转至Trace系统,并传递异常场景的相关参数,如用户标志,场景限定等,从而获取异常场景的上下文(日志),见4.7示图。
4.9 外链其他平台
采用了外链的形式进行多平台功能聚合,并关联单次查询的搜索数据,如时间、用户标志等,进行多平台之间的传递,从而达到数据串联的效果。
五、总结
Trace系统是针对日常开发运维过程中所浮现的一些问题,所研发的效能工具系统,它以降低开发运维成本,提高日常产能为目标,提供了诸多便捷性功能。系统在上线投入使用后,效果显著,取得了较大的产出和成果。
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7593.html
用户评论
感觉行程预订越来越方便了,之前总需要跑好多地方查询信息。
有15位网友表示赞同!
trace系统升级后真的比以前好用太多了,速度快不说,还能自动提醒航班变化什么的!
有7位网友表示赞同!
每次看到携程机票系统那些数据和图表,都觉得科技发展真快啊!
有9位网友表示赞同!
想问问C端用户像我们这样能体验到trace系统的升级效果吗?
有17位网友表示赞同!
携程CTO的研究成果总是让我们眼前一亮!
有20位网友表示赞同!
学习他们的技术思路,做软件开发的人很有收获!
有11位网友表示赞同!
期待未来trace系统能更加智能化,帮助用户更精细地规划行程。
有11位网友表示赞同!
对于旅行爱好者来说,一个高效的机票预订系统真是太重要了!
有16位网友表示赞同!
这个trace系统的演进之路真的令人感叹,一步步迭代提升的用户体验!
有15位网友表示赞同!
携程一直走在行业前列,这是靠的技术实力啊!
有5位网友表示赞同!
作为国内大型旅行平台,携程的Trace系统研发无疑是一项重大意义的工程。
有11位网友表示赞同!
这个信息真挺有料的,让我对未来的出行场景有了更直观的感受。
有14位网友表示赞同!
感觉现在越来越多人依赖科技辅助行程安排,trace系统就是其中重要的组成部分!
有9位网友表示赞同!
分享这种专业知识真的很好,能让普通人了解到背后的技术细节。
有19位网友表示赞同!
携程机票业务做得真好,也证明了公司在科技研发上的投入是有效果的。
有5位网友表示赞同!
越来越期待旅行变得更加便捷智能化,trace系统正在为之贡献力量!
有14位网友表示赞同!
希望更多的企业能像携程一样重视技术创新,带给用户更好的服务体验。
有5位网友表示赞同!
每次看到这种技术文章,都会对科技的发展充满期待和信心!
有5位网友表示赞同!
学习一下携程的经验,也许也能为自己的工作带来一些启发。
有19位网友表示赞同!