干货 | 携程酒店搜索引擎AWS上云实践

医疗AI新思路:为什么Graph Neural Network能改善气道分割的漏检问题? 本文探讨了Graph Neural Network(GNN)在医疗AI领域改善气道分割漏检问题的创新应用。通过分析3D UNet等传统方法的局限性,揭示了GNN在图结构建模中的独特优势,特别是在捕捉细小末梢支气管方面的突破性表现。文章详细介绍了UNet-GNN混合架构的设计原理、实验性能对比及优化方向,为CT影像分析提供了新思路。 阅读详情

作者简介

 

宮娴,携程高级后端开发工程师;Spike,携程高级后端开发专家。

随着携程国际化业务的快速推进,搜索引擎作为用户体验中至关重要的一环,上云变得志在必行。本文主要分享酒店搜索引擎迁移AWS的探索与实践过程,内容将涵盖一个HTTP请求的全链路处理过程:包括从APP发出请求到网关,再到内网错综复杂的微服务,最后到所依赖的各种持久化存储。

一、微服务架构带来的挑战

这次上云的是爆款业务,用户直观的感受是点击TRIP APP的Hotel搜索页的Hotel Staycation Deals。

d8c60a2773ef895cd08ebffd778fd2b5.png

携程采用主流的微服务架构,看似简单的一个搜索功能,通过BAT调用链的监控,实则底下牵涉到上百个应用。BAT是携程对开源CAT的改进版,下图是爆款应用在BAT中的整个调用链:(如果想通过CAT整理出这个关系,是非常耗时的。因为CAT的UI只能显示一个应用依赖的下游一级应用,需要用户逐个手工遍历)

b9a12339e40264360089307290698220.png

原封不动地把所有依赖应用都迁移至云,无论从开发成本,还是从硬件成本考量,都不太合理。侧面也反映出微服务架构在迁移时,不得不面对的挑战。虽然入口应用依赖了上百个下游应用,但是通常一个应用会包含多个API,而爆款业务经过调研,实际只使用了一个API。所以是否可以只部署一个API来落地迁移呢?

感谢BAT能够支持API维度的依赖查询(CAT只支持应用维度)。调研后,爆款API实际依赖的应用数为仅为八个,曙光咋现。

757f2d3cac495fcaabb62945a35c7926.png

下一步便是部署。记得几年前在使用AWS时,使用命令行发布。当时有些顾虑权限问题,一条命令打错,可能拉挂一个集群。同时每个云厂商都会有一套自己的发布系统,学习成本也不可忽略。值得庆幸是携程自己开源的发布系统TARS已经与AWS、阿里等云发布打通,现在对于我们而言,无论是部署什么云,都使用统一的一套UI界面。

成功部署9个应用之后,我们遇到了新问题:

1)目前携程GATEWAY只能按照服务的维度转发流量,而无法基于API转发。换言之,当流量从AWS的IDCA进入GATEWAY时,无法支持只转发爆款API到IDC A,其余API转发到IDC B。

5b6168be54923f510e025ecbdd5c1807.png

2)应用本身点火时会依赖十多个Redis、MySQL以及其他服务,但是AWS IDC之间的存储由于安全问题,是无法直接相互访问的,最终导致应用启动失败。当然我们也可以请各个框架组件排期支持点火动态配置,根据当前IDC的配置,判断哪些组件需要点火。但是这无疑会让框架和应用本身都变得很笨重,合理性值得探讨。反之如果把这些存储依赖在每个IDC都重复部署一次,势必会导致硬件和开发成本的浪费。

542951910c13269741192d3838a5aaba.png

介于以上两个问题,原先维护一个代码仓库,同时发布多个IDC的架构变得不可行。那提取爆款API到一个单独的应用是否可行?试想一下,提取后,业务核心业务代码将会分布在多个应用、多个仓库。是否可以每个IDC都独立一套代码?但这会导致日后的日常开发维护重复且易错。

所以我们尝试把核心业务逻辑提取到一个单独的JAR,为各个IDC单独创建一个代码仓库。新建的应用只是一个web service的壳,内部访问业务的JAR。如此一来,代码不再重复,应用的责任也得到了抽象与分离。

