【东南亚最大叫车服务Grab揭露三大技术关键】亿级搜寻平台如何又快又准又稳定
2017-11-11 09:43:44 | 来源:ithome | 投稿:梁子 | 编辑:dations

原标题:【东南亚最大叫车服务Grab揭露三大技术关键】亿级搜寻平台如何又快又准又稳定

东南亚最大叫车服务平台Grab每年超过10亿的搭乘次数,叫车App每天需要处理数亿笔的地理位置查询请求,近日Grab资深工程师吴炜彬在台揭露,如何让搜寻平台又快又准又稳定的背后技术关键。 (摄影/何维涓)

东南亚最大的叫车服务平台Grab,和Uber、滴滴打车类似,主要的业务都是处理叫车服务,服务的范围涵盖全东南亚地区的国家,包含缅甸、泰国、越南、马来西亚、新加坡和菲律宾等国的132个城市,共有180万个司机。Grab在2012年才创立,在短短的几年内,目前一年已经超过10亿次的搭乘次数,不过,业务突然增长也为Grab带来挑战。

Grab资深工程师吴炜彬表示,由于叫车平台需要用户输入起始点和终点的地理位置资讯,平台每天大约需处理数亿多个地理位置查询请求,要如何提供毫秒级的查询服务,还要兼顾搜寻结果的准确性,是Grab服务爆红后最大的难题。

Grab在2013年时决定导入这个知名的开源搜寻工具Elasticsearch,来因应多种资料查询和Log追踪的需求。在Grab团队中,一手包办所有Elasticsearch丛集管理工作的吴炜彬,他解释,当时为了方便保存和搜寻MySQL的稽核Log日志档。原本所有MySQL资料库中的变动都储存在文字格式的Log档中,管理不易,更难以追踪。于是,Grab改将Log记录写入Elasticsearch中储存,通过Elasticsearch,可以搜寻MySQL的每一次存取,每个栏位的任一项数值异动。

Elasticsearch是荷兰一位开发者Shay△Banon在2010年推出的的开源分散式搜寻分析系统,使用Apache△Lucene来储存JSON文件,也可提供全文搜寻的功能。因为Elasticsearch具有高可扩充性(Scalability)与可用性(Availability)的特质,再加上资料处理效能高,许多企业都采用了Elasticsearch,就连维基百科、GitHub、英国卫报、Stackoverflow等网站,都用Elasticsearch来处理内容搜寻与资料处理分析的工作。

吴炜彬表示,保存Log记录是Elasticsearch常见的应用方式,通过Elasticsearch来储存Log档,有助于用可视化的形式来呈现Log搜寻的结果,不过,Grab不仅用Elasticsearch来储存Log档,后来,更进一步通过Elasticsearch来搜寻叫车服务的热门地点(POI,Point△of△interest)。这是叫车服务中,影响车辆调度效率,最关键的参考资讯。

在叫车服务中,设定路线是影响用户体验的第一个关键,用户打开Grab叫车App后,需输入用户姓名、地址和附近建筑物的类型等,再通过搜寻栏位来输入上下车的位置。

Grab提供了3种搜寻方式,第一种是就近搜寻,也就是当用户打开App后,会自动侦测用户所在位置,通过询问的方式与用户确认上车位置,第二种则是以用户地理位置为基础的文字搜寻,通过用户输入的地址来搜寻出发地和目的地。

第三种搜寻方式比较特别,若用户不知道自己所在的位置,可以通过逆向搜寻的方式来搜寻上车地址,举例来说,用户可以输入附近的商店、邻近的街道名称,并通过地图将自己的位置定位出来,就能找到用户目前所在的位置。

来自132国的Grab用户,每天通过App查询地点来叫车的地理资料查询次数,累计多达数亿次,这是叫车App中最常用的第一项功能。为了简化用户输入过程,不论用哪一种搜寻方式,叫车App都会提供相关地点选单,推荐10~30个地址或地点的清单,让用户点选,来简化输入过程,也能减少对后端系统的负担。

根据不同业务场景,订制出合适的搜寻策略

由于Grab叫车服务遍及东南亚各国,吴炜彬指出,用户所用语言和地址资讯也有很大的差异,因此,Grab得根据不同国家的用语特色和惯用地址描述方式,来订制每个国家的搜寻机制。

尤其,“语言的分词机制会影响了庞大地理位置搜寻任务的效率,”吴炜彬表示,东南亚的语言,每个单词都是连在一起的,不像英文每个单词中间会有空格,因此,系统必须分析整个句子,才能根据语法,正确解析每一句的意思,Grab为了解决语言的问题,创造多个不同的语言分析器,将索引的方式分成不同的版本。

