Golang的一致性哈希实现
Golang的一致性哈希实现
一致性哈希的具体介绍,可以参考:http://www.cnblogs.com/haippy/archive/2011/12/10/2282943.html
- 1 import (
- 2 "hash/crc32"
- 3 "sort"
- 4 "strconv"
- 5 "sync"
- 6 )
- 7
- 8 const DEFAULT_REPLICAS = 100
- 9 type SortKeys []uint32
- 10
- 11 func (sk SortKeys) Len() int {
- 12 return len(sk)
- 13 }
- 14
- 15 func (sk SortKeys) Less(i, j int) bool {
- 16 return sk[i] < sk[j]
- 17 }
- 18
- 19 func (sk SortKeys) Swap(i, j int) {
- 20 sk[i], sk[j] = sk[j], sk[i]
- 21 }
- 22
- 23 type HashRing struct {
- 24 Nodes map[uint32]string
- 25 Keys SortKeys
- 26 sync.RWMutex
- 27 }
- 28
- 29 func (hr *HashRing)New(nodes []string) {
- 30 if nodes == nil {
- 31 return
- 32 }
- 33
- 34 hr.Nodes = make(map[uint32]string)
- 35 hr.Keys = SortKeys{}
- 36 for _, node := range(nodes) {
- 37 for i := 0; i < DEFAULT_REPLICAS; i++ {
- 38 str := node + strconv.Itoa(i)
- 39 hr.Nodes[hr.hashStr(str)] = node
- 40 hr.Keys = append(hr.Keys, hr.hashStr(str))
- 41 }
- 42 }
- 43 sort.Sort(hr.Keys)
- 44 }
- 45
- 46 func (hr *HashRing) hashStr(key string) uint32 {
- 47 return crc32.ChecksumIEEE([]byte(key))
- 48 }
- 49
- 50 func (hr *HashRing) GetNode(key string) string {
- 51 hr.RLock()
- 52 defer hr.RUnlock()
- 53 hash := hr.hashStr(key)
- 54 i := hr.get_position(hash)
- 55 return hr.Nodes[hr.Keys[i]]
- 56 }
- 57
- 58 func (hr *HashRing) get_position(hash uint32) int {
- 59 i := sort.Search(len(hr.Keys), func(i int) bool {
- 60 return hr.Keys[i] >= hash})
- 61
- 62 if i < len(hr.Keys) {
- 63 if i == len(hr.Keys) - 1 {
- 64 return 0
- 65 } else {
- 66 return i
- 67 }
- 68 } else {
- 69 return len(hr.Keys) - 1
- 70 }
- 71 }
- 72
- 73
Golang的一致性哈希实现的更多相关文章
- 一致性哈希算法和Go语言实现
一致性哈希算法,当我第一次听到这个名字的时候,感觉特别高深.而它往往会和分布式系统相关,准确的说,是分布式缓存. 在Web服务中,缓存是介于数据库和服务端程序之间的一个东西.在网站的业务还不是很大的时 ...
- .net的一致性哈希实现
最近在项目的微服务架构推进过程中,一个新的服务需要动态伸缩的弹性部署,所有容器化示例组成一个大的工作集群,以分布式处理的方式来完成一项工作,在集群中所有节点的任务分配过程中,由于集群工作节点需要动态增 ...
- 一致性哈希算法与Java实现
原文:http://blog.csdn.net/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具 ...
- 五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法 ...
- 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...
- memcache 的内存管理介绍和 php实现memcache一致性哈希分布式算法
1 网络IO模型 安装memcached需要先安装libevent Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描 ...
- 一致性哈希算法以及其PHP实现
在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Respons ...
- Java_一致性哈希算法与Java实现
摘自:http://blog.csdn.net/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具 ...
- Memcached 笔记与总结(8)Memcached 的普通哈希分布算法和一致性哈希分布算法命中率对比
准备工作: ① 配置文件 config.php ② 封装 Memcached 类 hash.class.php,包含普通哈希算法(取模)和一致性哈希算法 ③ 初始化 Memcached 节点信息 in ...
随机推荐
- [技术博客]iview组件样式踩坑记录
[技术博客]iview组件样式踩坑记录 iview官方文档. 在本次项目开发中,前端项目主要使用vue框架+iview组件构建,其中iview组件在使用过程中遇到了许多官方文档中没有明确说明或是很难注 ...
- OO随笔之纠结的第二单元——多线程电梯
综述 主要任务就是写一个电梯模拟器,读入每一个人的请求然后让电梯把他们送到想去的地方. 从第一次到第三次作业,三次的主要任务都是相同的,但是每次都增加了很多的细节,每次的难度都逐步增长,电梯复杂度和瞎 ...
- Vue | 指令实现自动翻译填充英文名功能
背景:应用系统中存在多个创建实体表单,表单填写时,在填写中文名称后,要填写对应的英文名作为标识或数据库查询索引. 需求:填写中文名的同时,系统自动生成英文名并填充到表单中,辅助用户操作,节约操作时间. ...
- [刷题] PTA 6-11 求自定类型元素序列的中位数 (25分)
采用希尔排序 1 #include <stdio.h> 2 3 #define MAXN 10 4 typedef float ElementType; 5 6 ElementType M ...
- [算法] O(n^2)排序算法的效率比较
选择.插入排序 main.cpp 1 #include <iostream> 3 #include "SortTestHelper.h" 4 5 using names ...
- Ansible_管理事实(Fact)
一.Ansible管理事实(fact) 1.Ansible事实描述 1️⃣:Ansible事实是Ansible在受管主机上自动检测到的变量 2️⃣:事实(fact)中包含有与主机相关的信息,可以像pl ...
- sersync 实时同步网站数据
sersync同步实战 sersync是基于inotify和srync的二次开发,代码托管在github上面在rsync的客户端上安装,下载地址: https://raw.githubusercont ...
- KEIL-C下数组指针与指针数组实验
http://blog.csdn.net/men_wen/article/details/52694069 第一个: 数组指针的小实验 用指针传递参数 结果: 第二个: 数组指针实验 定义一个指针 ...
- 统信UOS - 扩展系统盘
一.开root权限,开终端 二.执行lsblk指令,查看磁盘情况 可以发现 / 路径 对应的是loop0,查阅可知loop设备就是一个文件,挂载为一个路径操作的,这就尴尬了,好好的分区不用,你干嘛这么 ...
- 根据swagger.json生成flutter model,暂无空安全支持
一般的服务端类型都有泛型支持,对于flutter来说虽然也支持泛型,但是在序列化这里却始终存在问题,flutter不允许用反射,对于flutter项目的开发来说除了画页面,可能最烦人的就是跟服务端打交 ...