一致性哈希算法设计

一致性哈希算法设计思路:

运行结果:

[email protected]:/data/code/cwork/chash:./chash
----vsrvname = 192.168.100.1:3306-vm1,hkey =126515------
----vsrvname = 192.168.100.1:3306-vm2,hkey =77752------
----vsrvname = 192.168.100.1:3306-vm3,hkey =47584------
----vsrvname = 192.168.200.2:3214-vm1,hkey =32166------
----vsrvname = 192.168.200.2:3214-vm2,hkey =79176------
----vsrvname = 192.168.200.2:3214-vm3,hkey =115888------
----vsrvname = 192.168.300.15:8745-vm1,hkey =30184------
----vsrvname = 192.168.300.15:8745-vm2,hkey =26975------
----vsrvname = 192.168.300.15:8745-vm3,hkey =97282------
***************************************
ltmgr->count = 3,ltmgr->head = 0x7dd380
cur = 0x7dd380,srvname = 192.168.300.15:8745,next = 0x7dd200
cur = 0x7dd200,srvname = 192.168.200.2:3214,next = 0x7dd050
cur = 0x7dd050,srvname = 192.168.100.1:3306,next = (nil)
exec = 0
***************************************
ltmgr->count = 2,ltmgr->head = 0x7dd380
cur = 0x7dd380,srvname = 192.168.300.15:8745,next = 0x7dd200
cur = 0x7dd200,srvname = 192.168.200.2:3214,next = (nil)
trmgr->root = 0x7dd120,count = 9,min=26975,max=126515
---------------------print init  tree-------------------------
 77752[192.168.100.1:3306-vm2],height =3  :visitor =0
  32166[192.168.200.2:3214-vm1],height =2  :visitor =0
   30184[192.168.300.15:8745-vm1],height =1  :visitor =0
    26975[192.168.300.15:8745-vm2],height =0  :visitor =0
   47584[192.168.100.1:3306-vm3],height =0  :visitor =0
  115888[192.168.200.2:3214-vm3],height =2  :visitor =0
   79176[192.168.200.2:3214-vm2],height =1  :visitor =0
    97282[192.168.300.15:8745-vm3],height =0  :visitor =0
   126515[192.168.100.1:3306-vm1],height =0  :visitor =0

