ip hash 算法谁会?(python 或 php)

2014-02-08 21:55:37 +08:00
 feijilei
将用户的ip 过算法处理 后得到 1-10的整数中的某个数
5746 次点击
所在节点    程序员
12 条回复
dorentus
2014-02-08 22:02:00 +08:00
对十取模再加一…
Livid
2014-02-08 22:02:53 +08:00
所有的 IP 地址都是可以转化成一个整数的,在 PHP 里的话,就是 ip2long()
feijilei
2014-02-08 22:24:44 +08:00
@Livid 当用户访问时,我想根据他们的ip 判断 然后跳转到不同的网站(比如5个网站),统计一天的数据,要5的网站得到的访问是差不多的
family
2014-02-08 22:25:34 +08:00
nginx做吧
likexian
2014-02-08 22:33:50 +08:00
根据ip没办法均衡分配吧,得看访问的人的ip分布了

用dns轮询就省事了,直接加x条a记录

或者参考dns轮询,自己加个计数器
wklken
2014-02-08 23:06:56 +08:00
python用socket模块,可以直接转得到int再取模
stackpop
2014-02-08 23:08:58 +08:00
ip本身就是一个32位的无符号整数,直接模5好了。但是这样并不保证均衡。
dorentus
2014-02-08 23:26:20 +08:00
所以这明显是个 X-Y 问题么…

想要实现你后来说的,又要尽量平均分布,其实很简单,每个客户端第一次访问的时候随机选择一个分配给它,然后记下来就是了,下次它再来访问的时候分配记下来的给它。

如果你并不是严格地要按 IP 来分,那么其实不记在服务器端都可以,客户端浏览器每次访问的时候服务器随机选择一个目标,然后输出 HTTP 永久跳转给客户端,这样一般来说只要用户不去折腾浏览器缓存,下次访问的时候浏览器就会直接去之前选中的目标网址了。(这么做似乎有滥用之嫌…不过话说回来,你的这个需求是怎么来的,怎么这么奇怪…)
otakustay
2014-02-09 02:28:04 +08:00
@dorentus 永久跳转可能会让用户再也回不来,基本上我觉得楼主是在做小流量AB试验,这么玩可能会造成用户再也脱离不了小流量的状况,并不合适,还是在cookie里加一个标记更好,随时可以清除
yaroot
2014-02-09 07:24:39 +08:00
consistent hashing
workaholic
2014-02-09 09:25:12 +08:00
按照你的意思,各个节点负载要相同,需要用到负载均衡算法: 轮询(Round Robin, RR),你可以查一下具体实现,比较简单
mengzhuo
2014-02-10 09:18:29 +08:00
python

struct.unpack("!L", socket.inet_aton(ip))[0] % (自个模吧)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/99403

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX