在Heroku上扩展ipify服务

2018阿里云全部产品优惠券(好东东,强烈推荐)
领取地址 https://promotion.aliyun.com/ntms/yunparter/invite.html

看新闻很累?看技术新闻更累?试试 下载InfoQ手机客户端 ,每天上下班路上听新闻,有趣还有料!

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

相关推荐