--------------------------------------begin request------------------------
  request : 202.4.104.155:8080(key =41901) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 183.60.98.67:80(key =71097) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 190.13.131.165:3128(key =45223) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 182.140.132.108:8888(key =56902) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 114.32.219.221:8088(key =27008) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 210.73.112.100:80(key =27011) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 88.132.82.236:8088(key =28968) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 113.105.224.78:80(key =49518) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 210.14.152.91:8080(key =83142) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 120.203.214.187:80(key =30953) --------->  192.168.300.15:8745-vm1(key = 30184)
  request : 111.13.2.138:80(key =85311) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 64.31.22.131:7808(key =85604) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 111.11.228.9:80(key =96613) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 210.75.14.157:80(key =50488) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 117.156.8.72:80(key =27003) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 222.216.109.114:3128(key =56204) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 210.75.14.158:80(key =29017) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 111.11.152.135:80(key =114011) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 199.200.120.37:7808(key =126500) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 183.224.1.30:80(key =54731) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 188.225.35.49:3128(key =66637) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 91.232.12.90:3128(key =27018) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 103.244.80.40:80(key =126287) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 111.13.2.137:80(key =27010) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 117.139.39.190:8123(key =27012) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 41.231.53.40:3128(key =84711) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 212.156.157.86:8080(key =27018) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 220.178.101.170:80(key =28227) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 115.28.46.123:808(key =118845) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 210.14.152.92:8080(key =112153) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 92.51.245.87:3128(key =107047) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 60.206.239.195:8118(key =118807) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 111.13.109.52:80(key =54502) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 149.255.255.242:80(key =126466) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 111.1.44.24:80(key =114168) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 97.77.104.22:80(key =62175) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 113.105.93.79:80(key =55943) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 115.29.11.46:3128(key =55234) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 163.23.70.129:3128(key =56098) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 111.13.2.139:80(key =123263) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 111.11.184.85:80(key =26996) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 202.108.50.74:80(key =69758) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 218.108.168.70:80(key =42775) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 114.112.192.195:3128(key =125309) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 218.108.168.69:80(key =86087) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 111.13.2.140:80(key =95859) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 174.70.0.100:8080(key =107478) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 202.4.104.157:8080(key =74480) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 117.79.64.84:80(key =26987) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 123.162.191.84:9999(key =27002) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 142.0.42.8:443(key =113451) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 125.39.66.75:80(key =119530) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 121.40.162.173:8088(key =62648) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 122.155.165.128:3128(key =27016) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 222.246.232.55:80(key =45473) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 42.62.61.245:80(key =26985) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 140.206.86.68:8080(key =73994) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 113.57.230.49:81(key =65416) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 123.177.20.220:80(key =65515) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 113.57.252.104:80(key =98323) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 175.180.199.11:8088(key =52964) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 60.55.43.74:80(key =26988) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 211.71.30.97:3128(key =27001) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 200.46.94.202:3128(key =52181) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 171.38.221.240:8088(key =55907) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 111.13.2.142:80(key =27016) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 218.108.232.99:80(key =124892) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 111.205.122.222:80(key =103561) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 113.107.57.76:80(key =27002) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 223.68.6.10:8000(key =31462) --------->  192.168.300.15:8745-vm1(key = 30184)
  request : 124.158.9.2:3128(key =57772) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 68.68.97.2:3128(key =60627) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 218.90.174.167:3128(key =125095) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 128.199.225.176:3128(key =90202) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 218.201.38.49:80(key =26997) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 80.250.201.243:8080(key =96893) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 128.199.223.216:3128(key =87096) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 140.207.223.101:80(key =93234) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 118.69.34.208:3128(key =27011) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 82.77.66.122:3130(key =28016) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 202.106.169.228:8080(key =109813) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 219.143.208.193:80(key =73613) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 14.18.16.71:80(key =83111) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 218.207.172.235:80(key =99496) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 218.187.244.109:8088(key =91067) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 111.11.184.80:80(key =52496) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 218.4.236.117:80(key =85129) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 211.162.79.66:80(key =107156) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 111.13.2.136:80(key =95732) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 5.32.67.139:8080(key =69112) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 118.186.239.243:80(key =126503) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 120.202.249.233:80(key =82228) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 61.155.169.11:808(key =31645) --------->  192.168.300.15:8745-vm1(key = 30184)
  request : 202.105.247.122:9999(key =92723) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 112.5.240.82:80(key =122794) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 120.203.214.147:84(key =126497) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 61.19.30.198:8080(key =126294) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 121.40.130.208:8080(key =75477) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 111.11.184.83:80(key =97039) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 202.4.116.210:8089(key =26992) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 60.221.252.107:80(key =27005) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 61.50.245.163:8000(key =48793) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 200.166.97.117:3128(key =58126) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 101.64.236.206:18000(key =83878) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 185.49.15.25:7808(key =43227) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 106.1.211.62:8088(key =124067) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 116.236.250.175:1920(key =116817) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 59.151.103.15:80(key =27008) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 202.169.53.14:8010(key =72839) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 111.13.87.173:8081(key =27005) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 58.248.22.41:808(key =62003) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 183.207.228.7:80(key =26987) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 111.11.184.108:80(key =26999) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 188.225.36.244:3128(key =26993) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 117.21.192.10:80(key =60220) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 111.13.2.141:80(key =79495) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 218.65.132.38:80(key =27010) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 180.153.32.11:8080(key =65107) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 124.248.205.7:8128(key =92634) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 218.207.208.55:8080(key =121097) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 111.13.109.54:80(key =105523) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 58.253.238.243:80(key =27005) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 106.37.177.251:3128(key =26977) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 111.13.109.53:80(key =26997) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 58.56.124.192:80(key =26984) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 183.62.172.50:9999(key =48397) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 218.5.74.174:80(key =33760) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 218.207.172.236:80(key =95500) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 121.14.138.50:17210(key =26995) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 168.213.3.103:80(key =82940) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 124.95.163.102:80(key =26993) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 111.13.2.143:80(key =63887) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 113.105.224.77:80(key =121579) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 180.201.15.121:8088(key =81918) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 125.39.66.76:80(key =27018) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 218.28.96.39:3128(key =97874) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 111.11.184.36:80(key =60563) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 183.207.229.10:81(key =34926) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 202.4.104.155:8080(key =41901) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 193.10.98.17:80(key =72196) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 110.13.136.195:3128(key =126509) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 192.140.132.108:8888(key =44490) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 194.32.116.216:8088(key =50265) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 110.73.192.100:80(key =58924) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 88.132.82.236:8088(key =28968) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 193.105.224.78:80(key =126285) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 110.14.152.96:8080(key =99505) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 120.203.114.197:80(key =43578) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 196.13.2.138:80(key =122323) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 14.36.22.136:7808(key =26987) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 196.19.228.9:80(key =92486) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 110.75.14.157:80(key =55966) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 197.156.8.72:80(key =101915) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 222.119.109.194:3128(key =27018) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 110.75.14.158:80(key =90500) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 196.19.152.135:80(key =52644) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 169.200.120.37:7808(key =27005) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 193.224.6.30:80(key =47651) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 198.225.35.49:3128(key =82451) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 96.232.12.90:3128(key =79539) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 103.244.80.40:80(key =126287) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 196.13.2.137:80(key =58059) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 197.139.39.110:8123(key =97221) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 46.236.53.40:3128(key =45310) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 112.156.157.86:8080(key =26999) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 220.178.106.170:80(key =29087) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 195.28.46.123:808(key =87039) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 110.14.152.92:8080(key =81512) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 92.56.245.87:3128(key =101775) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 10.206.239.115:8119(key =71293) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 196.13.109.52:80(key =62131) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 149.255.255.242:80(key =126494) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 196.6.44.24:80(key =102396) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 97.77.104.22:80(key =62175) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 193.105.93.79:80(key =118470) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 195.29.19.46:3128(key =112524) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 193.23.70.129:3128(key =91313) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 196.13.2.139:80(key =107985) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 196.19.194.85:80(key =27809) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 202.108.50.74:80(key =69758) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 119.108.119.70:80(key =100076) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 194.192.112.115:3128(key =26994) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 119.108.119.16:80(key =126481) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 196.13.2.140:80(key =30557) --------->  192.168.300.15:8745-vm1(key = 30184)
  request : 174.70.0.100:8080(key =107478) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 202.4.104.157:8080(key =74480) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 197.79.14.84:80(key =89474) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 123.192.119.84:9999(key =68548) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 142.0.42.8:443(key =113451) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 125.39.19.75:80(key =27012) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 116.40.192.173:8088(key =46988) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 122.155.195.128:3128(key =39209) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 222.246.232.55:80(key =45473) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 42.12.19.245:80(key =33355) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 140.206.86.19:8080(key =35523) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 193.57.230.49:86(key =96215) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 123.177.20.220:80(key =65515) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 193.57.252.104:80(key =27024) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 175.190.169.19:8088(key =119696) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 10.55.43.74:80(key =45363) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 119.76.30.97:3128(key =118665) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 200.46.94.202:3128(key =52181) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 176.38.216.240:8088(key =27000) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 196.13.2.142:80(key =26990) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 119.108.232.99:80(key =45797) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 196.205.122.222:80(key =117321) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 193.107.57.76:80(key =48223) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 223.19.6.10:8000(key =26996) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 124.158.9.2:3128(key =57772) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 19.19.97.2:3128(key =56350) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 119.90.174.197:3128(key =104030) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 128.169.225.176:3128(key =59780) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 119.206.38.49:80(key =65249) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 80.250.206.243:8080(key =26989) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 128.169.223.119:3128(key =27002) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 140.207.223.106:80(key =118890) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 119.16.34.208:3128(key =87989) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 82.77.19.122:3130(key =57087) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 202.106.116.228:8080(key =50004) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 116.143.208.113:80(key =44730) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 14.19.19.76:80(key =27017) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 119.207.172.235:80(key =126484) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 119.197.244.109:8088(key =121318) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 196.19.194.80:80(key =101276) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 119.4.236.197:80(key =26981) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 119.192.79.19:80(key =116762) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 196.13.2.136:80(key =40710) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 5.32.17.139:8080(key =96502) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 119.196.239.243:80(key =103775) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 120.202.249.233:80(key =82228) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 19.155.116.19:808(key =124438) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 202.105.247.122:9999(key =92723) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 192.5.240.82:80(key =67014) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 120.203.114.147:84(key =48605) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 19.16.30.119:8080(key =26999) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 116.40.130.208:8080(key =107096) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 196.19.194.83:80(key =26988) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 202.4.196.110:8089(key =97832) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 10.216.252.107:80(key =121474) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 19.50.245.193:8000(key =34666) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 200.196.97.197:3128(key =76384) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 106.14.236.206:19000(key =47931) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 195.49.15.25:7808(key =95179) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 106.6.119.12:8088(key =89084) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 196.236.250.175:1120(key =26996) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 59.156.103.15:80(key =126469) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 202.116.53.14:8010(key =89293) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 196.13.87.173:8086(key =27007) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 58.248.22.46:808(key =41743) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 193.207.228.7:80(key =90701) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 196.19.194.108:80(key =32061) --------->  192.168.300.15:8745-vm1(key = 30184)
  request : 198.225.36.244:3128(key =26981) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 197.16.112.10:80(key =27000) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 196.13.2.146:80(key =27009) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 119.15.132.38:80(key =111274) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 190.153.32.19:8080(key =64555) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 124.248.205.7:8128(key =92634) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 119.207.208.55:8080(key =61668) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 196.13.109.54:80(key =81156) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 58.253.238.243:80(key =27003) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 106.37.177.256:3128(key =104005) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 196.13.109.53:80(key =91271) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 58.56.124.112:80(key =56419) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 193.12.172.50:9999(key =74272) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 119.5.74.174:80(key =49609) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 119.207.172.236:80(key =126479) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 116.14.138.50:17110(key =122699) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 119.113.3.103:80(key =26981) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 124.95.193.102:80(key =99154) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 196.13.2.143:80(key =98618) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 193.105.224.77:80(key =53150) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 190.206.15.116:8088(key =107650) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 125.39.19.76:80(key =100328) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 119.28.96.39:3128(key =27021) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 196.19.194.36:80(key =34939) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 193.207.229.10:86(key =125384) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 112.4.104.155:6767(key =99674) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 183.10.98.17:67(key =64832) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 147.13.136.185:3128(key =109533) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 182.140.132.108:4646(key =118991) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 184.32.114.214:6746(key =31179) --------->  192.168.300.15:8745-vm1(key = 30184)
  request : 147.73.182.100:67(key =98244) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 46.132.82.236:6746(key =50283) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 183.105.134.78:67(key =81259) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 147.14.152.96:6767(key =39595) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 111.113.114.187:67(key =39443) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 186.13.2.138:67(key =114448) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 14.36.13.136:7678(key =57653) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 186.18.138.9:67(key =63636) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 147.75.14.157:67(key =126486) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 187.156.8.72:67(key =109174) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 132.118.109.184:3128(key =102331) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 147.75.14.158:67(key =63323) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 186.18.152.135:67(key =26988) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 149.110.111.37:7678(key =126508) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 183.134.6.30:67(key =98919) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 188.135.35.49:3128(key =27000) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 96.232.12.90:3128(key =79539) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 103.244.67.40:67(key =78712) --------->  192.168.100.1:3306-vm2(key = 77752)
  request : 186.13.2.137:67(key =71705) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 187.139.39.147:8123(key =29598) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 46.236.53.40:3128(key =45310) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 112.156.157.86:6767(key =77475) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 211.178.106.170:67(key =114713) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 185.28.46.123:678(key =27020) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 147.14.152.92:6767(key =37542) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 92.56.245.87:3128(key =101775) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 10.114.239.115:8118(key =111206) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 186.13.109.52:67(key =75117) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 149.255.255.242:67(key =27008) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 186.6.44.24:67(key =52287) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 97.77.104.13:67(key =75659) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 183.105.93.79:67(key =118668) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 185.29.18.46:3128(key =126058) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 183.23.70.129:3128(key =126470) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 186.13.2.139:67(key =26990) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 186.18.184.85:67(key =67417) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 112.108.50.74:67(key =89374) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 118.108.118.70:67(key =26992) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 184.182.112.115:3128(key =115244) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 118.108.118.14:67(key =99066) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 186.13.2.140:67(key =27009) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 174.70.0.100:6767(key =47843) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 112.4.104.157:6767(key =26989) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 187.79.14.84:67(key =29575) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 123.182.118.84:9999(key =27018) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 142.0.42.8:443(key =113451) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 125.39.18.75:67(key =48189) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 114.40.182.173:6746(key =36352) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 113.155.185.128:3128(key =26976) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 132.246.232.55:67(key =126477) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 42.12.18.245:67(key =42280) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 140.114.86.18:6767(key =26983) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 183.57.230.49:86(key =40090) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 123.177.11.211:67(key =27001) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 183.57.252.104:67(key =27003) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 175.180.149.18:6746(key =32290) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 10.55.43.74:67(key =94567) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 118.76.30.97:3128(key =87585) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 110.46.94.112:3128(key =93877) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 176.38.214.240:6746(key =113910) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 186.13.2.142:67(key =62268) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 118.108.232.99:67(key =83997) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 186.115.113.132:67(key =81686) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 183.107.57.76:67(key =97081) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 133.18.6.10:6700(key =47113) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 124.158.9.2:3128(key =57772) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 18.18.97.2:3128(key =107467) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 118.90.174.187:3128(key =95668) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 128.149.135.176:3128(key =50534) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 118.114.38.49:67(key =126477) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 67.250.114.243:6767(key =27010) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 128.149.133.118:3128(key =121573) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 140.117.133.106:67(key =109228) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 118.14.34.118:3128(key =57619) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 82.77.18.113:3130(key =45692) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 112.106.114.138:6767(key =61587) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 114.143.118.113:67(key =32719) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 14.18.18.76:67(key =52185) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 118.117.172.235:67(key =68169) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 118.187.244.109:6746(key =57146) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 186.18.184.67:67(key =50444) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 118.4.236.187:67(key =115845) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 118.182.79.18:67(key =48460) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 186.13.2.136:67(key =36440) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 5.32.17.139:6767(key =45639) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 118.186.239.243:67(key =26979) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 111.112.249.233:67(key =107856) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 18.155.114.18:678(key =26976) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 112.105.247.113:9999(key =75518) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 182.5.240.82:67(key =26980) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 111.113.114.147:84(key =28567) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 18.14.30.118:6767(key =79532) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 114.40.130.118:6767(key =27024) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 186.18.184.83:67(key =27008) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 112.4.186.147:6789(key =100525) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 10.214.252.107:67(key =26985) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 18.50.245.183:6700(key =106367) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 110.186.97.187:3128(key =62441) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 106.14.236.114:18000(key =78466) --------->  192.168.100.1:3306-vm2(key = 77752)
  request : 185.49.15.25:7678(key =126488) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 106.6.118.12:6746(key =126497) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 186.236.250.175:1111(key =27426) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 59.156.103.15:67(key =33539) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 112.114.53.14:6710(key =87861) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 186.13.87.173:6786(key =35142) --------->  192.168.200.2:3214-vm1(key = 32166)
  request : 58.248.13.46:678(key =27050) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 183.117.138.7:67(key =60815) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 186.18.184.108:67(key =56268) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 188.135.36.244:3128(key =71604) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 187.14.112.10:67(key =56267) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 186.13.2.146:67(key =106922) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 118.15.132.38:67(key =82575) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 180.153.32.18:6767(key =27015) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 124.248.115.7:8128(key =26988) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 118.117.118.55:6767(key =27002) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 186.13.109.54:67(key =109698) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 58.253.238.243:67(key =79385) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 106.37.177.256:3128(key =104005) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 186.13.109.53:67(key =89906) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 58.56.124.112:67(key =108766) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 183.12.172.50:9999(key =101463) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 118.5.74.174:67(key =62315) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 118.117.172.236:67(key =121994) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 114.14.138.50:17147(key =106694) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 118.113.3.103:67(key =53514) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 124.95.183.102:67(key =92672) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 186.13.2.143:67(key =29156) --------->  192.168.300.15:8745-vm2(key = 26975)
  request : 183.105.134.77:67(key =95363) --------->  192.168.200.2:3214-vm2(key = 79176)
  request : 180.114.15.114:6746(key =59729) --------->  192.168.100.1:3306-vm3(key = 47584)
  request : 125.39.18.76:67(key =77770) --------->  192.168.100.1:3306-vm2(key = 77752)
  request : 118.28.96.39:3128(key =122495) --------->  192.168.200.2:3214-vm3(key = 115888)
  request : 186.18.184.36:67(key =104915) --------->  192.168.300.15:8745-vm3(key = 97282)
  request : 183.117.139.10:86(key =93281) --------->  192.168.200.2:3214-vm2(key = 79176)

          <----------request  414-------------------->
