一个分布式的负载设计

原创 2012年03月30日 16:49:26

要求:对于saas这种服务一个用户名,同一段时间只能有一次登录系统。因为用户数量大,所以对于用户的登录,需要能够在多个server上做负载均衡。

Hash 潜在冲突检测模块


节点检测模块

上线用户连接发现与维持模块

各个节点


节点的说明:

1.hash函数计算用户名后,映射到Mbits中的一个,并置1(初始为0),如果已经不是0,就加1.

2.使用countingbloom filter进行计算,支持用户下线删除

3.减少一个node。可能新到的用户名唯独在这个node里面检测是为0,其他都是1,所以认为他上线过了。这样就需要在“hash冲突检测模块”里进行查找,产生退化。

4.增加一个node。只要把“hash冲突检测模块”里的每一个已登陆用户名在这台机器的Mbits里面做hash就可以了。

流程:

登陆的用户,在若干个node里面计算hash,如果有一个空间之前是0,反馈给“节点检测模块”,此模块知道这个用户之前没有登陆过,发送count指令给各个node,各个node把计算出来的那个bitM空间中置1

登陆的用户,在若干个node里面计算hash,如果所有空间之前都是大于等于1,反馈给“节点检测模块”,此模块知道这个用户‘可能’之前登陆过(可能是因为hash存在冲突)。于是在“Hash潜在冲突检测模块”里面查找一次,找到表明真的登录过,没找到表明没有登录过。登陆过则给各个nodecancel指令使之结束这次计算过程,并拒绝登陆,没有登陆则给各个node发送count指令,各个node把计算出来的那个bitM空间中置1

上线用户连接发现与维持模块”发现登陆过用户的长连接断开,则表明用户下线,对各个node的这个用户名计算hash,并把Mbits位中的计算结果哪一位减1

设计缺陷:

对于负责动态负载均衡的nodecountingbloom filter本身有空间M和最优hash函数个数的要求,最好根据用户数确定。

如果用户数很多,那么每个node都做hash函数,其实并没有负载均衡,而是增加了计算的负担。



2012323

快一年了,重新看自己的设计,觉得细节是有,但思路比较复杂,主要思想还是hash+MapReduceBloomfilter错误率其实可以做到很小的,所以偶尔有人重复登陆也不要紧。下面是现在的思路。

服务器端的自动更新程序可以自动更新客户端的配置文件。(写一个服务端程序,自动搜集客户端节点存活信息,调整分配hash值的策略?)

登陆:对用户名散列值的计算可以放到若干台机器上,计算时主登陆服务器轮询分配,此节点死去就不再分配(其中未计算完成的散列导致用户可以二次登陆),主登陆服务器程序动态读取配置文件,给新增节点分配计算量。

检测:计算完成的散列根据散列值的大小的空间分配到相应的机器上按照“拉链法”查找,找到返回主登陆服务器“已登陆”,没找到,返回主登陆服务器“允许登陆”,并把hash值和用户名存储起来。对这些存放登陆信息的服务器通过存储冗余信息,达到坏死一个节点仍能正常运行的目的。比如:10台机器,每一台机器在给主登陆服务器发送“允许登陆”存储hash值和用户名时,把hash值和用户名信息发送给后一台机器(第10台发送给第1台),这样形成一个循环冗余。坏死一个节点时,只要先查询删除后一台机器,并保证迅速恢复坏死机器。增加机器需要重新分配hash值空间,从第一台机器开始逐渐往后拷贝hash值和用户名。或使新增机器和已存在的一台机器共用已存在机器的hash空间,让这几个机器充当一台机器的角色,是为了不重新分配hash空间。

上线用户连接发现与维持模块”发现登陆过用户的长连接断开,则表明用户下线,根据散列空间给相应的机器发送“删除”命令,删除此用户的登陆信息。


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

【远程调用框架】如何实现一个简单的RPC框架(五)优化三:软负载中心设计与实现

【如何实现一个简单的RPC框架】系列文章:【远程调用框架】如何实现一个简单的RPC框架(一)想法与设计 【远程调用框架】如何实现一个简单的RPC框架(二)实现与使用 【远程调用框架】如何实现一个简...

一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器

# LVS DR 原理 LVS-DR不同于普通的haproxy代理机制,它在网络中的作用层级更加底层。haproxy一般代理应用层的应用数据,所有的数据都会通过haproxy收发,导致了hap...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Bigtable:一个分布式的结构化数据存储系统

修正了alex翻译版的几个欠妥之处 Bigtable:一个分布式的结构化数据存储系统 摘要 Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通...

谷歌三大论文中文版之一:Bigtable:一个分布式的结构化数据存储系统

修正了alex翻译版的几个欠妥之处 Bigtable:一个分布式的结构化数据存储系统 摘要 Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器...

Bigtable:一个分布式的结构化数据存储系统

源地址:http://blademaster.ixiezi.com/谷歌论文地址:http://labs.google.com/papers/bigtable.html Bigtable:一个分布式的...

一个简单的分布式的知乎爬虫

源代码地址:https://github.com/WiseDoge/ZhiHu_Spider一个分布式的网络爬虫,用于抓取知乎的用户详细信息,包括用户名、行业、位置、毕业院校、介绍、关注者、关注人等。...

Bigtable:一个分布式的结构化数据存储系统[中文版]

译者:alex摘要Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括We...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)