[关闭]
@Rays 2018-02-11T01:51:32.000000Z 字数 1154 阅读 1236

在Heroku上扩展ipify服务

系统架构


摘要: ipify服务在Heroku上已扩展到超过300亿次请求。近期,该服务的开发者分享了他的经验。ipify是一种在线服务,应用可调用ipify提供的API,获取应用自身的外部IP地址。

作者: Hrishikesh Barua

正文:

ipify服务在Heroku上已扩展到超过300亿次请求。近期,该服务的开发者分享了他的经验。ipify是一种在线服务,应用可调用ipify提供的API,获取应用自身的外部IP地址。该服务最初使用node.js编写。为获得更好的可扩展性,服务已使用Go重写。

ipify的创建者是Randall Degges,最初意在解决他在一个项目开发中的需求。第一版是使用node.js编写的,并部署在Heroku上。该服务可用使用curl等工具访问,也可编程使用。服务网站是一个简单的前端,使用Amazon S3存储桶,部署在CloudFront后端上。Heroku提供的服务单元称为“dyno”,最小服务单元为512 MB内存和单个CPU。dyno的维护代价低,是一种可选方案。dyno在进程故障时会自动重启,并且前端部署了负载均衡器。最小服务单元的费用为每月约7美元。Heroku宿主在AWS上,由此可使用AWS提供的可靠性。

ipify已得到了广泛的使用,面临着可扩展性上的问题。虽然可以通过添加更多的硬件解决该问题,但是一些调查显示,通量仅为每秒10次请求。服务曾采用node.js的cluster模块做了改进,实现加载多个进程以更好地利用多核系统。但是这一改进并不足以处理不断增长的服务流量。服务进而使用Go做了重写。出于性能上的考虑,重写时在众多方案中选用了由Go提供的httprouter软件包。重写使服务性能得到了显著的改善,占用内存更少(仅约5 MB),并可在单dyno部署上达到每秒处理超过2000次请求。此外,在字符串处理上的改进,进一步提高了服务的性能,使得每秒处理的请求数增加了1000次。服务的重写也降低了代价,ipify的运行仅需单dyno部署即可。宿主在AWS上的ipinfo.io等类似服务,也面对同样的可扩展性问题。由于一种解决方案是使用付费更高的服务,因此可扩展性问题会转化为需要付出更高的代价。

ipify现在不仅被一些软件开发人员正常使用,也被一些恶意软件编写人员利用。这导致了大量的突发峰值流量,也导致该服务被一些反病毒软件商的公共阻止列表所屏蔽。当前,服务使用的最高峰值约每月300亿次请求,平均响应时间介于1到20毫秒。与其它一些服务不同,ipify不做使用速率上的限制,同样也提供地理定位。

ipify的客户端软件库以多种语言的形式提供

查看英文原文: Scaling the ipify Service on Heroku

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注