---------------------print visitor tree-------------------------
77752[192.168.100.1:3306-vm2]  -> visitor =3
 32166[192.168.200.2:3214-vm1]  -> visitor =38
  30184[192.168.300.15:8745-vm1]  -> visitor =6
   26975[192.168.300.15:8745-vm2]  -> visitor =93
  47584[192.168.100.1:3306-vm3]  -> visitor =100
 115888[192.168.200.2:3214-vm3]  -> visitor =51
  79176[192.168.200.2:3214-vm2]  -> visitor =63
   97282[192.168.300.15:8745-vm3]  -> visitor =60
------------------------------print all tree------------------------------
 77752[192.168.100.1:3306-vm2],height =3  :visitor =3
  32166[192.168.200.2:3214-vm1],height =2  :visitor =38
   30184[192.168.300.15:8745-vm1],height =1  :visitor =6
    26975[192.168.300.15:8745-vm2],height =0  :visitor =93
   47584[192.168.100.1:3306-vm3],height =0  :visitor =100
  115888[192.168.200.2:3214-vm3],height =2  :visitor =51
   79176[192.168.200.2:3214-vm2],height =1  :visitor =63
    97282[192.168.300.15:8745-vm3],height =0  :visitor =60
   126515[192.168.100.1:3306-vm1],height =0  :visitor =0

