一致性 Hash 算法

用户头像
莫莫大人
关注
发布于: 2020 年 07 月 09 日

作业一:

  • 用你熟悉的编程语言实现一致性 hash 算法。

  • 编写测试用例测试这个算法,测试 100 万 KV 数据,10 个服务器节点的情况下,计算这些 KV 数据在服务器上分布数量的标准差,以评估算法的存储负载不均衡性。



(完成了三分之一,近2天补上)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Consistent_Hash
{
class Program
{
static void Main(string[] args)
{
int Server = Convert.ToInt32(Console.ReadLine());
int Data = Convert.ToInt32(Console.ReadLine());
int VirtualNode = Convert.ToInt32(Console.ReadLine());
ConsistentHash result =new ConsistentHash(Data,Server,VirtualNode);
int[] Tre = new int[10];
Tre = result.GetConsistentHash();
int AvNum = Data/Server;
int temp=0;
for (int i=0;i< Server; i++)
{
temp += Convert.ToInt32(Math.Pow(Tre[i] - AvNum, 2));
}
int STDev = Convert.ToInt32(Math.Sqrt(temp / Server));
for (int j=0; j<Server;j++)
{
Console.WriteLine("Server {0} 上分布了 {1} 组数据",j,Tre[j]);
}
Console.WriteLine("在拥有 {0} 台服务器,{1} 组KV数据,使用 {2} 个虚拟节点的情况下,数据在服务器上分布的标准差为 {3}", Server, Data, VirtualNode, STDev);
Console.ReadLine();
}
public class ConsistentHash
{
private int data;
private int server;
private int virtualNode;
public ConsistentHash(int data, int server, int virtualNode)
{
this.data = data;
this.server = server;
this.virtualNode = virtualNode;
}
public int[] GetConsistentHash()
{
int[] Snode =new int[server];
int To_server;
int i;
for ( i = 0; i < data; i++)
{
To_server = Convert.ToInt32((Math.Abs(i.ToString().GetHashCode())%(server * virtualNode))/virtualNode);
Snode[To_server] += 1;
}
return Snode;
}
}
}
}



学习总结

本周学习的内容主要有

  1. 缓存

  • 通读缓存

  • 代理缓存

  • 反向代理缓存

  • CDN缓存

  • 旁路缓存

  • 对象缓存

  • 缓存的数据存储:Hash一致性算法



  1. 消息队列与异步架构

  • 消息队列构建异步调用的架构

  • 点对点模型

  • 发布订阅模型

  • 消息队列的好处

  • 更好的伸缩性

  • 削峰填谷

  • 失败隔离和自我修复

  • 解耦



  1. 负载均衡架构

  • HTTP重定向负载均衡

  • DNS负载均衡

  • 反向代理负载均衡

  • IP负载均衡

  • 数据链路层负载均衡

发布于: 2020 年 07 月 09 日 阅读数: 32
用户头像

莫莫大人

关注

还未添加个人签名 2018.07.31 加入

还未添加个人简介

评论

发布
暂无评论
一致性Hash算法