我们知道,负载均衡算法很多,比如轮询、随机、加权轮询等。那如何才能实现一个会话粘滞(session sticky)的负载均衡算法呢?也就是说,我们需要在同一个客户端上,在一次会话中的所有请求都路由到同一个服务器上。 最直接的方法就是,维护一张映射表,这张表的内容是客户端IP地址或者会话ID与服务器编号的映射关系。客户端发出的每次请求,都要先在映射表中查找应该路由到的服务器编号,然后再请求编号对应的服务器。这种方法直观,但也有几个弊端: 如果客户端很多,映射表可能很大,比较浪费内存空间。 客户端下线、上线,服务器扩容、缩容都会导致映射失效,这样维护日程表的成本就会很大; 如果借助哈希算法,这些问题都可以非常完美地解决。我们可以通过哈希算法,对客户端IP地址或者会话ID计算哈希值,将取得的哈希值与服务器列表的大小进行取模运算,最终得到的值就是应该被路由到的服务器编号。这样,我们就可以把同一个IP过来的请求,都路由到同一个后端服务器上。 2.数据分片 哈希算法还可以用于数据分片。 1)如何统计“搜索关键词”出现的次数? 假如我们有1T的日志文件,这里面记录了用户搜索的关键词,我们想要书屋中统计出每个关键词被搜索的次数,该怎么做? 我们来分析下,这个问题有两个难点,第一个是搜索日志很大,没办法放到一台机器的内存中。第二个难点是,如果只用一台机器来处理这么巨大的数据,处理时间会很长。 针对这两个难点,我们可以先对数据进行分片,然后优胜多台机器处理的方法,来提高处理速度。具体思路是这样的:为了提高处理的速度,我们用n 台机器并行处理,我们从搜索记录的日记文件中,依次读出每个搜索的关键词,并且通过哈希函数计算哈希值,然后再跟n 取模,最终得到的值,就是应该被分配到的机器编号 这样,哈希值相同的搜索关键词就被分配到了同一个机器上。也就是说,同一个搜索关键词会被分配到同一个机器上。每个机器会分别计算关键词出现的次数,最后合并起来就是最终的结果。 我们使用QKFile网络访问东西或者下载东西时,系统就会从离我们最近的距离(这里不是物理距离,是数学距离)的一些存储节点,传输数据或者文件的碎片(不是整个文件)给我们。 当然,最后给我们的是整个数据或者文件。 所以QKFile的速度会非常的快,因为不用下载整个文件嘛,并且如果周围的其他人,同样也下载了你需要的文件,这样你的下载速度会被加速哦。 那如果最近的节点没有我们的文件怎么办? 系统就从另外的节点进行索取文件碎片嘛。 那如果某个存储节点被损坏了怎么办? 别担心,QKFile系统会有一个容错机制,容错机制的意思就是一份文件如果被分割成7份,其中三份损坏了,那么可以根据剩下的四份还原出文件来,嘿嘿,这技术是不是很酷?这样,我们的文件的安全性就大大提高了,就算是世界末日,只要还有一个节点上有你的文件碎片,你的文件就有希望被还原哦 —- 编译者/作者:财神圈Tow 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
哈希算法还可以用于数据分片
2020-02-24 财神圈Tow 来源:区块链网络
LOADING...
相关阅读:
- 中铁上海工程局益阳高铁项目大干120天专项劳动竞赛月度生产产值节节2020-10-30
- 不做合约也能暴富?提升认知赚大钱,短线投机赚小钱,合约赌博赔光2020-10-30
- 陈明德致全球熵节点用户公开信2020-10-29
- 亚创云首创零撸零风险IPFS生态质押挖矿(FIL)2020-10-29
- 宣传全民光盘CFCC珍惜粮食公链落地应用2020-10-29