不过,“Elasticsearch跟一般资料库不同的是,Elasticsearch使用逆向索引(Inverted△index)的机制!”吴炜彬解释,一般的正向索引每一行就是一笔资料,每一列就是该笔资料不同的属性,Elasticsearch则是完全相反,每一行是属性,而每一列是一个Host,Host中有单笔资料的编号(Document△id),

简单来说,Elasticsearch在写入3笔地址资料时,会先根据分词萃取出文字(Term),在合并(Merge)之后,比对出每个文字重复出现在那些资料编号中,并将该资讯记录下来。

举例来说,编号1的资料只有Grab办公室的名称,编号2资料则是Grab办公室的地址,编号3资料包含Grab办公室名称和经纬度,因此 3笔资料同时被写入Elasticsearch时,Elasticsearch会先合并,将相同的关键字提出来,因此,用户搜寻Grab时,Elasticsearch就能快速搜寻到与Grab关键字相关的资料编号,并将搜寻到的结果提供给用户。

也因此,Elasticsearch逆向索引的特性,让Grab每天面对数亿笔查询的服务量,可以提供用户毫秒级的查询服务,但是,只有速度还不够,Grab还要解决另一个挑战是查询结果的准确性。

提高搜寻准确度的关键:评分系统搭配权重机制

为了因应不同的业务场景,Grab在用户搜寻地理位置的过程中,加入权重的机制,将不同的搜寻关键字,依照业务场景来调整,通过该评分系统,提供更准确的搜寻结果。

在用户输入搜寻的文字后,系统会通过比对关键字与资料库里的每笔资料的相对应程度,像是10个字元中,有几个字元相同,或是这个关键字出现的次数,综合以上结果,算出一个分数再乘以不同的权重,最后,每个键值(Key-value)的资料栏位都会有一个分数,系统再选择前10或是20得分高的结果,提供给用户。

而不同国家的地址资讯也会有不同的特色,吴炜彬指出,邮递区号在越南不太明确也较少人使用,但是,在新加坡每栋建筑物都有不同的邮递区号,因此,根据邮递区号就能找到非常准确的地理位置。

由于不同国家地址资讯的差异,Grab调整搜寻的策略,加入了权重的机制,若用户在越南用邮递区号搜寻,系统则会忽略该栏位,将邮递区号搜寻的权重调整到最低,但是在新加坡,系统就会将邮递区号的搜寻权重调整到最高。

吴炜彬认为,加入权重的机制,还能够让大范围的搜寻也不会出错,他举例,用户搜寻台北时,台北101和一家位于九份名为台北牛肉面商店,相关度的分数会相同,但是加入权重机制,可以考虑其他资料栏位的得分,因为台北101的地址栏位也会含有台北的字元,因此综合计算分数后,台北101的得分会比九份的台北牛肉面高。

另外,Grab也采用边缘语言模型Edge△NGRAM分析器,来预测用户输入的行为,在用户输入的过程中,当用户输入两个字元,系统就会提供用户相关的字。

以“Cecil△office”为例,Grab将最小边缘和最大边缘定义为2和8个位元,也就是说,从2个位元到8个位元先总共储存了7个索引,因此,在用户输入“Ce”两个字元时,系统就会开始出现相关的索引结果, 若使用者输入的字元越多,得到的结果也会越正确。

建立资料库的监控和警示系统,确保服务不中断

除了查询地理位置速度要快,搜寻结果又要准确之外,Grab亿级搜寻平台的第三个挑战是,服务更不能中断,吴炜彬表示,开源版本的Elasticsearch并没有提供监控和警示的功能,于是,Grab用Go语言开发一套Elasticsearch△Proxy系统,来撷取所有https的请求资讯,包括来源IP位址、回应时间、查询内容等,将这些Log档储存下来后,可加入其他Log分析系统,像是Scalyr,或是用Elasticsearch△提供的Log收集分析平台Elk(Elasticsearch、Logstash、Kibana的简称)。

但是,拥有监控的机制还不够,由于Elasticsearch去中心化丛集的特性,会造成当程式指定接收查询的伺服器不能运作,服务就会有瘫痪的风险,在Elasticsearch运作机制中,每一个伺服器是一个节点,由多个伺服器组成丛集,每一台伺服器同时有3个角色:Masternode、Datanode和用来解析Log的Ingestnode,每台伺服器都可以接受查询请求,接收到查询请求的伺服器,会通过搜寻丛集的资讯,将需要查询的资讯发送到相对应的伺服器上,每一台伺服器都会将查询执行一遍,得到结果后,再将结果回传给接收请求的伺服器,最后,由接收请求的伺服器将所有查询结果排序后,回送给用户查询结果。

为了避开指定伺服器运作影响服务的风险,Grab采用轮替式DNS(DNS△round△robin)的机制,通过DNS主机设定多组IP,来分散风险之外,还能达到负载平衡,让每台伺服器都能轮流接收查询请求,因为整合查询结果的工作,需要消耗CPU资源,轮替的方式可以确保资源消耗不会集中在单一一台伺服器上。

