一个分布式的负载设计

原创 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空间。

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


集群、负载均衡及分布式系统架构

1.集群 1.1 定义: 是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。 是一组连在一起的计算...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2015年10月23日 16:56
  • 1081

图片的分布式存储和负载均衡实现原理

今天记录下图片的分布式存储和负载均衡实现原理。         对于Web服务器而言,用户对图片信息的访问是很消耗服务器资源的。当一个网页被浏览时,Web服务器与浏览器建立连接,每个连接表...
  • huangkai2012
  • huangkai2012
  • 2015年11月26日 11:25
  • 3648

一个分布式rpc框架的实现方案(二)

之前实现了一个点对点的rpc功能框架,使用简单的协议将调用接口和参数传给服务端。由于最近在看zk相关的内容,于是准备引入zk进行分布式管理。 先看一下前一个简单版本的实现原理: 这是一个简...
  • Scythe666
  • Scythe666
  • 2016年07月19日 11:29
  • 1820

EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)

前言 早在2013年我就设计了一套架构非常简单的分布式流媒体服务器平台《基于Darwin实现的分布式流媒体直播服务器系统》,当时的考虑如今看来有诸多的细节点没有考虑到:1、CMS是单点部署,无法...
  • sunxiaopengsun
  • sunxiaopengsun
  • 2017年03月21日 18:09
  • 272

分布式开发 (负载均衡图解)

平常我们做系统开发一般分为以下两种:        第一种:企业中的管理系统:如 CRM (客户关系管理系统), OA (办公自动化系统), ERP (企业资源管理系统)   它们的特点就是:公司内部...
  • Fanbin168
  • Fanbin168
  • 2016年04月03日 19:42
  • 2135

关于集群、负载均衡、分布式的区别

关于集群、负载均衡、分布式的区别 1、Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群) 集群是一个统称,他分为好几种,如高性能科学群集、负载均衡群集、高可...
  • haiross
  • haiross
  • 2014年07月04日 16:38
  • 5849

共享行业的分布式MQTT设计

随着移动互联网慢慢进入后半场,越来越多的公司将注意力转移到物联网,希望通过早期布局来占领这个行业的制高点,比如目前流行的摩拜单车和OFO单车都是典型的物联网应用。物联网本身并不是什么新概念,随着大数据...
  • linuxarmsummary
  • linuxarmsummary
  • 2017年06月07日 14:17
  • 1299

集群、分布式、负载均衡区别与联系

源文章:http://llyzq.iteye.com/blog/1133616 [技术架构]集群、分布式、负载均衡区别与联系(转) 1、Linux集群主要分成三大类( 高可用集群,...
  • gaoyuan0512
  • gaoyuan0512
  • 2016年07月07日 15:09
  • 8274

Dubbo+Zookeeper实现分布式服务和负载均衡

分布式服务,负载均衡
  • inthislife
  • inthislife
  • 2015年06月02日 10:09
  • 4913

菜鸟教你如何通俗理解——>集群、负载均衡、分布式

在“高并发,海量数据,分布式,NoSql,云计算......”概念满天飞的年代,相信不少朋友都听说过甚至常与人提起“集群,负载均衡”等,但不是所有人都有机会真正接触到这些技术,也不是所有人都真正理解了...
  • u012904383
  • u012904383
  • 2016年06月18日 21:34
  • 9091
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个分布式的负载设计
举报原因:
原因补充:

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