AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

在 Heroku 上扩展 ipify 服务

  • 2018-02-17
  • 本文字数:975 字

    阅读完需:约 3 分钟

看新闻很累?看技术新闻更累?试试下载 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

2018-02-17 17:371391
用户头像

发布了 391 篇内容, 共 143.9 次阅读, 收获喜欢 257 次。

关注

评论

发布
暂无评论
发现更多内容

企业为什么要数字化转型?数字化转型成功的案例有哪些?

优秀

数字化转型

Python图像处理丨如何调用OpenCV绘制直方图

华为云开发者联盟

Python 人工智能

AIRIOT答疑第7期|如何快速提升物联网项目交付速度?

AIRIOT

物联网

Jmix - 业务系统高效开发的少代码平台

世开 Coding

Java spring 快速开发平台 Jmix 少代码

做个男人,做个成熟的男人

源字节1号

数据中台建设(十一):数据中台解决方案参考与未来发展方向

Lansonli

大数据 数据中台 8月月更

【计算讲谈社】第七讲|AI 的价值探索:如何拓展商业边界?

大咖说

人工智能 AI 商业边界

Centos系统安装MySQL数据库

杨杰灵

MySQL 数据库

在SaaS时代,帮助中心成为了许多企业的选择

Baklib

MASA Stack 第三期社区例会

MASA技术团队

Framework blazor

北京零基础前端软件培训

小谷哥

使用 Monaco Editor 开发 SQL 编辑器

CRMEB

【七夕限定盲盒抽奖】一文带你搞懂盲盒抽奖的页面配置

hum建应用专家

阿里云 Serverless 函数计算

MySQL 概念

武师叔

8月月更

编译器工程师眼中的好代码(1):Loop Interchange

openEuler

开源 编译器 openEuler

混合云存储点燃万亿自动驾驶市场,加速产品落地

焱融科技

自动驾驶 AI 分布式文件存储 全闪

理解JavaScript中的“面向对象”

珲少

【云原生】Spring Cloud是什么?Spring Cloud版本介绍

java李杨勇

Java spring cloud stream 签约计划第三季

优化客户服务的 7 个关键步骤

Geek_da0866

文盘Rust -- 配置文件解析

京东科技开发者

数据库 rust yaml 配置文件

学习大数据开发技术后好找工作吗?

小谷哥

倪光南:openEuler已达国际同类社区水准

openEuler

开源 操作系统 openEuler

Github又火了!阿里重发系统设计核心原理全彩笔记,上线两天破百万阅读

Java工程师

Java 高并发

苦熬三个月整理的spring全家桶PDF版限时分享,整整400页

Java工程师

Java spring Spring全家桶

观测云入驻青云云市场,提升云上系统统一可观测能力

观测云

如何编写有效的FAQ常见问题页面

Baklib

分析LED透明屏VS常规显示屏优劣

Dylan

LED LED显示屏 led显示屏厂家

培训机构与自学的优缺点都有什么

小谷哥

认识一下MRS里的“中间人”Alluxio

华为云开发者联盟

大数据 MRS

最具有中国特色的微服务组件!阿里新一代SpringCloud学习指南

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

在Heroku上扩展ipify服务_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章