----------------------------mgrFree------------------------------

chash.h

/*************************************************************************
        > File Name: chash.h
        > Author: zhoulin
        > Mail: [email protected]
        > Created Time: Thu Apr 28 09:50:44 2016
 ************************************************************************/

#ifndef _CHASH_H
#include <stdint.h>
#define vsize  64
#define nsize 32
#define vstr "-vm"
/*
 * 定义真实机器的列表,真实机器对应一个或者多个虚拟节点
 * 它存在的意义有如下2点:
 *   1.初始化虚拟节点的vsrvname。
 *   2.如果有真实服务器宕机或者故障,需要需要剔除,分剔除虚拟节点和真实机器,重新映射哈希关系。
 */
 typedef struct _listNode
 {
     char srvname[nsize];//include server ip and server port
     struct _listNode *next;
 }listNode;
 typedef struct _listMgr
 {
     unsigned int count;//the number if list
     struct _listNode *head;
 }listMgr;
/*
 *定义一个二叉树节点结构
 *该节点表示虚拟节点,二叉树的操作时间复杂度为O(logn)
 * 1.对于平衡二叉树的最大节点和最小节点的时间复杂度为O(1)
 * 2.获取节点个数和
 */
typedef struct _treeNode
{
    unsigned int hkey;//virtual treeNode hash key
    char vsrvname[vsize];//virtual treeNode servername
    unsigned int visitor;//how many server visitor it
    unsigned int height;//cur treeNode height
    struct _treeNode *lchild;
    struct _treeNode *rchild;
}treeNode;
/*
 *定义一个二叉树管理节点
 */