但这又给开发带来一个问题:每次开发新功能,先要在业务jar的仓库完成编写,然后再通过web service应用引用最新的jar进行调试。每改一次代码,都要重新生成一个jar,上传到中央maven仓库,然后再升级POM引用版本下载到本地,这样开发效率势必低效。不过值得庆幸的是,携程现有的单元测试率都强制80%以上,所以这会反向推动开发编写出质量更高的单元测试,同时降低和webservice进行集成测试时的开发成本。方案不完美,但也算是一个权衡。

e276480165d7b2903a3d8fb9d7175a5f.png

二、云上数据的持久化

新应用抽取后,虽然避开了点火中无关Redis和MySQL的依赖,但并没有避开爆款API本身依赖的2个Redis和1个MySQL。一种方案是直接通过在IDC之间架设专线,通常Redis响应都是几毫秒,而网络延迟都具有不稳定的特点,极端可能要几百毫秒,所以专线的网络延迟对实时业务来说是不可接受的。退一步,即使部分业务能够接受网络延迟,整个携程业务都以这种方法进行数据访问,这条专线未来会变成一个瓶颈。

c5c0defeb62defb514cc8cf0d7ac3da1.png

所以我们尝试把爆款依赖的Redis和MySQL部署到多个AWS IDC。部署过程中,我们用携程自研的持久化KV存储Trocks替代了Redis,达到降低了硬件成本的目标。

b07aeef1de827bd34466b0aa4a95bc40.png

应用虽然点火成功了,接下来就是数据同步的问题:是否需要同步?如何同步?单向复制?双向复制?延迟容忍度如何?

爆款依赖2个Redis。1个Redis负责基于http请求的cache,所以不需要同步,框架代码也无需做改变,默认访问IDC本地机房Redis。换言之,IDC A的应用读写IDCA的Redis实例,IDC B的应用读写IDC B的Redis实例。

另外1个Redis和MySQL供搜索引擎使用。业务特点只读不写,实时同步大量从其他数据源的数据,所以只需单向同步,并且对延迟性要求低。存储的最终架构如下:

898d0a4d3d3f631fde89040bad1be538.png

Redis的单向复制分发使用的是携程自研开源的XPipe。

69219288816ecff3d02da4905de10e31.png

MySQL的单向复制分发技术使用的是携程自研的DRC。我们这个项目只用到了它的单向复制能力,其实它也支持双向复制。

72869c3f572103f37828d72ab4b7119a.png

全部部署完成后,应用能够正常启动与工作了。复制分发的延迟一般都在几百毫秒,极端会到秒级,符合预期。

三、云上文件的存储与共享

在爆款API的核心搜索引擎中,用到了读写本地文件的技术。应用会在IDC内网传输共享这些文件,而这些文件有些很大,可达10个G。那不同的机房如何共享呢?一种方案是把这些应用在各个AWS IDC都部署一次,但是迁移上去后,背后依赖的数据库是否需要部署,甚至是数据库后面庞大的Hadoop集群也一并重复部署一次?

基于KISS原则,我们首先尝试让AWS IDC A的服务通过专线直接访问IDC B的文件。但是由于网络不知名的原因,文件可以传输,却始终无法成功。但是即使成功,仍然带来很多隐患,例如:如此大的文件会瞬间把专线带宽长期占满,而真正有实时需求的通讯会卡顿受阻。最后我们尝试通过AWS S3的服务在不同IDC之间共享文件,结果成功了,性能也满足业务要求。

93ef461c080e788db5e49c336ba6929d.png

从方案的选择上来看,AWS S3的使用场景是值得商讨的。用云上产品一般都会有一个顾虑,就是太过依赖某种云的一个具体产品,当后期如果要换成其他云时,会有大量的迁移成本。例如AWS的S3 API就是定制化的:

194a2ebfbe2d4eecdde2dbd0d34fbbbd.png

甚至像携程会同时使用多种云时,那就意味着会有多套代码的维护成本。我们现在的解决方案就是公司内部统一出一个JAR,兼容各种云文件存储的API,使用时只要配置相关云的安全密文即可。

四、总结

受益于前期携程技术平台部门为上云做的大量基础设施研发,降低了业务部门上云的门槛。爆款业务的上云只是冰山一角,随着越来越多业务的出海,会有更多的挑战等待着我们。希望这篇文章能够为有迁移云计划的团队开拓思路。

