5

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

我很清楚,本地查找会更快,但在负载下访问数据库肯定会比处理额外的 http 请求更占用内存/CPU。显然,如果去本地是最好的路线,升级服务器内存很容易实现。我想每秒超过一定数量的连接,服务器更有可能变得不可用查询其本地数据库而不是 web api(当然假设Web api 服务器可以处理 http 请求)。

任何关于哪种解决方案将是最强大的长期解决方案来处理偶尔的流量泛滥而没有任何拒绝服务的输入将不胜感激。

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

4

4 回答 4

1

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

您当然希望显着增加本地服务器上的内存。请记住,现在内存非常便宜。例如,大约 1 1/2 年前,我构建了一个具有 32 GB RAM 和最新 CPU 的 Linux 机器,价格不到 1000 美元。

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

于 2014-12-30T21:34:21.590 回答
1

找出答案的最佳方法是运行负载测试并亲自查看性能最佳的方法。但我的直觉是每秒 200 个查询并不过分,并且可以轻松地以您喜欢的任何方式处理。

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

我在这里找到了这个设置的一些实际测试数字: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 服务,则使端点易于配置。如果您的服务使用与maxmind 相同的 URI 方案和响应 json,您可以随意从自己的本地服务器切换到 maxmind 并再次切换回来。

于 2015-01-06T08:37:08.507 回答
0

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

于 2014-12-31T06:31:40.713 回答
0

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

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

于 2015-01-02T00:23:47.667 回答