不过,吴炜彬坦言,这个作法会衍生一个问题,若其中有一台伺服器当机了,DNS主机不会得知,仍旧会将查询请求送至这台当机的伺服器,就无法回传查询结果,他推算,约80%的查询可以成功,但有20%失效的风险。

为了解决这个问题,Grab用AWS△的Elasticsearch服务所提供的心跳查询功能,检测每一台伺服器的健康程度,若与某一台伺服器的心跳查询失败,DNS主机就不会将请求发送至该伺服器。

心跳查询解决了2成失效的风险,但又产生了另一个问题,吴炜彬补充,由于Elasticsearch去中心化丛集的特性,一台伺服器同时是Master和Slave,若某一台伺服器的Datanode查询,占了大部分的CPU和记忆体资源,就会影响到Masternode△的使用,Masternode无法执行心跳查询,确保伺服器的健康状况,可能导致服务中断。

后来,Grab决定将Masternode独立出来,作为Masternode的伺服器不 需要太多储存空间,也不需要高效能的CPU和记忆体,只需要管理丛集的资讯,并即时反馈ELB心跳查询的结果,而Datanode因为要处理查询请求,需要比较高效能的CPU和记忆体,以及储存资源。

Grab在Elasticsearch的部署上,一开始自行用开源的程式建立部署,后来因为监控和警示的功能,采用了AWS提供的Elasticsearch服务,监控的功能整合到Cloudwatch上,较方便监控。

不过,吴炜彬指出,AWS的Elasticsearch服务为了方便管理,禁用了Endpoint,且用户权限管理系统也不完善,若企业要在丛集中加入新的用户权限,假设整个丛集有10个节点,AWS的作法是先建立10个新节点,并将原来10个节点的数据,发送到新的节点上,但是,“数据迁移时,容易对原来的丛集产生性能上的影响。”他说。

Grab最终采用了Elasticsearch的企业版本,原因是Elasticsearch的企业版本涵盖了AWS上所提供的功能,也提供商业化的插件(Plug-in),像是监控和警示的功能,另外,企业版提供用户权限管理系统,增加新的用户权限,不需要经过数据迁移。

“以前是通过查询找数据,现在可以通过数据来找查询!”吴炜彬表示,未来,Grab还预计通过真实数据来验证每一条查询规则的关系,进而分析更复杂的用户行为,针对个人推出订制化的销售策略,举例来说,若某一个时段的一个路线有许多查询,代表这些查询之间是竞争的关系,因此,Grab就能在叫车的尖峰时段提供收费,或是也能通过用户查询搭车路线的规则,将用户分类成通勤族、游客等不同类别的用户,推出适合用户行为的优惠方案。

Grab为了解决同一台伺服器可能因为查询占用大部分的资源,而影响心跳查询效能,决定将Masternode独立出来,由Masternode负责管理丛集的资讯,并即时反馈ELB心跳查询的结果。

摄影/何维涓

?

tags:

上一篇  下一篇

相关:

KKTV、KKStream预测用户观影时机 机器学习扮关键

我酷新闻网记者苏元和/台北报道OTT串流影音竞争白热化,运用创新模式抢影音市场版图大战开打,KKTV与KKStream齐心致力优化数据分析技术,并开放真实观影资料,广邀科技菁英与数据分析好手,参与年度赛事KKTVDataGam

京东双11百亿海量交易的维运关键大公开

京东金融MySQL维运资深资料库管理员潘娟表示,京东尽可能将维运工作分散到日常工作,借由平时的检测发现潜在问题,降低服务出问题的风险。(摄影/何维涓) 电商平台年度最大的购物促销活动双11即将开打,去年的双

YouTube视频推荐怎么知道你想看什么?关键就在机器学习

不少人观赏YouTube上的视频内容,会发现YouTube会推荐许多你可能感兴趣的内容,Google今天揭露这项服务背后的关键技术为机器学习,通过机器学习过滤出使用者可能感兴趣的内容,以提供用户个人化的体验。全球每分钟约

国内三大电信均获NCC核配4G物联网专用电信门号

未来物联网将深入人们的生活,图为健康照护的应用,内建物联网感应器的地板、床可随时照护病人的日常起居情形。示意图,与新闻事件无关。 继远传、中华电信之后,NCC周三也通过台湾大哥大的申请,核配行动宽频(4G

Walmart靠机器人盘点50家分店背后的秘密,关键技术是电脑视觉

图片来源: Walmart 全球零售商龙头沃尔玛(Walmart)于上周四(10/26)宣布,在美国的沃尔玛超市将使用机器人和人工智能(AI)技术,来处理具重复性、可预测性的人工任务,如扫描货架上缺货的物品、替换不正确的价格

站长推荐: