首页 > 其他分享 >技术分享| Etcd如何实现分布式负载均衡及分布式通知与协调

技术分享| Etcd如何实现分布式负载均衡及分布式通知与协调

时间:2022-11-15 18:32:52浏览次数:63  
标签:订阅 负载 系统 Etcd 分布式系统 分布式

Etcd 是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。Etcd比较多的应用场景是用于服务注册与发现(前面文章已经介绍过),除此之外,也可用于键值对存储,应用程序可以读取和写入 Etcd中的数据(类似于内存数据库redis),还可用于分布式系统系统的消息发布与订阅,分布式的通知与协调,以及分布式系统中的负载均衡等等。

消息发布与订阅

在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。

在这里插入图片描述

应用中用到的一些配置信息放到 Etcd 上进行集中管理。这类场景的使用方式通常是这样:应用在启动的时候主动从 Etcd 获取一次配置信息,同时,在 Etcd 节点上注册一个Watcher并等待,以后每次配置有更新的时候,Etcd 都会实时通知订阅者,以此达到获取最新配置信息的目的。

分布式搜索服务中,索引的元信息和服务器集群机器的节点状态存放在Etcd中,供各个客户端订阅使用。使用Etcd的key TTL功能可以确保机器状态是实时更新的。

分布式通知与协调

这里讲的分布式通知与协调,与消息发布和订阅有些相似。在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。

这里用到了 Etcd 中的 Watcher 机制,通过注册与异步通知机制,实现分布式环境下不同系统之间的通知与协调,从而对数据变更做到实时处理。实现方式通常是这样:不同系统都在 Etcd 上对同一个目录进行注册,同时设置 Watcher 观测该目录的变化(如果对子目录的变化也有需要,可以设置递归模式),当某个系统更新了 Etcd 的目录,那么设置了 Watcher 的系统就会收到通知,并作出相应处理。

分布式通知与协调的原理及方法:

  • 通过Etcd进行低耦合的心跳检测。检测系统和被检测系统通过Etcd上某个目录关联而非直接关联起来,这样可以大大减少系统的耦合性。
  • 通过Etcd完成系统调度。某系统有控制台和推送系统两部分组成,控制台的职责是控制推送系统进行相应的推送工作。管理人员在控制台做的一些操作,实际上只需要修改Etcd上某些目录节点的状态,而Etcd就会自动把这些变化通知给注册了Watcher的推送系统客户端,推送系统再做出相应的推送任务。
  • 通过Etcd完成工作汇报。大部分类似的任务分发系统,子任务启动后,到Etcd来注册一个临时工作目录,并且定时将自己的进度进行汇报(将进度写入到这个临时目录),这样任务管理者就能够实时知道任务进度。

在这里插入图片描述

负载均衡

在分布式系统中,为了保证服务的高可用以及数据的一致性,通常都会把数据和服务部署多份,以此达到对等服务,即使其中的某一个服务失效了,也不影响使用。这样的实现虽然会导致一定程度上数据写入性能的下降,但是却能实现数据访问时的负载均衡。因为每个对等服务节点上都存有完整的数据,所以用户的访问流量就可以分流到不同的机器上。

在这里插入图片描述

Etcd自己的负载均衡:

Etcd本身分布式架构存储的信息访问支持负载均衡。Etcd集群化以后,每个Etcd的核心节点都可以处理用户的请求。所以,把数据量小但是访问频繁的消息数据直接存储到Etcd中也是个不错的选择,如业务系统中常用的二级代码表。二级代码表的工作过程一般是这样,在表中存储代码,在Etcd中存储代码所代表的具体含义,业务系统调用查表的过程,就需要查找表中代码的含义。所以如果把二级代码表中的小量数据存储到Etcd中,不仅方便修改,也易于大量访问。

Etcd给其他应用提供负载均衡功能:

利用Etcd维护一个负载均衡节点表。Etcd可以监控一个集群中多个节点的状态,当有一个请求发过来后,可以轮询式地把请求转发给存活着的多个节点。类似KafkaMQ,通过Zookeeper来维护生产者和消费者的负载均衡。同样也可以用Etcd来做Zookeeper的工作。

参考文档

[Etcd官网] Etcd Etcd负载均衡的golang插件

标签:订阅,负载,系统,Etcd,分布式系统,分布式
From: https://blog.51cto.com/u_15232255/5851920

相关文章

  • docker基本使用-nginx集群负载
    原文https://www.cnblogs.com/front-web/p/15529173.html注:本示例为本地mac系统模拟摘要:搭建集群服务器,本机只能在docker环境中,搭建多个nginx服务器1,参考上篇文章(dock......
  • 使用docker搭建nginx集群,实现负载均衡
    原文:https://blog.csdn.net/qq_39962403/article/details/107092779环境基于centos7,docker安装教程参考https://www.runoob.com/docker/centos-docker-install.html(选......
  • 什么是分布式锁?实现分布式锁的三种方式
    转载:https://www.cnblogs.com/liuqingzheng/p/11080501.html在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。那具体什......
  • [CS] C3-1. 分布式系统
    书名:分布式系统:概念与设计中文版第五版作者:GeorgeCoulouris/JeanDollimore/TimKindberg/GordonBlairISBN:9787111403920第一章1.分布式系统构建原因主......
  • 第一章第4节: k8s服务service发现与负载均衡_New
                   ......
  • 使用 Spring Cloud LoadBalancer 实现客户端负载均衡
    使用SpringCloudLoadBalancer实现客户端负载均衡作者:Grey原文地址:博客园:使用SpringCloudLoadBalancer实现客户端负载均衡CSDN:使用SpringCloudLoadBalancer......
  • etcd分布式键-值对存储系统
    什么是分布式系统:  业务量的迅速增大,普通的单机系统无法满足要求,要么垂直扩展升级机器硬件,要么水平扩展堆廉价服务器。目前互联网领域选择了后者 水平扩展etcd介绍:1......
  • Linux下FastDFS分布式存储-部署过程和总结
    部署之前先对比下FastDFS和HDFS:1.fastDFS和HDFS(Hadoop的分布式存储)不同,fastDFS的文件不是切片存储的,一个文件被存储在其中某一个group组的所有storage节点上,一个组中的每......
  • rqlite 基于sqlite 的轻量级分布式关系数据库
    rqlite是基于sqlite做为存储的分布式关系数据库,对于分布式处理基于了raft协议包含的特性部署简单使用简单,包含了httpapi以及,命令行接口,以及clientsdk完整企业级......
  • 负载均衡设计技巧
    通用负载均衡算法轮询、随机:请求依次(随机)发给处理服务器实现简单,但是不会判断服务器状态(除非服务断开)加权轮询:配置权重,按照权重发送给服务器......