有了这次上云经历之后,现在每次在设计新架构的时候,我们都会不假思索问自己几个问题:这个架构设计未来有上云的需求么?是否方便上云?是否方便跨云部署?

【推荐阅读】

1eeb039a72e95e308d19f40e5c4c82a8.png

 “携程技术”公众号

  分享,交流,成长

eLabRadio软件无线电虚实结合仿真开发平台简介 在使用仿真平台时,不要关闭设备或断开设备与PC机之间的网络连接,否则,仿真平台将无法正常工作。注:采用eNodeX设备认证方式,当出现“设备不存在”的报错时,请检查计算机IP是否和硬件设备IP处于同一网段,或者是否是先连接好网线,再开启硬件设备的。①此登录方式下,需要先建立软件与硬件的通信:在登录窗口点击【网络配置】,参照下图输入设备IP,服务器地址无需设置,设置完成后点击确认,此时登录界面无需设置账号密码;,拷贝到电脑上,使用管理员权限运行setup.exe,下一步直到安装完成,桌面会生成快捷方式。 阅读详情

相关推荐

hfss仿真软件入门教程

hfss仿真软件入门教程 1.模型建立 1.1在project种选择insert hfss design 1.2.在hfss-》solution type 中选择modal 1.3.在moderler-》中选择units 设置单温为mm 1.4进行画图操作,这里为提高效率直接导入一个已经画好的cad图。使用modeler-》import 2.设置端口 2.1在更改模型中的材料 选择需要更改材料...

xunshui2007的博客 3万+

查询耗时降低2/3,携程度假搜索引擎架构优化 v2020

作者简介少伟,负责度假起价、搜索的研发工作,资深技术控。锦涛,负责度假搜索及相关子系统的建设,对搜索引擎、NLP等有浓厚兴趣。携程度假搜索引擎(以下简称为引擎):携程度假搜索引擎是一个专注在旅游行业的垂直搜索引擎,用来查找符合从出发地到目的地的相关旅游产品(跟团、自由行、邮轮、游学、主题游等),是一个典型的O2O搜索引擎(Online To Offline)。本文将分享度假搜索引擎的优化过程及相关思路,希望可以给公司同类项目以及行业同类需求提供一些启发和借鉴。主要业务范围:团队游、自由行、游学、主题游、玩乐

Java搜索工程技术栈 492

INCA软件操作指南:手把手教你生成和解析DCM标定数据文件

本文详细介绍了INCA软件在汽车ECU开发中生成和解析DCM标定数据文件的全流程。从A2L文件导入到DCM文件生成,再到HEX文件导出,手把手教你掌握标定数据处理的实用技巧,包括参数标定、曲线标定和常见问题排查,帮助工程师提升工作效率。

weixin_29271053的博客 1052

干货 | 当你在携程搜索时,背后的推荐系统是如何工作的

作者简介葛荣亮,携程搜索部门高级研发工程师。2015年加入携程,目前主要负责搜索平台的前端+数据挖据工作。一、前言随着旅游业的发展,人们对搜索的要求越来越高。智能化大趋势...

携程技术中心 2717

光模块的封装工艺有哪些?

COB封装传统的单路10Gb/s或25Gb/s速率的光模块采用SFP封装将电芯片和TO封装的光收发组件焊接到PCB板上组成光模块。但对于40G及以上速率的高速光模块,受激光器速率限制(多为25G),主要通过多通道并行实现,如40G由4×10G实现,而100G则由4×25G实现。蝶形封装:壳体通常为长方体,结构及实现功能通常比较复杂,可以内置制冷器、热沉、陶瓷基块、芯片、热敏电阻、背光监控,并且可以支持所有以上部件的键合引线。BOX封装属于蝶形封装的一种,用于多通道并行封装。

WaytoICT- Explore ICT Technology, Build Your Tech Path 3806

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 486

干货 | 查询耗时降低2/3,携程度假搜索引擎架构优化

作者简介少伟,负责度假起价、搜索的研发工作,资深技术控。锦涛,负责度假搜索及相关子系统的建设,对搜索引擎、NLP等有浓厚兴趣。背景介绍携程度假搜索引擎(以下简称为引擎):携程度假搜索引...

携程技术 6541

博途PLC S7-1200/1500 ModbusTcp通信SCL代码篇(轮询)

