.net的一致性哈希实现
最近在项目的微服务架构推进过程中,一个新的服务需要动态伸缩的弹性部署,所有容器化示例组成一个大的工作集群,以分布式处理的方式来完成一项工作,在集群中所有节点的任务分配过程中,由于集群工作节点需要动态增减,因此需要利用etcd(或zk)来管理集群,同时用一致性哈希算法来定位每个工作项的具体工作节点,一致性哈希算法的实现(.NET)为如下地址:
https://github.com/cerasumat/ConsistentHash/tree/develop
算法的原理不再赘述,用baidu都能够在第一页直接检索到,原理很简单,这个实现中哈希空间只有2^32-1,已经能够满足我的业务场景(只处理最近某一段时长的对象实体,这个空间已够用)。源码也很简单,结合原理中那个桶的图示,一看就明白。
简单说说用法:
1:以物理节点初始化哈希路由器
PhysicalNode node1 = ); PhysicalNode node2 = ); PhysicalNode node3 = );
var pNodes = new List<PhysicalNode>();
pNodes.Add(node1);
pNodes.Add(node2);
pNodes.Add(node3);
var router = new Router(pNodes, 3);
初始化得到一个物理节点*虚拟副本数的虚拟节点集群,分布在哈希环上
2:以该路由器提供的GetNode方法,对目标资源进行哈希路由
;
;
;
Stopwatch sw = new Stopwatch();
sw.Start();
; i < ; i++)
{
, '));
var node = router.GetNode(dataKey);
switch (node.Ip)
{
case "10.202.1.1":
Interlocked.Increment(ref count85);
break;
case "10.202.1.2":
Interlocked.Increment(ref count86);
break;
case "10.202.1.3":
Interlocked.Increment(ref count87);
break;
}
}
sw.Stop();
TimeSpan elapse = sw.Elapsed;
int total = count85 + count86 + count87;
Assert.IsTrue(total == );
上述代码只是UT代码中的片段,主要测试用第1步获取的router对99999个key进行哈希定位的耗时(在我笔记本上500ms左右)以及目标keys是否无遗漏地分布到每个节点。
3:集群动态伸缩
IRouter提供了集群伸缩的接口(AddNode,RemoveNode)等,可供使用过程中集群动态伸缩需求使用(可以考虑采取监控etcd或zookeeper中集群信息的方式来实时更新当前集群信息,达到动态伸缩的目的,具体实现这篇帖子不再表述)
以上就是一致性哈希算法的一个简单实现,可根据实际需求引入项目使用,适用于分布式处理的场景。
.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 ...
- 一致性哈希算法(consistent hashing)【转】
一致性哈希算法 来自:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希 ...
- 一致性哈希算法学习及JAVA代码实现分析
1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的方式则 ...
随机推荐
- enote笔记法使用范例(1)——自己总结的一些编写代码的常识 (a)
章节. 编程习惯 why 函数(<<为了>>便于提升软件开发效率和维护效率) 开发角度: 1)隐藏实现细节,这也是API质量最重要的品质2)复用:通过使用函数来代码复用 ...
- Python 基础之四初识Python数据类型
数字 Int,整型 Float,浮点型 Long,长整型 布尔 字符串 列表 元组 字典 1.数字 INT(整型) 在32位系统上,整数的位数为32位,取值范围为-2**31~2**31-1,即-21 ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- Jquery更改table中的内容(一)
css部分: .tab{ border:solid 1px #00aaee; text-align: left; margin:20px;}.tab tr{ border-top: solid 1px ...
- 自己实现一个简易web服务器
一个web服务器是网络应用中最基础的环节. 构建需要理解三个内容: 1.http协议 2.socket类 3.服务端实现原理 1.1 HTTP http请求 一般一个http请求包括以下三个部分: 1 ...
- ip命令和ifconfig命令(转载)
Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...
- SQL优化技术分析-2:SQL书写的影响
1.同一功能同一性能不同写法SQL的影响. 如一个SQL在A程序员写的为 Select * from zl_yhjbqk B程序员写的为 Select * from dlyx.zl_yhjbqk(带表 ...
- [Erlang 0109] From Elixir to Erlang Code
Elixir代码最终编译成为erlang代码,这个过程是怎样的?本文通过一个小测试做下探索. 编译一旦完成,你就看到了真相 Elixir代码组织方式一方面和Erlang一样才用非常 ...
- hive 调优总结
一.join优化 做join之前对数据进行预处理,减少参加join的数据量,把数据量少的表放入内存中,制作map端的join 应该将条目少的表/子查询放在 Join 操作符的左边.原因是在 Join ...
- C#语言基础——函数
函数一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能.所有的高级语言中都有子程序这个概念,用子程序实现模块的功能.在C#语言中,子程序的作用是由一个主函数和若干个函数构成.由主函 ...