我做了一个简单的地理定位服务

2020-07-25 02:32:13

如果你曾经尝试过提供地理位置服务(例如,根据用户IP地址定义用户国家/地区),那么你很可能听说过MaxMind。

MaxMind-可能是提供Geo IP数据库和服务的最佳公司之一。

然而,也有一些限制:如果你正在做一个副业,很可能你不想为地理定位服务支付额外的$。在这种情况下,MaxMind提供GeoLite2数据库,但是您将负责在您的服务器上托管此数据库并定期更新数据库。您还需要确保您的项目符合MaxMind';的许可。

在这个特定的示例中,我需要一个简单的地理位置服务,它将在可嵌入的javascript代码中使用(类似于Google Analytics或其他跟踪服务),因此响应时间相当关键。

在我的第一次尝试中,我尝试使用无服务器框架在AWS Lambda上托管简单的地理位置函数(该函数使用MaxMind GeoLite2数据库)。然而,我很快意识到响应时间和我预期的不一样--平均响应时间在200毫秒到500毫秒之间。所以我开始寻找其他选择。

因此,我想,如果我不能在AWS Lambda上托管它,我还可以在哪里托管我的无服务器功能?我尝试的下一项服务是Cloudflare Workers。我创建了一个简单的函数来测试响应时间,它确实令人印象深刻-平均在30ms到80ms之间,与AWS相比,我的性能几乎提高了10倍。

然而,这个解决方案有一个非常重要的警告--由于一些运行时限制,MaxMind GeoLite2数据库不能在Cloudflare Workers上运行。

然后我想-嘿,等一下,因为Cloudflare提供DDoS保护服务,他们可能会在Cloudflare Workers中提供一些有趣的功能。在浏览了他们的文档之后,我意识到函数中的request对象可以访问cf对象,该对象包含一些关于访问者的有用信息,包括访问者所在的国家!

这正是我正在寻找的,在几十行代码中,我启动并运行了我的地理定位功能。

如果您以前没有使用过Cloudflare,您需要在Cloudflare.com注册并进入Workers目录。