如何使用3项免费ETA服务每月免费处理超过35万次请求

2020-07-06 15:01:34

这是一个关于如何不花一分钱的故事,使用三个预计到达时间(ETA)服务而不是一个。一切都是基于我在Godee项目担任后端开发人员的个人经验。Godee是一个初创项目,提供在线预订公交车座位的服务。您可以在此处找到有关此项目的更多信息:

Godee是一项公共交通服务。乘坐Godee的公交车比东南亚常见的摩托车更方便,比出租车更便宜。这个基于APP的系统允许用户找到合适的路线,选择时间,预订座位,并在线支付乘车费用。而Godee的问题之一就是严重影响用户体验的交通拥堵。用户厌倦了等待,并对试图猜测公交车到达时间感到恼火。因此,为了使通勤更方便,需要服务来计算公交车的大约到达时间,也就是预计到达时间。

从零开始开发ETA至少需要一年时间。因此,为了加快这一过程,Godee决定实现Google Distance Matrix API工具。后来,他们开发了自己的Pifia微型服务。

随着时间的推移,业务在增长,用户群也在增加。我们在Google Distance Matrix API中遇到了请求增加的问题。

因为每个请求都是收费的,Google API每月提供10.000次免费查询,之后每1.000次查询收费20美元,当时我们每月大约有150,000次请求。

我的导师对此非常不满。并表示系统应该每30分钟更换一次现金以存储预计到达时间。当时,系统每隔3秒向Google API发送请求以获取最新数据。然而,这样的兑现算法效率不高,因为小型巴士被困在车流中。所以距离每十分钟才改变一次。还有另一个细微差别。例如,五个用户请求关于同一总线的信息,这是相同的请求。缓存解决了这类问题。

缓存起作用了,但自从Godee进一步增长并面临同样的问题后不久-查询数量再次增加。

决定用OSRM取代Google API。基本上,OSRM是一种基于ETA构建路线的服务(这是一个粗略但简短的描述,如果您需要详细信息,这里是链接)。

开放源码路由机(Open Source Routing Machine,简称OSRM)是针对道路网络中最短路径的高性能路由引擎的C++实现。

OSRM有一个问题:它建立路由并计算ETA,而不考虑流量。为了解决这个问题,我开始寻找能够提供城市指定区域交通信息的服务。在这里,交通部提供了我需要的数据。在对文档进行了一些研究之后,我编写了一个小代码,它每30分钟获取一次交通信息。为了将交通信息上传到OSRM,我用./osrm-contract data.osrm--Segment-Speed-file updates.csv命令编写了一个小脚本(这里有更多详细信息)。

数学时间:每半小时就有一个请求到这里来获取交通信息这是每小时两个请求,也就是说,一天是48个请求(24*2=48),一个月大约是≈1.488(48*31=1.488)一年17.520。是的,我们这里有这些免费的要求,15年就够了。

初步测试表明,该服务运行良好,但存在一个问题,这里给出的交通信息是“胡言乱语”,数据与OSRM格式不匹配。为了匹配信息,您需要在这里使用另一个服务进行地理编码+OSRM(用于获取地图上的点)。这大约是每月450.000个请求。后来,由于请求数量超过可用限制,OSRM被放弃。我们没有放弃,启用了Here Distance Matrix API,并临时删除了Google Distance Matrix API。这里的逻辑很简单:我们将坐标从A点发送到B点,并获得公交车到达时间。

在我们将所有东西安装到测试服务器上并开始检查之后,我们收到了来自测试人员的第一个反馈。他们说,ETA读取的时间不正确。我们开始寻找问题,查看日志(我们使用data dog记录日志)、日志,测试表明一切都运行得很好。我们决定更详细地询问这个问题,结果发现,如果汽车在交通中停留15分钟,预计到达时间也会显示相同的时间。我们认为这是因为缓存存储了原始时间,并且在30分钟内不进行更新。

我们开始寻找问题,一开始我们检查了Here距离矩阵API(名为We Go Here)网页版的数据,一切正常,我们收到了相同的ETA。这个问题也在谷歌地图服务上进行了检查。没有任何问题。服务本身就显示了这个预计到达时间。我们向测试员和企业解释了一切,他们接受了一切。

我们的团队领导建议连接另一个ETA服务,并返回Google API作为备份选项,并使用切换服务的逻辑编写代码(如果请求超过空闲请求数,则需要切换)。

val=getCount()//获取getMax()<;=val{//检查使用的服务的免费请求数限制newService=switchService/如果达到限制,切换服务返回newService(From,To)//给出新服务的逻辑

我们找到了下面的Mapbox服务,连接并安装了它,它就可以工作了。因此,我们的预计到达时间有:

“这里”-每月250,000次免费请求Google-10,000次免费请求/月Mapbox-100,000次免费请求/月。

总是寻找替代方案,有时会发生这样的情况,企业不想为这项服务付钱,于是拒绝了。作为一名在这项服务上辛勤工作的开发人员,您应该将任务真正投入使用。本文描述了我们如何尝试连接更多服务以免费使用ETA,因为该企业不想为该服务付费。

附注:作为一名开发人员,我相信如果工具做得很好,并且做得很好,那么您就可以为工具的服务付费(或者找到开源项目:D)。