博途PLC MODBUS TCP的详细讲解和注意事项,可以参看下面这篇博文,这里不在赘述。这篇作为SCL代码篇主要给出SCL语言下的轮训写法和注意事项。博途PLC1200/1500PLC ModbusTcp通信(轮询处理)_RXXW_Dor的博客-优快云博客。............

RXXW_Dor的博客 8419

用户案例|向量引擎在携程酒店搜索中的应用场景和探索

然而,这种方法存在一定的局限性。针对于 Milvus 数据库的部署模块,集群部署方式需要部署以下 8 个组件,分别是访问代理层(proxy)、协调节点(Root coordinator,Query coordinator ,Data coordinator,Index coordinator)和执行节点(Query node,Data node,Index node)。常规的解决方案是添加同义词"好莱坞"和"荷里活"之间的关联,例如将"荷里活"作为"好莱坞"的别名,并在商区实体维护中进行相应的标注。

ZILLIZ 1479

真正的工业级环形缓冲区(Circular Buffer)完整实现细节

永远不要永远不要ToArray()或AddRange()永远返回或两段Span永远用_head_tail% Capacity实现环形照着上面这套代码改,你的系统将彻底告别内存爆炸,从“实验室玩具”变成“产线战神”!需要我给你一个支持两段绘制的完整实现吗?

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 127

如何在 Windows 中实时打开字幕

在 Windows 操作系统中,你可以使用编程来实现实时字幕功能,以便在屏幕上显示即时的文字内容。下面是一个示例代码,展示了如何使用Python编程语言在Windows上实现实时字幕功能。这样,字幕窗口将会不断地显示系统当前时间作为字幕。你可以根据自己的需求修改主循环中的内容,以显示你想要的实时字幕。希望以上代码和说明能够帮助你在Windows中实现实时字幕功能。函数创建了一个顶级窗口,并设置窗口的样式、位置和大小。方法,用于在字幕窗口中显示指定的字幕内容。上述代码中,我们使用了Python的。

DevWizard的博客 3268

通过携程API接口使用关键词搜索酒店列表

