GeoLite2 替代方案:托管 GeoIP API
GeoLite2 的替代方案是任何其他 IP 地理定位数据来源,主要选择在于自己运行下载的数据库,还是调用托管的 GeoIP API。两者没有绝对的优劣;合适的选择取决于你愿意承担多少运维工作、需要哪些字段,以及处理多大的流量。
GeoLite2 提供什么,运行它需要付出什么
GeoLite2 是 MaxMind 发布的一系列免费 IP 数据库,以可下载文件的形式分发,你可以用读取库在本地查询。本地查询极其快速,且不增加网络往返,这对高流量、对延迟敏感的路径是实实在在的优势。但使用它也附带一些容易被低估的义务:你要在许可协议下通过账户和许可密钥下载文件,必须按计划保持更新,并负责把文件分发到每一个需要它的环境。
摩擦主要出在最后一点。容器需要把数据库打包进镜像或在启动时获取。无服务器和边缘运行时可能有体积或文件系统限制,使数兆字节的文件变得不便。过期的文件会悄无声息地返回过时的答案,因为应用中没有任何机制提醒你数据已经是几个月前的。请直接向供应商核实当前的许可条款和更新要求,因为它们可能发生变化,且以供应商为准。
关于这一决策的更深入探讨,文章自托管数据库与 API 的对比更详细地比较了这两种模式。
托管 API 带来的变化
使用托管 API 时,由服务商负责下载、解析、更新和提供数据,你只需对每个地址发出一次 HTTP 请求。这消除了部署负担,也意味着你的答案会随服务商数据的更新而更新。代价是每次查询都有一次网络调用、依赖他人的可用性,以及速率限制或配额。对重复地址缓存结果可以缓解其中大部分代价,同时值得为调用设置较短的超时和后备行为,使故障时能够平稳降级,而不是导致注册流程中断。
托管服务通常还捆绑了位置之外的更多内容。如果你真正的目标是决定是否信任某个请求,那么国家和城市只是其中一部分。ipto 的 IP 查询返回 country、city、asn、org 和 currency_code,以及 is_vpn、is_tor、is_abuser、is_datacenter 和 bogon 标志(含 bogon_type)。威胁数据源每 6 小时刷新一次,IP 和 ASN 数据集每天刷新一次。免费层级为每天 1,000 次请求,无需注册。它不检测住宅代理,并且与所有 IP 地理定位来源一样,国家级是准确的,城市级是近似的。
如何公平地比较各个选项
- 你实际需要的字段。如果你只需要国家代码,几乎任何来源都可以。如果你需要 ASN、组织、VPN 或滥用信号,请确认包含哪些以及它们多久刷新一次。
- 精度宣称。对营销中引用的任何百分比保持谨慎。精度取决于地区、地址类型和所采用的定义,不同来源的城市级结果差异很大。请用你知道真实位置的地址样本进行测试。文章国家与城市精度对比解释了原因。
- 更新频率。询问数据多久重建一次,以及你是否能控制变更何时到达你这里。
- 延迟与部署位置。本地文件没有延迟;API 则取决于距离和缓存。
- 许可与数据处理。阅读关于再分发、署名以及你发送的地址会被如何处理的条款。
- 退出路径。把查询放在你自己的小型接口之后,这样以后可以更换来源而无需改动业务代码。
用你自己的数据试用托管 API
成本最低的评估方式是从日志中取一天的真实地址,比较你当前的数据库与一两个候选方案给出的答案。你可以将单个地址粘贴到 IP whois 查询中查看某个地址块背后的注册记录,并用 ASN 查询确认某个出人意料的地址属于哪个网络。对于看起来不对的地址,IP 查公司会根据 RDAP 和 ASN 数据给出带置信度的组织推测,这往往能解释一个奇怪的位置,例如另一个城市的移动运营商或企业网关。API 文档介绍了用于脚本化比较的端点。
如果你想要更全面的概览,请参见最佳免费 IP 地理定位 API。总结来说:本地数据库在原始查询速度和离线使用上胜出,托管 API 在数据新鲜度和省力程度上胜出,许多团队两者并用:热点路径用本地查询,少数需要的请求用 API 做更丰富的补充。