typedef struct _treeMgr
{
    struct _treeNode *root;//point to virtual treeNode root
    unsigned int count;//the number of all node in tree
    struct _treeNode *tmin;//min hash value treeNode
    struct _treeNode *tmax;//max hash value treeNode
}treeMgr;
typedef struct _Mgr
{
    unsigned int vmcount; //virtual node count
    listMgr *ltmgr;
    treeMgr *trmgr;
}Mgr;
//mgr operation
Mgr *mgrInit(unsigned int vmcount);
Mgr *mgrAdd(char *srvname,Mgr *mgr);
Mgr *mgrDel(char *srvname,Mgr *mgr);
void mgrFree(Mgr *mgr);
//listNode operayion
int listNodeAdd(char *srvname,Mgr *mgr);
int listNodeDel(char *srvname,Mgr *mgr);
//tree operation
treeNode *treeNodeQuery(unsigned int key,Mgr *mgr);
int treeNodeAdd(char *srvname,Mgr *mgr);
treeNode *treeNodeMin(unsigned int key,treeMgr *mgr);
treeNode *treeNodeMax(unsigned int key,treeMgr *mgr);
//-----------------static method-------------------------
//murmurhash2算法
static unsigned int mur2hash2(const void *key,int len);
static treeNode *_treeNodeMin(treeNode *p);
static treeNode *_treeNodeMax(treeNode *p);
static treeNode *_treeNodeDel(treeNode *p,int hkey);
static int mMax(int num1,int num2);
static int treeNodeHeight(treeNode *p);
static treeNode *sRoteL(treeNode *p);
static treeNode *sRoteR(treeNode *p);
static treeNode *dRoteL(treeNode *p);
static treeNode *dRoteR(treeNode *p);
static void _treeNodePrt(treeNode *p,int n);
static void _treeNodeVPrt(treeNode *p,int n);
static treeNode *_treeNodeAdd(unsigned int hkey,char *vsrvname,treeNode *p,treeMgr *trmgr);
static void prtltMgr(Mgr *mgr);
static treeNode *_treeNodeQuery(unsigned int hkey,treeNode *p);
static void readIp(const char *path,Mgr *mgr);
static void _treeNodeFree(treeNode *p);
#define _CHASH_H
#endif

chash.c

/*************************************************************************
        > File Name: chash.c
        > Author: zhoulin
        > Mail: [email protected]
        > Created Time: Thu Apr 28 09:51:38 2016
 ************************************************************************/