在开发旅游或酒店预订相关的应用程序时,集成第三方平台的酒店数据是常见需求。携程作为国内领先的在线旅游服务平台,提供了丰富的API接口供开发者使用。本文将聚焦于如何使用携程提供的API接口,通过关键词(如酒店名、地址、地标等)来获取酒店列表数据。通过携程的酒店搜索API,开发者可以便捷地在其应用中集成强大的酒店搜索功能。遵循官方文档、妥善处理认证和错误是成功集成的关键。) 等关键参数的请求,并按照要求进行签名认证。数组来获取酒店列表信息,并根据。) 等用于进一步筛选结果的参数。请求通常需要包含签名 (

2408_87637081的博客 1315

优秀的 Verilog/FPGA开源项目介绍(二十六)- ISP (图像信号处理)

介绍查看《ISP算法及架构分析介绍》今天项目的顺序就是先介绍几个关于ISP算法架构的项目,包括python、matlab、c等高级语言实现的ISP算法架构,最后介绍一个FPGA实现ISP的项目。openISPhttps://github.com/cruxopen/openISP项目介绍用python实现的ISP架构,该架构涉及到的知识如下:下图是最新实现的模块:主要模块如...

OpenFPGA的博客 4944

数学建模在库存管理中的应用:从EOQ到实战优化

库存管理是供应链与运营优化的核心环节,其本质是在服务水平与成本间寻求动态平衡。传统依赖经验的模式难以应对复杂多变的市场需求,而数学建模通过量化分析为决策提供科学依据。从经典的经济订货批量模型出发,该模型在稳定需求下优化订货成本与持有成本;进而引入报童模型处理需求不确定性下的单周期决策,其关键在权衡缺货与超储成本;安全库存模型则针对持续补货场景,通过设置缓冲库存应对供需波动。这些模型共同构成了库存控制的理论基础,其技术价值在于将模糊的管理直觉转化为可计算、可优化的算法,显著提升资金周转率与客户满意度。在零售、

cuankuangzhong6373的博客 849

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

干货 | 携程异地多活-MySQL实时双向(多向)复制实践

作者简介Roy,携程软件技术专家,负责MySQL双向同步DRC和数据库访问中间件DAL的开发演进,对分布式系统高可用设计、数据一致性领域感兴趣。一、前言携程内部MySQL部署采用多机房...

携程技术 1764

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

探索携程DRC:高效、智能的分布式拒绝服务防护系统

探索携程DRC:高效、智能的分布式拒绝服务防护系统 去发现同类优质开源项目:https://gitcode.com/ 项目简介 是携程公司开源的一款强大且灵活的分布式拒绝服务(DDoS)防护系统。该项目旨在帮助各类在线业务抵御大规模的DDoS攻击,保护网络基础设施的正常运行,为用户提供稳定的服务。 技术解析 DRC的核心特点是其分布式架构和智能化的流量检测与清洗能力。它由以下几个关键组件构成: ...

gitblog_00048的博客 410

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

干货 | 响应速度与智能化如何平衡,携程酒店搜索实践

作者简介mczhao,携程资深软件工程师,关注自然语言处理、搜索引擎和数据库内核开发。概览随着线上旅游业务的不断发展,携程酒店的数据量不断增加,用户对于搜索功能的要求也在不断提高。携程...

携程技术 1129

干货 | 携程混合云之kubernetes@AWS揭秘

作者简介陈丹双,携程高级工程师,毕业于复旦大学,积累多家公有云对接经验,持续探索混合云,关注kubernetes、docker等容器技术。一、引言随着携程国际化战略的实...

携程技术中心 682

干货 | 容器成本降低50%,携程在AWS Spot上的实践

作者简介单双,携程Cloud Container&Service团队公有云专家,主要从事携程混合云建设,同时服务于携程集团内业务的上云工作。一、背景AWS Spot实例,即竞价实...

携程技术 1771

千亿级携程酒店AWS实践

作者简介微末,携程软件技术专家,关注系统架构,致力于高可用高性能的支撑业务系统开发。一、背景随着携程海外酒店业务的发展,遍布全球的海外供应商与携程总部IDC之间的数据传输量快速增长。技术...

架构师小秘圈 710

互联网+酒店系统架构的设计与实现

互联网+酒店系统的设计与实现是一个复杂而关键的任务,涉及到多个方面的技术和业务需求。本文将介绍互联网+酒店系统的架构设计思路和实现过程,以帮助读者更好地理解和应用这一领域的技术。- 数据库设计:选择合适的数据库类型和模型,建立酒店信息、用户信息、订单信息等数据库表,保证数据的安全性和一致性。- 使用微服务架构:将系统拆分为多个小的服务单元,实现高内聚、低耦合的服务,便于维护和扩展。随着互联网技术的不断发展,相信互联网+酒店系统将会在未来的酒店行业中扮演越来越重要的角色。1. 前端设计与开发。

qq_33665793的博客 1821

【架构设计】酒店预订应用的系统设计架构(如 Airbnb、OYO)

Airbnb、Booking.com 和 OYO 等酒店预订应用程序如何提供从酒店列表到预订再到付款的流畅流程?而且都没有一个小故障!在此博客中,您将获得对此的详细解释。由于它们非常庞大,以至于它们需要处理大量的用户流量。所以要管理这些,我们必须遵循微服务架构。这意味着我们必须为每种类型的任务将系统分成小块。让我们一一了解流程。我把它分成了4个部分:酒店管理服务客户服务(搜索+预订)查看预订服务酒...

全网:架构师研究会 717

酒旅项目总结

酒旅项目

芥纳须弥 523

AWS的上云步骤经验

3.策略就是权限控制,比如控制该证书的TLS连接有connect、public,sub等等的权限,而且还有订阅主题过滤的设置。最重要的一定要加recevice权限在订阅主题,不然下发没数据。注意connect权限的clent:xxx一定要是MQTT ID。1.TLS连接需要签名以及密钥以及根证书。2.证书依赖于创建的thing以及策略。4.都跑通了就可以进行一下步学习了!

有水有鱼,污水有妖怪 573

AWS(EC2)助我实现项目管理应用上云

AWS(EC2)助我实现项目管理应用上云

小虚竹的专栏 6万+
上一篇: 干货 | 降低20%链路耗时,Trip.com APP QUIC应用和优化实践
下一篇: 干货 | Trip.com APP QUIC应用和优化实践
携程技术
博客等级 码龄10年 3715粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值