
有这样一个需求,每台机器每 30 秒通过访问一个特定的页面,来获取外网 IP 地址,大概会有 50 台机器运行;
返回的内容大概就是 {'ip':'123.123.123.123'} 而已,因为需要服务端来判断来访者 IP ,所以没办法直接部署到 CDN 或者做缓存(这个 IP 必须得是实时的,如果来访者 IP 换了也得给出新的结果);
目前考虑的是部署一个 node.js 来跑(据说高并发很好?),每天 14 万次请求,除了购买一个 VPS 还有什么更好的办法吗?
PS. 考虑过通过网卡来获取 IP ,但机器都在路由器后面,网卡信息是没有外网 IP 地址的;
PPS. 也考虑过直接抓网络上其它 IP 查询网站的结果,但这些网站有时会触发保护系统,返回了错误的结果;
1 dapang1221 2016 年 5 月 3 日 我感觉直接用 python 都行。。最高 50qps ,而且也没有啥计算和 io 的占用,根本没啥压力。。 |
2 abelyao OP @dapang1221 啥语言都行… 但只要用到了服务端,就得有个部署… 对不对…… |
3 JiShuTui 2016 年 5 月 3 日 via Android 14 万的请求不多,随便什么语言随便写都行吧 |
4 just1 2016 年 5 月 3 日 via Android 随便什么样配置的都可以做到啊。 daocloud 自己做个 docker ,用免费额度。 灵雀云也可以,有免费额度 或者好雨云 php 或者其他语言部署一下 |
5 JiShuTui 2016 年 5 月 3 日 via Android 就用最好部署的 php 吧,一个.php 文件,两行代码搞定 |
6 dapang1221 2016 年 5 月 3 日 @abelyao php 的话直接买个虚拟主机就行。。你查查万网还有没有免费两年的虚拟主机,反正之前有,不知道现在如何了,这个也是够用的…… |
7 kingwkb 2016 年 5 月 3 日 via iPhone 我们直接使用 nginx 的 echo |
8 scys 2016 年 5 月 3 日 丢个 Go 写的 IP 获取 API -_- Cloudflare 作为前端,你那个访问量不会有任何压力。 https://only-pass.com/api/ipgeo 直接访问,返回 json -_- 用的是 geoip2 的免费解释地理位置用。 现在延时全国估计在 300ms 内 |
9 scys 2016 年 5 月 3 日 |
10 manhere 2016 年 5 月 3 日 via iPhone 这就是个简单的 ddns 啊, 14 万请求随便搞个 vps 就可以了 |
11 abelyao OP @just1 @dapang1221 每分钟 100 次的访问量确实不大,就怕类似阿里云的那种免费主机,检测到这样的访问量以为是被 DDOS 了,直接拉黑洞里去…… @JiShuTui 关键不在用什么语言写… 是怎么部署这个写完的代码… @scys 我靠!难道这个就是在寻找的方案!话说 CF 不会缓存结果吗? |
13 abelyao OP @scys 请教一下具体实现的方式?如果 CF 做个前端,但还是要到后端拿 IP ,那并不能缓解后端服务器的压力啊… 能不能说一下具体思路,谢谢!! |
15 LGA1150 2016 年 5 月 4 日 via Android |
16 scys 2016 年 5 月 4 日 @abelyao 按照你的要求,其实没有什么压力。大家都说了,没有负载不起来的语言。 前端用 CF 只是考虑以后用备案域名,上百度云减速,做全球 CDN 罢了。 CDN 你可以设置为默认缓存时间,而且 CF 的缓存算法不算烂,所以不担心这个问题。 |
19 dapang1221 2016 年 5 月 4 日 @abelyao 才这么点访问量不至于被当做 ddos 的…… |
20 kofip 2016 年 5 月 4 日 |
23 YUX PRO |
25 abelyao OP @kofip 看到这篇 2010 年的博客,是当时作者搞的这个 sohu 的接口,能存活到现在说明确实是可长期提供的,不过看了一下底下的评论,有人反应 IP 的结果不准确… |
27 crab 2016 年 5 月 4 日 |
28 c3538378 2016 年 5 月 4 日 唉,楼主就取个 IP ,并不需要 ip2location ,多大点事: ``` location = /ip { add_header Content-Type application/json; return 200 "{\"ip\":\"$remote_addr\"}"; } ``` |
29 limengwei 2016 年 5 月 4 日 via Android golang |
30 DravenJohnson 2016 年 5 月 4 日 |
31 SoloCompany 2016 年 5 月 4 日 自有服务器的话 28 楼是正解 考虑 SaaS / PaaS 的话首选 python 吧,毕竟最多平台支持,比如 SAE / GAE 这些 |
33 kofip 2016 年 5 月 4 日 我还幻想过,通过 DNS 服务器查询源 IP 。 可惜并没有这种功能! |
34 msg7086 2016 年 5 月 4 日 就像 28 楼那样 nginx 写个配置文件就行了,还部署……? |
35 shiji 2016 年 5 月 4 日 via Android 另外关掉 keepalive ,客户端收到回复之后也尽量直接关闭连接。 |
36 Bryan0Z 2016 年 5 月 4 日 via Android 其实获取 ip 这事根本不用服务器,直接 traceroute 到自己 ip , 5 跳之内一般都有结果,第一个返回的外网 ip ,就是客户机公网 ip …当然想要 NAT 穿透就有点难了 |
39 Anteiku 2016 年 5 月 4 日 via Android |
40 c3538378 2016 年 5 月 4 日 取个 IP 就也能有这么多幻想!楼主醒醒,杀鸡何必用牛刀? |
45 clino 2016 年 5 月 4 日 28 楼应该是最快并发量最大的 |
46 kofip 2016 年 5 月 4 日 怎么就没有一个基础服务提供查询公网 IP 的呢? |
47 abelyao OP |
51 kofip 2016 年 5 月 4 日 telnet smtp.gmail.com 25 220 smtp.gmail.com ESMTP qb1sm978569pac.44 - gsmtp EHLO smtp.gmail.com 250-smtp.gmail.com at your service, [61.49.62.100] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 quit 221 2.0.0 closing connection qb1sm978569pac.44 - gsmtp 我通过 这种方式 获取公网 IP 是不是有点怪异! |
53 Livid MOD PRO |
54 jedyu 2016 年 5 月 4 日 nginx 不是一行配置的事吗?维护代理池? |
55 msg7086 2016 年 5 月 4 日 @kofip 我随便举个例子。 IDCF 最低配置我现在开的是 200 日元一个月,折合软妹 13 只,大概是一顿饭钱。 Ping 可以保持在 100 内。 内存给了 1G ,硬盘配了 5G ,这已经远远超过跑这套系统的硬件需求了。 拿我 Linode 1G 配置的机子来算好了,上面用 Nginx+Lua 跑了一个 BT Tracker ,每 10 分钟就有 14 万请求, CPU 占用 30%不到, Nginx 进程内存吃了 15M 。想来这配置拿来直接返回一个 IP 的话一天跑几亿请求应该是轻而易举了吧。 一个月 13 软妹币……真的有那么负担不起吗…… |
56 yepinf 2016 年 5 月 4 日 |
58 abelyao OP @Livid 是的,只是为了获取外网 IP 地址,如果现有服务能稳定(其实我觉得应该比自己部署稳定)而且能被持续查询(每 30 秒查询一次)那当然是更好,自己也省事。 |
60 abelyao OP |
61 raptor 2016 年 5 月 4 日 买个 VPS 有那么难吗?现在便宜的 VPS 十几美元一年足够满足你要求了,前两年还有几美元一年的。 |
63 zhicheng 2016 年 5 月 4 日 via Android ipcountry.org 就是放在 CF 后边的。 |
68 kofip 2016 年 5 月 4 日 @zhicheng ipcountry.org 我这里 PING 200MS |
69 c3538378 2016 年 5 月 4 日 我已经彻底服了, 50 个客户端、 30 秒才访问一次、就取个 IP 而已 -> 其实是 1.4 万次访问,不是楼主说的 14 万哦 你这是要有多稳定啊? 我觉得你这是不是得在全国每个省都至少部署一台服务器呢( CF 在海外呢)?是不是还得要上 BGP 机房呢?怎么着还得要加个 Load Balancer 吧( CF 可没有这个功能)? |
71 kofip 2016 年 5 月 4 日 |
75 sampeng 201 年 5 月 4 日 每天 14w 请求。。什么语言都没问题。。。随便搞了。。 |
76 hicdn 2016 年 5 月 4 日 curl myip.ipip.net |
77 ppwangs 2016 年 5 月 4 日 根本不用架服务,静态文件就可以搞定。 找 jsonp 的接口,分分钟搞定 |
78 ericyl 2016 年 5 月 4 日 |
79 aeshfawre 2016 年 5 月 4 日 板瓦工 10 美元一年,20w 每日毫无压力,python 版,这是实盘运行着的. 换成 go 版本,估计 200w 每日无压力. 这个获取外网 IP 的功能,以前用的 ip138 的,腾讯的,阿里的,查询多了被屏蔽,实际上自己搭一个简直不要太简单. |
81 ZiShuo 2016 年 5 月 4 日 http://ip.zishuo.net/ 不谢!我自己的 IP 地址库。 |
82 9hills 2016 年 5 月 4 日 lz 你汇总下 ls 的 api ,然后选 3 个轮询即可。这样基本不会有问题。。 |
86 skydiver 2016 年 5 月 4 日 每秒 14 万次飘过 |
89 strwei 2016 年 5 月 4 日 golang +1 |
91 46Gnj0E0OBmad377 2016 年 5 月 4 日 @msg7086 idcf 最便宜的不是 500 日元吗 要是有 200 的得去看看了 |
92 zhigang1992 2016 年 5 月 4 日 |
93 msg7086 2016 年 5 月 4 日 |
95 quix 2016 年 5 月 4 日 写个 nginx 配置就行了。。 |
97 AKI 2016 年 5 月 4 日 我的阿里云双核心 4G 内存 300qps 毫无压力。是一个 读取 mongodb 的服务。 |
98 realpg PRO 这点 QPS ,最低配腾讯云阿里云机器轻松搞定。 golang 写个 webserver ,静态编译,直接返回文本,单请求执行时间微秒级,最低配腾讯云阿里云这种机器轻松搞定。 一个月成本 50 块钱左右,你说有 50 个客户端,平均一个机器一块钱一个月…… |