#include "chash.h"
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define max  1024
static unsigned int mur2hash2(const void *key,int len)
{
    uint32_t seed = 5381;
    const uint32_t m = 0x5bd1e995;
    const int r = 24;

    uint32_t h = seed ^ len;
    const unsigned char *data = (const unsigned char *)key;

    while(len >= 4)
    {
        uint32_t k = *(uint32_t *)data;
        k *= m;
        k ^= k >> r;
        k *= m;
        h ^= k;
        data += 4;
        len -= 4;
    }
    switch(len)
    {
        case 3: h ^= data[2] << 16;
        case 2: h ^= data[1] << 8;
        case 1: h ^= data[0];h *= m;
    };
    h ^= h >> 13;
    h *= m;
    h ^= h >> 15;
}
Mgr *mgrInit(unsigned int vmcount)
{
    Mgr *mgr = (Mgr *)malloc(sizeof(*mgr));
    if(mgr == NULL)
        return NULL;
    mgr->vmcount = vmcount;
    mgr->ltmgr =NULL;
    mgr->trmgr = NULL;
    return mgr;
}
int listNodeAdd(char *srvname,Mgr *mgr)
{
    if((srvname == NULL || strlen(srvname) <= 0) && mgr == NULL)
        return -1;
    listMgr *ltmgr = mgr->ltmgr;
    if(ltmgr == NULL)
    {
        ltmgr = (listMgr *)malloc(sizeof(*ltmgr));
        ltmgr->count = 0;
        ltmgr->head = NULL;
        mgr->ltmgr = ltmgr;
    }
    listNode *cur = (listNode *)malloc(sizeof(*cur));
    if(cur == NULL)
        return -1;
    if(ltmgr->head == NULL){
        ltmgr->head = cur;
    }else
    {
        cur->next = ltmgr->head;
        ltmgr->head = cur;
    }
    strncpy((char *)ltmgr->head->srvname,srvname,strlen(srvname));
    ltmgr->count++;
    return 0;
}
int listNodeDel(char *srvname,Mgr *mgr)
{
    if((srvname == NULL || strlen(srvname) <= 0) && mgr == NULL)
        return -1;
    listMgr *ltmgr = mgr->ltmgr;
    listNode *cur = ltmgr->head;
    listNode *fprev = NULL;
    listNode *fcur = NULL;
    while(cur != NULL)
    {
        if(strncmp(cur->srvname,srvname,strlen(srvname)) == 0)
        {
            fcur = cur;
            break;
        }else
        {
            fprev = cur;
        }
        cur = cur->next;
    }
    if(fcur == NULL)
    {
        return -1;
    }
    if(fcur == ltmgr->head)
    {
        ltmgr->head = fcur->next;
    }else
    {
        fprev->next = fcur->next;
    }
    free(cur);
    cur = NULL;
    ltmgr->count--;
    return 0;
}
Mgr *mgrAdd(char *srvname,Mgr *mgr)
{
    listMgr *ltmgr = mgr->ltmgr;
    listNodeAdd(srvname,mgr);
    treeNodeAdd(srvname,mgr);
    return mgr;
}
static int mMax(int num1,int num2)
{
    return ((num1 > num2)? num1 :num2);
}
//get treeNode height
static int treeNodeHeight(treeNode *p)
{
    if(p != NULL){
        return p->height;
    }
    return -1;
}
// signed left rotation
static treeNode *sRoteL(treeNode *p)
{
    treeNode *k1;
    k1 = p->lchild;
    p->lchild = k1->rchild;
    k1->rchild = p;
    p->height = mMax(treeNodeHeight(p->lchild),treeNodeHeight(p->rchild)) + 1;
    k1->height = mMax(treeNodeHeight(k1->lchild),p->height) + 1;
    return k1;
}
//single righet rotation
static treeNode *sRoteR(treeNode *p)
{
    treeNode *k1;
    k1 = p->rchild;
    p->rchild = k1->lchild;
    k1->lchild =p;
    p->height = mMax(treeNodeHeight(p->lchild),treeNodeHeight(p->rchild)) + 1;
    k1->height = mMax(treeNodeHeight(k1->rchild),p->height) + 1;
    return k1;
}
static treeNode *dRoteL(treeNode *p)
{
    p->lchild = sRoteR(p->lchild);
    return sRoteL(p);
}
static treeNode *dRoteR(treeNode *p)
{
    p->rchild = sRoteL(p->rchild);
    return sRoteR(p);
}
//先序遍历
static void _treeNodePrt(treeNode *p,int n)
{
    if(p != NULL)
    {
        int i = 0;
        int nx = n+1;
        for(;i < nx;i++)
        {
            fprintf(stdout," ");
        }
        fprintf(stdout,"%d[%s],height =%d  :visitor =%d\n",p->hkey,p->vsrvname,p->height,p->visitor);
        _treeNodePrt(p->lchild,n+1);
        _treeNodePrt(p->rchild,n+1);
    }
}
//访问有访问量的节点
static void _treeNodeVPrt(treeNode *p,int n)
{
    if(p != NULL)
    {
        if(p->visitor > 0)
        {
            int i = 0;
            int nx = n;
            for(;i < nx;i++)
            {
                fprintf(stdout," ");
            }
            fprintf(stdout,"%d[%s]  -> visitor =%d\n",p->hkey,p->vsrvname,p->visitor);
        }
        _treeNodeVPrt(p->lchild,n+1);
        _treeNodeVPrt(p->rchild,n+1);
    }
}
static treeNode *_treeNodeAdd(unsigned int hkey,char *vsrvname,treeNode *p,treeMgr *trmgr)
{
    if(p == NULL){
        p = (treeNode *)malloc(sizeof(*p));
        p->hkey = hkey;
        p->height = 0;
        if(trmgr->count > 0 && hkey <= trmgr->tmin->hkey)
        {
            trmgr->tmin= p;
        }
        if(trmgr->count > 0 && hkey > trmgr->tmax->hkey)
        {
            trmgr->tmax = p;
        }
        strncpy(p->vsrvname,vsrvname,strlen(vsrvname));
        if(trmgr->count == 0){
            trmgr->tmin = trmgr->tmax = p;
        }
        p->visitor = 0;
        p->lchild = p->rchild = NULL;
        trmgr->count++;
    }
    else if(hkey < p->hkey)
    {
        p->lchild = _treeNodeAdd(hkey,vsrvname,p->lchild,trmgr);
        if(treeNodeHeight(p->lchild) - treeNodeHeight(p->rchild) == 2)
        {
            if(hkey < p->lchild->hkey)
                p = sRoteL(p);
            else
                p = dRoteL(p);
        }
    }
    else if(hkey > p->hkey)
    {
        p->rchild = _treeNodeAdd(hkey,vsrvname,p->rchild,trmgr);
        if(treeNodeHeight(p->rchild) - treeNodeHeight(p->lchild) == 2)
        {
            if(hkey > p->rchild->hkey)
                p = sRoteR(p);
            else
                p = dRoteR(p);
        }
    }
    p->height = mMax(treeNodeHeight(p->lchild),treeNodeHeight(p->rchild))+1;
    return p;
}
int treeNodeAdd(char *srvname,Mgr *mgr)
{
    char vsrvname[vsize];
    memset(vsrvname,'\0',nsize);
    if(mgr == NULL)
        return -1;
    if(mgr->trmgr == NULL)
    {
        treeMgr *trmgr = (treeMgr *)malloc(sizeof(*trmgr));
        trmgr->count = 0;
        trmgr->tmin = NULL;
        trmgr->tmax = NULL;
        trmgr->root = NULL;
        mgr->trmgr = trmgr;
    }
    treeMgr *trmgr = mgr->trmgr;
    int vcount = mgr->vmcount,i,j = 0;
    treeNode *p = trmgr->root;
    for(i = 1;i <= vcount;i++)
    {
        treeNode *p = trmgr->root;
        treeNode *cur = NULL;
        strncpy(vsrvname,srvname,strlen(srvname));
        strncpy(vsrvname+strlen(vsrvname),vstr,strlen(vstr));
        sprintf(vsrvname+strlen(vsrvname),"%d",i);
        unsigned int hkey = mur2hash2(vsrvname,strlen(vsrvname));
        fprintf(stdout,"----vsrvname = %s,hkey =%d------\n",vsrvname,hkey);
        if((trmgr->root = _treeNodeAdd(hkey,vsrvname,p,mgr->trmgr)) != NULL)
        {
            j++;
        }
        memset(vsrvname,'\0',vsize);
    }
    return (vcount == j?0:-1);
}
static void prtltMgr(Mgr *mgr)
{
    fprintf(stdout,"***************************************\n");
    listNode *cur = mgr->ltmgr->head;
    if(mgr->ltmgr != NULL)
        fprintf(stdout,"ltmgr->count = %d,ltmgr->head = %p\n",mgr->ltmgr->count,mgr->ltmgr->head);
    while(cur != NULL)
    {
        fprintf(stdout,"cur = %p,srvname = %s,next = %p\n",cur,cur->srvname,cur->next);
        cur = cur->next;
    }
}
static treeNode *_treeNodeQuery(unsigned int hkey,treeNode *p)
{
    treeNode *cur = p;
    if(cur == NULL){
        return NULL;
    }
    if(hkey <= cur->hkey)
    {
        return _treeNodeQuery(hkey,cur->lchild);
    }
    else
    {
        treeNode *tmp = _treeNodeQuery(hkey,cur->rchild);
        if(tmp == NULL)
        {
            cur->visitor++;
            return cur;
        }else
        {
            return tmp;
        }
    }
}
treeNode *treeNodeQuery(unsigned int key,Mgr *mgr)
{
    treeNode *root = mgr->trmgr->root;
    treeNode *rs = _treeNodeQuery(key,root);
    return rs;
}
static treeNode *_treeNodeMin(treeNode *p)
{
    if(p == NULL)
        return NULL;
    unsigned int hkey = p->hkey;
    treeNode *cur = p;
    while(cur != NULL)
    {
        if(hkey > cur->hkey)
        {
            hkey = cur->hkey;
            cur = cur->lchild;
        }
        else
            cur = cur->lchild;
    }
    return cur;
}
static treeNode *_treeNodeMax(treeNode *p)
{
    if(p == NULL)
        return NULL;
    unsigned int hkey = p->hkey;
    treeNode *cur = p;
    while(cur != NULL)
    {
        if(hkey < p->hkey)
        {
            hkey = p->hkey;
            cur = cur->rchild;
        }else{
            cur = cur->rchild;
        }
    }
    return cur;
}
static void readIp(const char *path,Mgr *mgr)
{
    FILE *fp = fopen(path,"r");
    if(fp == NULL)
        return;
    char buf[64];
    int  count = 0;
    fprintf(stdout,"\n--------------------------------------begin request------------------------\n");
    while((fgets(buf,64,fp) != NULL))
    {
        buf[strlen(buf)-1] = '\0';
        count++;
        unsigned int hkey = mur2hash2(buf,strlen(buf));
        int m = 0;
        if(hkey <= mgr->trmgr->tmin->hkey)
        {
            m = hkey;
            hkey = mgr->trmgr->tmin->hkey+(m%2+rand()%50);
        }
        if(hkey > mgr->trmgr->tmax->hkey)
        {
            m = hkey;
            hkey = mgr->trmgr->tmax->hkey-(m%2+rand()%50);
        }
        treeNode *p = treeNodeQuery(hkey,mgr);
        if(p != NULL){
            fprintf(stdout,"  request : %s(key =%d) --------->  %s(key = %d)\n",buf,hkey,p->vsrvname,p->hkey);
        }
        /*
        if(m != 0)
        {
             fprintf(stdout,"     [hash key no found] -->%s(real_key =%d,sys_key = %d,max = %d,min = %d)\n",buf,m,hkey,mgr->trmgr->tmax->hkey,mgr->trmgr->tmin->hkey);
        }
        */
        memset(buf,'\0',64);
    }
    if(fp != NULL){
        fclose(fp);
    }
    fprintf(stdout,"\n          <----------request  %d-------------------->      \n",count);
}
static void _treeNodeFree(treeNode *p)
{
    if(p != NULL)
    {
        treeNode *lchild = p->lchild;
        treeNode *rchild = p->rchild;
        free(p);
        p = NULL;
        _treeNodeFree(lchild);
        _treeNodeFree(rchild);
    }
}
void  mgrFree(Mgr *mgr)
{
    if(mgr == NULL)
    {
        return;
    }
    fprintf(stdout,"\n----------------------------mgrFree------------------------------\n");
    listNode *cur = mgr->ltmgr->head;
    while(cur != NULL)
    {
        listNode *pn = cur->next;
        free(cur);
        cur = pn;
    }
    treeNode *root = mgr->trmgr->root;
    _treeNodeFree(root);
    free(mgr->ltmgr);
    free(mgr->trmgr);
    free(mgr);
    mgr->ltmgr = NULL;
    mgr->trmgr = NULL;
    mgr = NULL;
}
int main(void)
{
    char *srv[3] = {"192.168.100.1:3306","192.168.200.2:3214","192.168.300.15:8745"};
    Mgr *mgr = mgrInit(3);
    mgrAdd(srv[0],mgr);
    mgrAdd(srv[1],mgr);
    mgrAdd(srv[2],mgr);
    prtltMgr(mgr);
    fprintf(stdout,"exec = %d\n",listNodeDel(srv[0],mgr));
    prtltMgr(mgr);
    treeMgr *trmgr = mgr->trmgr;
    fprintf(stdout,"trmgr->root = %p,count = %d,min=%d,max=%d\n",trmgr->root,trmgr->count,trmgr->tmin->hkey,trmgr->tmax->hkey);
    treeNode *root = mgr->trmgr->root;
    fprintf(stdout,"---------------------print init  tree-------------------------\n");
    _treeNodePrt(root,0);
    readIp("./IP.txt",mgr);
    fprintf(stdout,"---------------------print visitor tree-------------------------\n");
    root = mgr->trmgr->root;
    int n = 0;
    _treeNodeVPrt(root,n);
    fprintf(stdout,"------------------------------print all tree------------------------------\n");
    _treeNodePrt(root,0);
    mgrFree(mgr);
    return 0;
}
时间: 2024-10-09 11:39:50

