公司:携程
携程集团有限公司(英语:Trip.com Group Ltd),是一家总部设立在上海的中国大型旅游网站,1999年创办。2003年12月,该公司在美国纳斯达克(股票代码:TCOM)上市。目前携程已在中国大陆的北京、广州等17个城市设立分支机构,在南通设立服务联络中心,并在香港及台湾皆有旗下事业,占中国在线旅游市场份额一半以上,是中国最大的在线旅行社,也是全球最大的在线旅行社之一。携程旗下拥有携程网、去哪儿网、Skyscanner、Trip.com四个主要品牌,以及驴评网、鸿鹄逸游、永安、易游等多个支线品牌。
携程Dynamo风格存储的落地实践
Dynamo风格数据库来源于亚马逊的Dynamo: Amazon’s Highly Available Key-value Store 论文,在该论文中论述了一种无主复制的数据库,受此启发,携程酒店开发了多存储介质预定库Hare和高可用性高性能的动态信息存储服务InfoKeeper。本文将介绍Dynamo风格的无主复制数据库,及其在携程酒店的实践。
携程分布式图数据库Nebula Graph运维治理实践
随着互联网世界产生的数据越来越多,数据之间的联系越来越复杂层次越来越深,人们希望从这些纷乱复杂的数据中探索各种关联的需求也在与日递增。为了更有效地应对这类场景,图技术受到了越来越多的关注及运用。
在携程,很早就有一些业务尝试了图技术,并将其运用到生产中,以Neo4j和JanusGraph为主。2021年开始,我们对图数据库进行集中的运维治理,期望规范业务的使用,并适配携程已有的各种系统,更好地服务业务方。经过调研,我们选择分布式图数据库Nebula Graph作为管理的对象,主要基于以下几个因素考虑:
1)Nebula Graph开源版本即拥有横向扩展能力,为大规模部署提供了基本条件;
2)使用自研的原生存储层,相比JanusGraph这类构建在第三方存储系统上的图数据库,性能和资源使用效率上具有优势;
3)支持两种语言,尤其是兼容主流的图技术语言Cypher,有助于用户从其他使用Cypher语言的图数据库(例如Neo4j)中迁移;
4)拥有后发优势(2019起开源),社区活跃,且主流的互联网公司都有参与(腾讯,快手,美团,网易等);
5)使用技术主流,代码清晰,技术债较少,适合二次开发;
酒店测试环境 V3.0 设计和实践
去哪儿旅行非常重视测试环境治理,提高开发和测试人员的使用效率。从 2018 年就开始了测试环境治理和优化之路,到目前为止总共进行了三轮环境治理和优化。
携程海外MySQL数据复制实践
在携程国际化战略背景下,海外业务将成为新的发力点,为了保证用户高品质的服务体验,底层数据势必需要就近服务业务应用。一套标准且普适的数据复制解决方案能够提升业务决策效率,助力业务更快地触达目标用户。
DRC (Data Replicate Center) 作为携程内部数据库上云标准解决方案,支撑了包括但不限于即时通讯、用户账号、IBU在内的核心基础服务和国际业务顺利上云。
携程机票前台Trace系统的演进之路
随着微服务架构的普及,这些微服务构成了复杂的分布式网络,在支撑我们海量查询的同时,也带来了一些问题。
机票前台预订主流程服务现在有若干个系统,每个系统部署了多个服务,每个服务又依赖多个API,用户通过终端设备(手机、PC等)预订了机票产品,过程中出现“系统异常”该如何分析排查呢?
运营人员将问题抛给开发/测试人员定位,开发/测试人员只知道有异常,如何高效地从复杂的调用链条中找到原因,这对开发/测试人员会带来很大的挑战。
开发/测试人员借助单点日志逐个排查的效率是非常低的,特别是一些UI层的“待确认”的问题,只依赖一些日志报文进行排查效率是非常低下的。
如何提高开发/测试人员的排查效率,同时降低非开发人员的使用门槛?答案或许就是携程机票前台Trace系统。
JuiceFS 在携程海量冷数据场景下的实践
携程的冷数据规模在 10PB+,包括备份数据、图片语音训练数据和日志数据等,存储方案主要是本地磁盘和GlusterFS。在实际使用中这些方案遇到了不少痛点:
- GlusterFS 在单目录下文件众多时,ls命令速度很慢;
- 受疫情期间机器采购周期的制约,无法灵活地根据实际需求弹性扩缩容,存储成本控制困难;
- 磁盘损坏等故障带来的机器替换和扩缩容操作,使得运维成本居高不下。
随着云计算技术的发展,公有云厂商为混合云客户提供了海量冷数据的廉价存储方案,经过严谨的成本计算,我们发现使用公有云的对象存储可以显著降低存储和运维成本。为了减少迁移成本,我们一直在寻找后端存储能支持各类公有云对象存储、高性能的文件系统,直到JuiceFS 出现在我们的视野中。JuiceFS有以下优势:
- POSIX 接口,对应用无侵入
- 强一致性,文件修改立刻可见,为同一个 volume 被多台机器挂载的场景提供 了close-to-open 保证
- 支持了主流的公有云对象存储,支持开源软件作为元数据引擎(Redis、TiKV)等
- 支持云原生,能够将volume以 CSI 的方式挂载到Pod上
- 社区活跃,代码更新快
经过大半年的测试和使用,我们已经对接了数据库备份和 ElasticSearch 冷数据存储,将2PB+的数据迁移到了JuiceFS,预计后续还会有10PB+的数据接入。目前JuiceFS系统稳定,在降低运维成本和存储成本方面取得了良好的效果。本文将对JuiceFS原理以及我们在使用中所遇到的问题和采取的优化方案进行简单介绍。
携程活动搭建平台的前端“开放性”建设探索
乐高系统是携程市场研发部开发的活动搭建平台,主要满足运营所需的各种营销、广告、频道、定制等页面的快速灵活搭建。平台在自身发展的过程中不断改进。刚开始着力于满足运营配置需求,满足业务需求,不断扩充和丰富组件库,目前平台已配置了10000+ 有效页面,同时在线页面达到1000+,组件类型300+。当体量达到一定程度后,我们又在思考,平台能力的边界在哪里,如何推动平台创造更大的价值?
这个时候,建设平台不再局限于扩展组件等基础建设,会更多地考虑如何将平台建设为一种“开放性”的平台,将平台优秀,成熟,可扩展的“点“开放出去,使平台或者平台相关技术在其他团队或者场景中有更多的应用,产生更大的价值。这种开放性的思路,也积极促进了平台的进一步发展。
这篇文章将总结我们在平台建设中一些相关思考和实现细节。
AREX-携程无代码侵入的流量回放实践
对于一个初上线的简单服务,只需通过常规的自动化测试加上人工即可解决,但我们线上核心的业务系统往往比较复杂,通常也会频繁的需求迭代,如何保证被修改后的系统原有业务的正确性就比较重要。常规的自动化测试需要投入大量的人力资源,准备测试数据、脚本等,并且覆盖率通常也不高,难以满足要求。
为了保证一个线上系统的稳定性,开发和测试人员都面临不少的挑战:
- 开发完成后难以快速本地验证,发现初步的问题,容易陷入提测->发现bug->fix->提测的循环
- 准备测试数据、自动化脚本编写和维护需要大量的人力成本,而且难以保证覆盖率
- 写服务难于验证,而且测试会产生脏数据,例如我们的核心交易系统,可能会往数据库、消息队列、Redis等写入数据,这部分数据往往比较难以验证,测试产生的数据也难于清理
- 线上问题难以本地复现,排查困难
携程鸿蒙应用开发实践
作为全球领先的一站式旅游服务平台,携程始终坚持以技术创新为发展核心。自鸿蒙发布以来,我们便投入研发力量进行调研、开发,并成功落地了携程机票项目、服务卡片项目等。现将鸿蒙项目中相关经验整理分享,希望能给大家一些参考,也希望鸿蒙发展能越来越好。
携程Service Mesh性能优化实践
为了支撑业务的高速发展,从17年开始,携程内部逐步推进应用容器化改造与业务上云工作,同期携程技术架构经历了从集中式单体应用到分布式微服务化的演进过程。
随着Kubernetes的不断发展和推广,服务网格(Service Mesh)在近几年也变得很流行。而 Servive Mesh 之所以越来越受欢迎,在提供更丰富的服务治理、安全性、可观测性等核心能力外,其从架构设计层面解决了以上几个痛点,服务治理能力以 Sidecar 的模式下沉到数据面,解决了 SDK 升级及多语言的问题,对于像负载均衡、熔断、限流等策略配置,由控制面统一管理和配置,并下发到数据面生效。在整体架构上云技术方案选型上,权衡各类方案的功能完备性、架构扩展性、改造维护成本及社区发展等,最终选择基于Istio构建Service Mesh平台治理方案。
4小时上线一个接口,高效统一的携程酒店数据服务平台实践
- 随着携程酒店数据的膨胀以及个性化需求的增多,每个数据接口个性化的排期开发,因为没有标准化,从需求讨论,数据准备、接口封装、上线调试到接口api说明,期间需要花费大量的时间。一个接口的实现到生产上线至少需要2天甚至更多时间,这个时间成本不得不依赖排期开发;
- 随着历史接口的迭代,已对外提供的700多数据接口中,其中500多个还在使用,并且每年的增量在100多,开发和维护成本高,特别是在追溯上游离线数据逻辑的时候,过于依赖研发资源;
- 不同研发团队技术栈不一样,算法相关的研发更多偏向于python开发,对外输出的接口也是由python实现,但公司框架对java接口有更友好的支持,不同技术栈对外输出接口的稳定性存疑,特别是人员流动,团队职责变化后,同时也影响维护成本;
- 随着业务的发展,各个业务系统的数据需求越来越多,需求响应要求也越来越高;
- 通过历史接口的分析归类,80%以上的数据接口其实是针对离线数据或者实时数据加上需求方的检索条件返回数据,没有过多的加工逻辑或者过于复杂的业务逻辑在接口中实现;
为了能更快速支持业务个性化需求和降低研发成本,起到降本增效的效果,同时避免烟囱式数据接口开发,提高数据复用率,避免同样数据出现同样的多个接口,也避免不同的研发团队拿到同一份数据都在做自己场景的数据接口,减少数据孤岛情况。为此,我们设计了一套符合需求的数据服务平台。
携程酒店Flutter性能优化实践
携程酒店业务使用Flutter技术开发的时间快接近两年,这期间有列表页、详情页、相册页等页面使用了Flutter技术栈进行了跨平台整合,大大提高了研发效率。在开发过程中,也遇到了一些性能相关问题和用户反馈,比如长列表滚动卡顿、页面打开时间较长、页面打开后部分数据加载时间较长等问题。为解决这些问题,我们选用了多个性能指标监控业务运行状态,借助性能检测工具定位问题,并查阅源码、文档等资源解决问题,形成了这篇文章。
同时在不断的需求迭代和代码更新过程中,APP的性能稳定性持续受到挑战,为此我们建立了线上性能监控系统,通过量化,治理,监控三方面手段,持续改善APP性能和用户体验。目前页面的各种性能指标诸如FPS、TTI、内存等都达到了不错的效果,本文将介绍我们在优化过程中所遇到的问题和采取的主要优化方案。
携程基于 GraphQL 的前端 BFF 服务开发实践
赋予前端团队更大的灵活自主性,显著提升研发迭代效率。
Kubernetes HPA一定会减少资源使用吗?HPA可观测性实践分享!
Kubernetes HPA一定会减少资源使用吗?HPA可观测性实践分享。
携程实体链接技术的探索及实践
随着网络应用技术的飞速发展,多元化、低密度数据的急剧膨胀对人们获取正确信息带来巨大挑战,大量冗余信息出现的根源在于自然语言表达的多样性,即一词多义和多词同义。例如,“苹果”在不同语境下既可以表示蔷薇科苹果属植物又可以表示苹果产品公司,“申城”和“魔都”尽管字面完全不同,却都是上海市的别称。实现对海量Web数据的高效处理,理解用户意图,降低信息过载,是实体链接的目标。
在旅游领域,用户关注的实体通常是旅游目的地周边景点、酒店和玩乐方式等,这些对象在地理信息系统(Geographic Information Systems, GIS)中统称为兴趣点(Point of Interest,POI),主要包含四个核心维度:名称、地址、坐标和类别。随着互联网电子地图服务与基于位置的服务(Location Based Services,LBS)的普及,POI无论从概念范畴还是信息纵深上都有了长足发展,已成长为信息空间的参天大树,可以说目前如日中天的互联网各个风口都和POI有一定关系,如电商、O2O、社交、本地生活、互联网金融、共享经济等。
构建以POI知识库为基础的实体链接服务,提升旅游搜索、智能问答、知识挖掘和信息抽取等工作的效果,对改善用户体验有重要意义。
携程机票 App KMM 跨端 KV 存储库 MMKV-Kotlin
它拥有极为便捷的集成方式,与 MMKV 高度相似的 API 。