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