一致性哈希算法设计的相关文章

一致性哈希算法原理设计

原文出处: 知致智之   欢迎分享原创到伯乐头条 一.前言 一致性哈希(Consistent Hashing),最早由MIT的Karger于1997年提出,主要用于解决易变的分布式Web系统中,由于宕机和扩容导致的服务震荡.现在这个算法思路被大量应用,并且在实践中得到了很大的发展. 二.算法设计 1.问题来源 一个由6台服务器组成的服务,每台Server负责存储1/6的数据,当Server1出现宕机之后,服务重新恢复可用时的场景. 如下表格可以很清楚的看到,当Server1宕机时,Hash1的服

转(一致性哈希算法(consistent hashing))

转自:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用. 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1.平衡性(Balance)

一致性哈希算法原理

一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用. 但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知道,memcached服务器端本身不提供分布式cache的一致性,而是由客户端来提供,具体在计算一致性has

一致性哈希算法(consistent hashing)(转)

原文链接:每天进步一点点——五分钟理解一致性哈希算法(consistent hashing) 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用. 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1.平衡性(Balance):平衡性是指哈希的

一致性哈希算法

tencent2012笔试题附加题    问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器.已有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去.但是如果一台服务器死掉了,那么n就变为了n-1,那么ServerIPIndex[QQNUM%n]与ServerIPIndex[QQNUM%(n-1)]基本上都不一样了,所以大多数用户的请求都会转到其他服务器,这样

一致性哈希算法及其在分布式系统中的应用(转)

原文:http://blog.codinglabs.org/articles/consistent-hashing.html 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越来越

五分钟理解一致性哈希算法(consistent hashing)

转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用. 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1.平衡性(Bal

一致性哈希算法及其在分布式系统中的应用 作者 张洋

转 http://blog.codinglabs.org/articles/consistent-hashing.html 摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越

一致性哈希算法及其在分布式系统中的应用

摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数据库的方式不太给力了,于是我们想引入Memcached作为缓存机制.现在我们一共有三台机器可以作为Me