当前位置:   article > 正文

【项目方案】IP地址地理解析方案对比与选型

【项目方案】IP地址地理解析方案对比与选型

目前,许多项目在用户发布言论时需要解析其 IP 地址,并且在账号管理中也有查看最近登录地的需求。然而,市面上的相关教程通常缺乏全面性,往往只提供一种简单的方法,导致在技术方案选型时难以进行有效的方案对比。本文旨在对常见的 IP 地址地理位置解析方案进行系统化分析和对比,以期为独立开发者或刚接触该领域的开发者提供指导与帮助。



1.概述

需要明确的是,要想把 IP 地址解析为地理位置,没有什么取巧的方案,毫无例外都是拿一些比较权威的库来对比,从库中查找,有的厂商可能会自己收集 IP 地址与地理位置对应的库,有的厂商会采用保持高频率更新的三方库。对于独立开发者或者小微企业,如果想使用免费的方案,基本都是使用的市面上免费的开放库来比对。

关于这个方案的选型,其实核心就是三点:使用谁的库、在线还是离线、客户端还是服务端

注:本文只做方案对比,并无代码实践,代码实践请看后续文章。

2.使用场景

最容易理解的场景,在抖音、知乎发表一些言论的时候,现在都会显示 IP 地址的归属地,如下图所示:
在这里插入图片描述

再比如,查看账号最近登陆地:

在这里插入图片描述

3.方案对比

使用开源的免费库,不可避免的会出现解析不到、准确率低等问题,因为免费库不会投入那么多人力去维护。
使用商业库一般就不会有这个问题,大都商业版本都会保持高频率的更新,且库本身非常的全面。

3.1使用谁的库

市面上使用最多的免费库就是纯真开源的免费库,且一般的工具大都是基于此免费库来进行。商业库有纯真的、

3.1.1 免费库

可以通过https://www.cz88.net/geo-public申请免费 IP 库的授权。很多 github 项目中也会有一些免费库,大部分都是基于纯真的库再加上用一些免费 API 接口更新部分数据得到的。
在这里插入图片描述

3.1.2 商业库

目前直接售卖库的比较少(估计倒卖是一个问题),且后期更新维护也是一个问题。纯真有精确到省级的离线库,需要付费购买,在阿里云上也有相关的入口:https://market.aliyun.com/apimarket/detail/cmapi00053387#sku=yuncode4738700005

在这里插入图片描述

3.2 在线还是离线

在线就是请求外部的 API 接口来获取地理位置,离线就是将库直接加载进项目里,本地查询。这二者最大的差别就是外部 API 耗时会长且具有不稳定性(虽然商业产品一般会保证其稳定性),离线的方式可以非常快速的做本地内存里的查询,但是要想定位准确,需要每隔一段时间更新一次库。

3.2.1 在线

提供此类 API 的厂商有很多,这里给出高德和纯真的例子:

高德:https://lbs.amap.com/api/webservice/guide/api-advanced/ip

在这里插入图片描述
纯真:https://www.cz88.net/geo
在这里插入图片描述
也有一些免费的方案,例如淘宝:https://ip.taobao.com/

基本就是给个 IP 地址,它反给你一个地理位置信息。

3.2.2 离线

离线的话需要自己加载整个库到内存中,再基于此构造数据结构加快查询,目前市面上用的比较多的是 ip2region 的方案:https://github.com/lionsoul2014/ip2region,它定义了一套用于快速查询 ip 地址的数据结构,查询速度极快。如果自己有一个库,推荐依据项目中的说明转化成它的 xdb 数据格式,可以直接使用它封装的 java SDK,使用起来也非常便捷。
在这里插入图片描述

3.3 客户端还是服务端

关于放到使用客户端还是服务端,这里会有几种使用方式:

1(完全由服务端生成):服务端解析请求的 ip 地址(可采用同步或者异步的方式)。
2(客户端生成后再请求):客户端在发送请求之前先查询 ip 地址的地理信息,查询完后再请求接口。
3(客户端请求完再解析):客户端在查询展示时,接口返回了当时的 ip 地址,然后客户端再解析展示地理信息。这种只存在理论中的做法,一般不会使用,这样会造成客户端反复解析、暴露 ip 地址的问题。

所以一般默认服务端查询是使用方式 1,客户端查询是使用方式 2。

3.3.1 服务端

如果将查询放到服务端,那么需要考虑查询的效率的问题,如果是请求外部接口,最好采用异步的方式去查询,不影响接口本身。

3.3.2 客户端

如果将查询放到客户端,那么需要防止关键的 API key 被逆向后盗用。对于小程序场景可能还需要合理设计请求的时机,保证不影响主要业务的操作流程。

大部分厂商都有客户端解析 ip 地址的SDK。
纯真:https://www.cz88.net/sdk

在这里插入图片描述

3.4 完整方案对比

方案名称是否付费效率稳定性准确性拓展性
离线免费库+服务端查询免费本地查询,效率极高稳定
离线商业库+服务端查询付费本地查询,效率极高稳定
免费 API+服务端查询免费免费接口,效率低不稳定中(相对免费库来说准确率有所提升)中(一般来说不会怎么维护)
商业 API+服务端查询付费付费接口,效率高,相对本地查询差距很大稳定极高(实时维护)
商业 API+客户端查询付费付费接口,效率高,相对本地查询差距很大稳定极高(实时维护)中(涉及业务变更需要更改客户端逻辑)

ATFWUS 2024-08-14

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号