当前位置: 首页 > 科技观察

马蜂窝搜索是基于Golang并发代理的架构升级

时间:2023-03-23 11:41:59 科技观察

搜索业务是马蜂窝流量分发的重要入口。许多用户在使用马蜂窝时,会主动搜索与自己旅行需求相关的各种信息,包括衣食住行,做出符合自己需求的旅行决定。因此,在马蜂窝,搜索业务交互的下游模块很多,主要包括目的地、POI、热门景点、美食、商场、酒店、问答、攻略、机票火车票等,通过返回搜索结果实时准确地帮助用户做出个性化的旅行决策。面对越来越大的流量,马蜂窝技术团队正在积极尝试优化升级搜索架构,以保证搜索业务的稳定性和性能。方案背景由于历史原因,优化前搜索服务与下游模块的交互主要是调用各个下游模块提供的功能,采用串行调用方式。图1:马蜂窝搜索业务架构及技术体系搜索技术体系存储-MySQL、Memcache模块交互-函数调用检索-Elasticsearch搜索业务架构我们将搜索业务抽象为三个功能模块:1.决策系统负责用户-根据Intent、操作策略、点击日志等数据,结合决策系统的相关算法和模型,决定展示哪些模块(游记、商品等)以及各模块的展示顺序。2、Agent负责根据决策系统确定要展示的模块,并从Elasticsearch和业务方获取模块数据(如游记、商品等)。3、Format负责根据不同模块的UI交互定义格式化数据,补充UI交互缺失的数据。串行的函数级调用方式导致了之前搜索服务架构的一系列问题:业务之间的高耦合。随着交互模块越来越多,搜索服务耗时较长,平均达到400-500ms;由于与各个业务交互的方式是FunctionCall,上游很难控制下游模块的阻塞时间;下游调用增加响应时间线性增加,增加新功能困难,可扩展性差;如果下游模块出现故障,会因为接口阻塞导致超时,影响整个搜索服务,呈现白页,用户体验差,严重down。图2:问题分析因此,我们需要想办法降低搜索服务对下游模块的依赖和模块之间的耦合度,从而提高架构的整体可用性和性能。基于Golang的并发代理实现经过研究,我们开发了基于Golang协程实现的并发请求代理工具,将以往函数级调用的方式改为基于TCP/IP的HTTP接口调用,解耦下游模块。线路调用并发,实现超时控制和异常容错处理。主要技术选型——协程(Goroutine)Goroutine是Golang中的轻量级线程实现,由Go运行时管理。它是Go并行设计的核心,也是Golang最重要的特性之一。相比进程和线程任务的抢占式调度,需要在内核空间和用户空间频繁切换上下文信息,Goroutine可以由程序来控制,更易用,更高效,更轻量。Goroutine维护着一组数据结构和多个线程。任务放入队列中执行,由Goroutine维护的线程拉取执行。当任务执行操作系统的IO操作需要等待时,Goroutine利用LinuxIO多路复用技术(Epoll、Select)切换执行队列中的任务,实现并发。与其他语言的线程相比,它默认的内存占用为2KB,远小于其他语言的M级。在性能开销上,由于任务调度基本由程序控制,因此开销比线程要小很多。在选型过程中,我们对比了PHP的Swoole和Java的多线程并行处理方案。它们的CPU和内存消耗比Golang的Goroutine高很多,并且并行请求的数量会受到资源的限制。在高并发的情况下,如果控制不当,服务就会崩溃。Goroutine实现的并发代理可以很方便的支持其他并发请求。图3:并行并发的Golang并发代理实现代理服务的处理流程按照请求可以分为HTTPServer——>参数处理——>并行请求(协程调度)——>HTTP模块——>API层.目前我们的方案支持HTTP/HTTPS协议请求。图4:并发代理架构图各模块功能概览:HTTPSever:使用Go语言httpserver包实现,用于接收和处理来自上游需要代理的模块的HTTP请求;参数处理:根据定义的交互协议,将上游模块的请求解析为商品、游记等下游模块请求任务的并行请求;协程调度:使用Go语言的Goroutine实现,负责执行下游模块的并发请求任务;HTTP模块:使用Go语言的ioutil/http包实现,负责以HTTP协议的形式与下游API模块进行交互;API模块:将下游模块的函数调用封装为TCP/IP接口,将函数形式的交互变为HTTP接口形式的交互。代理应用于搜索业务后,整体架构变化如下:图5:并发代理在搜索业务的应用总结及后续规划。一些问题。目前平均搜索服务时间已经降低到240ms左右,架构的可用性和可扩展性也得到了极大的提升,有效提高了系统资源的利用率。目前并发代理只支持HTTP,未来会加入RPC,更好的支持整体服务改造。在推动和实施搜索架构升级的过程中,我们也会分享更多的经验,希望大家继续关注。本文作者:王江涛,马蜂窝推荐的研发工程师。【本文为专栏作者马蜂窝科技原创文章,作者微信公众号马蜂窝科技(ID:mfwtech)】点此查看作者更多好文