协调中心性能大对比:zookeeper是如何解决负载均衡问题的

news/2024/7/10 2:43:58 标签: zookeeper, 负载均衡, 分布式

作为分布式系统的一个长久话题,协调中心的性能是一个很有意思的突破口。

作为java的分布式协调中心,常见的有zookeeper,redis ,memcache等全局性功能的组件,也有MySQL,mongoDB之类的数据库形持久存储。

两者之间的区别是显而易见的,全局功能组件更注重功能性,比如数据的全局一致性,方便调度等等。但是因为采用了类似树状的节点结构,每一个节点可以存储的数据量就有了上限,一般为1M。

而持久数据库存储的话,顾名思义,就是采用数据库形式进行存储,非常持久,但是作为协调中心的功能性层面就会有所不足。

那么这篇文章我们来仔细聊一聊关于zookeeper你不知道的二三事~

zookeeper的工作原理如图所示:

事实上,一个zookeeper就像一个管理员,管理者下方多个follower。

跟nginx不同的是,nginx是在服务器端口进行负载均衡的。

zookeeper则是在客户端进行负载均衡的。

使用zookeeper实现负载均衡只需要两个步骤就可以实现:
第一步是衡量状态--找出最适合处理这项工作的服务器以及衡量下属服务器的状态
第二步是算法层面--对应一个最适合的算法

我们来一起看看第一步——衡量下端服务器的状态该如何实现:因为zookeeper是一个树状的存储结构,不难想到可以通过增加节点的方式来进行下端的管理。

我们如果把一个临时节点当作一个服务器,用来记录这台服务器的状态。
那么创造一个这样的节点,就意味着有一台服务器上线了。
相对的,删除这样的一个节点就意味着一台服务器的下线。
而统计、记录结点的数量,就可以做到记录服务器状态的一个作用。

如果我们把这些节点都连接到一个父级server上,一个简单的负载均衡模型的第一步:平台状态的搭建就建立好了。

剩下的就是算法层面的技术问题,我们可以交给我其他的回答。

你还有什么想知道的,欢迎评论区留言点赞收藏,我们下期见~


http://www.niftyadmin.cn/n/29617.html

相关文章

C++程序设计——动态内存管理

一、C/C内存分布 1.栈(堆栈) 存储非静态局部变量、函数参数、返回值等等,栈是向下增长。 2.内存映射段 是高效的I/O映射方式,用于转载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。 3.堆 用…

【剧前爆米花--爪哇岛寻宝】Java中有关异常类的详细讲解

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于Java中异常类的文章,在本篇文章中详细讲解了异常的使用逻辑和底层的执行过程,如有疏漏,欢迎大佬指正! 目录 异常的体系结…

信息论复习—信源编码的基本方法

目录 信源编码的目的:提高传输效率 离散信源: 离散信源的分类: 离散无记忆信源 (DMS: Discrete Memoryless Source): 离散无记忆信源的特点: 离散无记忆信源编码与译码: 等长编码的编码速…

Nacos集群搭建

Nacos集群搭建Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化出现的问题Nacos集群搭建 1.集群结构图 官方给出的Nacos集群图: 其中包含3个nacos节点,然后一个负载均衡器代理3个Nac…

使用jstack解决线程爆满问题

问题发现生产应用现存在问题,影响到系统的使用,前端页面只配置了35个派生指标,后台任务生成20000多线程任务,占用了全部资源,导致其他系统也没资源可用,指标工厂也无法进一步使用,今天上午发的死…

分享138个ASP源码,总有一款适合您

ASP源码 分享138个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 138个ASP源码下载链接:https://pan.baidu.com/s/1idRmCxILGVt5pBkac-GiiA?pwdjmmu 提取码&#x…

Typescript基础知识(Typescript介绍、搭建TypeScript环境、基本数据类型)

系列文章目录 引入一:Typescript基础引入(基础类型、元组、枚举) 引入二:Typescript面向对象引入(接口、类、多态、重写、抽象类、访问修饰符) 第一章:Typescript基础知识(Typescri…

Essential C++第五章习题

目录 5.1 5.2 5.3 5.4 5.1 C代码&#xff1a; //Stack.h#include<vector> #include<string> #include<iostream> using namespace std;#pragma once#ifndef _STACK_H_ #define _STACK_H_typedef string elemType;class Stack { public://基类的析构函数…