在流量高峰期间查询远程Web API与本地MySQL数据库?

时间:2012-05-06 07:08:05

标签: mysql web-services

我们在主页上实现了一些代码,这些代码依赖于每个唯一游标的geoip查找,我们可以选择查询geoip web服务(Maxmind)或下载数据库并在本地查询。该服务器目前是一个512MB的Linode实例,每天只接收大约1500个独立用户,但是我们担心在流量高峰期间会发生什么。

对我来说很明显,本地查找会更快,但是在加载数据库时肯定会比处理额外的http请求更多ram / CPU密集。如果去本地是最好的路线,显然很容易实现升级服务器内存。我会想象每秒超过一定数量的连接,服务器更有可能变得不可用查询本地数据库而不是web api(当然假设web api服务器可以处理http请求。)

任何关于哪种解决方案都是最强大的长期解决方案来处理偶尔的交通洪流而不拒绝服务的任何输入都将非常感激。

编辑:只是尝试进一步量化这一点,假设服务器需要能够每秒处理多达200个连接。每个连接都需要一个数据库查询或http请求。

4 个答案:

答案 0 :(得分:1)

鉴于每秒200次点击,你肯定想要使用本地数据库。我怀疑提供此类服务的任何第三方网站都希望处理这么多请求,但即使他们这样做,它可能会比本地数据库访问慢得多。

您当然希望在本地服务器上显着增加内存。请记住,记忆现在非常便宜。例如,大约1年半前,我建立了一个拥有32 GB内存的Linux机箱,最新的CPU价格低于1000美元。

每秒200次点击可能需要群集数据库和多台服务器。您可能还需要考虑使用密钥值存储,这可以处理每秒数千次点击。

答案 1 :(得分:1)

最好的方法是运行负载测试,亲自了解哪些方面效果最佳。但我的直觉是,每秒200次查询并不过分,并且可以以您喜欢的任何方式轻松处理。

我倾向于使用带有gis数据库的本地服务器,因为本地更便宜(每个查询没有成本),单个服务器更容易更新。此外,如果需要,您可以通过添加第二台服务器或配置第三方服务器来扩展。

我在这里找到了一些实际的测试编号: http://blog.jcole.us/2007/11/24/on-efficiently-geo-referencing-ips-with-maxmind-geoip-and-mysql-gis/ 这是一个网络设置,其中四个客户端查询单个服务器。对于单个客户端,他报告2000个查询/秒,延迟低于1毫秒。请注意,他使用mysql内置的gis功能来获取这些数字。此外,这是2007年,所以现在表现应该更好。

使您的代码模块化和可配置。这当然取决于编程语言,但是创建一个LookupService接口,以便您可以根据需要创建不同的实现,而无需更改其余代码。如果实现调用Web服务,则可以轻松配置端点。如果您的服务使用相同的URI scheme and response json as maxmind,您可以随意从您自己的本地服务器切换到maxmind,然后再返回。

答案 2 :(得分:0)

您的提供商通过查询向其网络服务收费。根据他们网站上宣传的费率,200 q / s,你需要支付...每小时72美元。你可以为这种钱获得数十个怪物专用服务器!

答案 3 :(得分:0)

在我的工作中,我们使用Maxmind数据库的本地版本,这是一个.dat文件,我们不断查询该文件(每天大约50万次或更多),没有任何问题。然后,我们将信息缓存到会话中,因此我们不必一遍又一遍地查询同一用户的信息。我们还有一个广告工具,它使用Maxmind数据库,然后搜索显示在该用户半径10,25或50英里范围内的广告。

我不建议将API用于太多请求,否则他们可能会在没有警告的情况下将您切断,现在您没有Geo信息。此外,如果他们的服务器停机,您再次没有地理信息。