一致性哈希
原理
一致性哈希算法将整个哈希值空间映射成一个虚拟的圆环,整个哈希空间的取值范围为0-2^32-1。整个空间按顺时针方向组织。0-2^32-1在零点中方向重合。接下来使用如下算法对服务请求进行映射,将服务请求使用哈希算法算出对应的hash值,然后根据hash值的位置沿圆环顺时针查找,第一台遇到的服务器就是所对应的处理请求服务器。
一致性哈希算法将整个哈希值空间映射成一个虚拟的圆环,整个哈希空间的取值范围为0-2^32-1。整个空间按顺时针方向组织。0-2^32-1在零点中方向重合。接下来使用如下算法对服务请求进行映射,将服务请求使用哈希算法算出对应的hash值,然后根据hash值的位置沿圆环顺时针查找,第一台遇到的服务器就是所对应的处理请求服务器。
1 | tcpdump -n -S -i eth0 host www.baidu.com and tcp port 80 |
SYN:发起一个新连接
FIN:释放一个连接
ACK:确认序号有效
PSH:接收方应该尽快将这个报文交给应用层
RST:重置连接
URG:紧急指针(urgent pointer)有效
float double之类的只存储整数是准确的,浮点数的小数部分实际上是(1 or 0) * 2^(-1) + (1 or 0) * 2^(-2) + (1 or 0) * 2^(-2)...这样实现的
比如
0.3 * 2 = 0.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 1.2
...
这样0.3就永远不能精确的存储
有时候经常要在golang用到byte与string的转换,然而在golang中通过string()和[]byte()的转换是需要copy的,通过benchmark就可以看出这样的转换存在一定的开销对gc也是不友好的。
1 | func Benchmark_str2bytesByNormal(b *testing.B) { |
1 | goos: windows |
可以看到上面的benchmark一个op的耗时为7.38ns