FastDHT是一个基于键值对(Key Value Pair)的高效的分布式Hash系统,她可以用来存储大量的Key Value Pair,比如可以用来存储文件名映射表、session数据、用户相关数据等等。
FastDHT服务器端底层存储采用Berkeley DB,支持大数据量;网络IO采用libevent,支持大并发连接。FastDHT只用到了BDB最基本的存储功能,数据同步是自己实现的,采用了binlog的复制方式。
FastDHT集群由一个或多个组(group)组成,每个组由一台或多台服务器组成,同组服务器上存储的数据是相同的,数据同步只在同组的服务器之间进行。组内各个服务器是对等的,对数据进行存取时,可以根据key的hash值来决定使用哪台服务器。数据同步采用推(Push)的方式,由源服务器主动将数据同步到本组的其他服务器。
由客户端决定应该选择哪台服务器,为例避免查表,应该根据key的hash code来选择服务器,算法描述如下:
1. 计算出key的hash值(hash_code)
2. group_index = hash_code % group_count
3. new_hash_code = hash_code高16位和低16位互换
4. server_index = new_hash_code % 组内server_count
计算server_index和group_index时使用了不同的hash code,是因为如果group_count和组内server_count相等,例如都等于2,那么对于一个组来说,任何key值都将选中其中一台固定的服务器(server_index == group_index)。
FastDHT中,key由三部分组成:namespace、object ID和key name。这个设计和数据库的层级划分相似:namespace对应database,object Id对应table,而key对应字段。引入namespace的目的是解决多个使用者(如:应用或产品)之间可能存在的数据冲突问题;引入object Id是便于对object相关的数据(如用户资料)进行组织和管理,以提高整体性能。引入namespace和object ID使得系统具有更大的灵活性,在实际使用中,这两个字段可以设置为空值。在计算key的hash code时,如果namespace和object ID不为空,将这二者合并起来作为hash函数的输入;否则将key作为hash函数的输入。
系统扩容时,为了避免重新进行hash分布(rehash),FastDHT引入了逻辑分组的概念。一个物理分组对应一组服务器,一组服务器(物理分组)上可以有多个逻辑分组。FastDHT的一个服务进程支持多个逻辑分组,每个组对应一个BDB的数据文件。这样的设计为以后的扩容提供了便利。在初期估算出今后需要的大致分组数目(逻辑分组数),然后将逻辑分组对应到物理分组中。扩容时,将一个或多个逻辑分组迁移到新增的物理分组上,只需要拷贝对应的BDB数据文件,并修改相应的配置文件,重启服务器端和客户端程序即可。
FastDHT支持超时(timeout),每个key都有超时属性。这样可以使用FastDHT来存储session数据,比传统的数据库存储方案更加高效和简洁。
- 大小: 49 KB
分享到:
相关推荐
分布式哈希系统(Distributed Hash Table,简称DHT)是一种用于大规模分布式环境的数据存储技术,其核心思想是将数据分散存储在多台...深入研究和实践FastDHT的源码,可以帮助你掌握分布式系统的核心技术和最佳实践。
该框架为基于内存MQ的ws-task...该框架具备Leader节点自动选举、动态增删节点和任务数据分发功能,支持拉/推数据模式,并采用轮询、随机或HASH方式分发数据。此外,可配置Leader参与任务处理及节点是否参与Leader选举。
- 在分布式文件系统中,Master节点的元信息单点问题和单线程性能瓶颈是常见问题,百度通过将poll机制改为epoll和调整hash桶大小等技术手段改进了性能。 - 此外,使用fuse进行调参以提高系统的性能和稳定性也是百度...
分布式系统架构因其可扩展性、可靠性以及高性能成为当前主流的数据处理平台之一。本研究主要关注于一种多存储引擎Key-Value分布式内存数据库的设计与实现,其中涉及到的关键技术点和知识点非常丰富。 首先,分布式...
Apache Pegasus是一个高效的分布式键值存储系统,设计用于处理大规模数据,尤其适合那些对延迟敏感且需要强一致性的应用场景。它基于C++开发,没有垃圾回收机制,提供了高性能的Key-Value操作,并且支持多种数据操作...
为了解决这些问题,越来越多的企业开始采用分布式系统架构。而在分布式系统中,Session管理成为了一个重要的问题。在传统的Web应用中,Session通常被保存在服务器的内存中。但在分布式环境中,这种做法会导致一系列...
接下来,我们将深入探讨Redis中的其他四种数据结构:list(有序列表)、set(无序集合)、sorted set(有序集合)和hash,并通过具体的Java工具类RedisListUtil来展示它们的操作。 首先,RedisListUtil是一个用于...
本研究提出了一个基于分布式PKI(公钥基础设施)的安全邮件客户端系统,旨在解决分布式电子邮件系统在安全传输和存储方面的问题。 分布式PKI是一种去中心化的安全架构,与传统的基于认证中心(CA)的PKI系统不同,...
Jemter测试MQ的插件 JMeter-Rabbit-AMQP在github上17年便停止更新了,不支持rabbitmq的交换机类型“x-consistent-hash”,为此我更改了源码使其支持"x-consistent-hash
一致性是分布式系统中的关键问题,Mydis通过引入这些算法,可以在不牺牲性能的前提下,提供强一致性的保证。 在安全性方面,Mydis可能提供了认证和加密功能,以保护缓存数据的安全。例如,支持SSL/TLS加密连接,...
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
通过以上介绍可以看出,Pass-the-Hash攻击是一种复杂的攻击手法,涉及对Windows系统内部工作原理的深入理解。为了有效地应对这类攻击,组织不仅需要了解其原理,还需要掌握最新的防御技术和工具。
总之,`copy-webpack-plugin-hash`是Webpack生态系统中的一个重要组件,它帮助开发者高效地管理和优化前端项目的静态资源,确保用户始终能获得最新且正确的资源版本。在现代前端开发中,掌握这类工具的使用对于提升...
同时,分布式文件系统还需要高效的数据定位机制,比如通过分布式哈希表(Distributed Hash Table, DHT)等方式,快速定位存储节点,提升系统响应速度和吞吐量。 随着分布式存储技术的发展,对于存储系统的架构设计...
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
分布式操作系统算法Demo是一种高级操作系统技术的实践展示,它涵盖了分布式系统和算法的核心概念。在现代计算机科学中,分布式操作系统是连接多台独立计算机,通过网络通信实现资源共享和协同工作的系统。这种系统...
6. 分布式计算模型的设计:在分布式环境下,如何设计高效的数据分片和聚集策略对提高数据处理效率至关重要。本研究提出了一种基于列存储的分布式计算模型,以实现分片聚集的并行连接。这种模型设计包括了对大数据...
基于Redis的分布式缓存系统因其高效、灵活的特点,被广泛应用于大型应用系统中。Redis是一款开源、内存中的Key-Value存储系统,支持数据持久化,并能提供多种数据结构如List、String、Set和Hash等,这使得它在处理...