分布式学习十二:zookeeper实现数据订阅/发布

简介: 分布式学习十二:zookeeper实现数据订阅/发布

数据订阅/发布

在分布式集群中,假设数据库发生了改动,就得修改所有分布式服务的数据库配置

我们可以通过zookeeper来实现数据库配置的订阅发布

我们先初始化数据库配置项环境

在zookeeper配置以下数据

\[zk: localhost:2181(CONNECTED) 51\] get /config-server/app1/database
{"Host":"127.0.0.1:3300","User":"root","Password":"233274","Database":"test"}

go代码环境准备

引入

github.com/go-zookeeper/zk

go.mod内容为:

module zkStudy
go 1.17
require (
   github.com/go-sql-driver/mysql v1.6.0
   github.com/go-zookeeper/zk v1.0.2
   github.com/jmoiron/sqlx v1.3.4
)

发布数据库配置

我们只需要set path,在zk中将自动把数据发布到订阅此目录的客户端中

以下代码,每2秒更改一次数据库数据

func loopChangeDbConfig()  {
   var dbConfig = config.DatabaseConfig{Host: "127.0.0.1:3300",User: "root",Password: "123456",Database: "test"}
   t := time.NewTicker(2 * time.Second)
   for {
      select {
      case <-t.C:
         dbConfig.Password=strconv.Itoa(rand.Intn(999999)+100000)
         jsonByte,_ := json.Marshal(dbConfig)
         _,err := zkConnect.Set(databaseZKPath,jsonByte,-1)
         if err!=nil {
            fmt.Println("zk set dbConfig path err :", err)
            return
         }
      }
   }
}

订阅数据库配置

通过zk.getW方法,获取数据并返回一个event单向通道,通过此通道可监听获取一条事件更改数据:

func getDatabaseConfig() <-chan zk.Event {
   //listen mysql-config path
   jsonStrByte, _, event, err := zkConnect.GetW(databaseZKPath)
   if err != nil {
      panic(err)
   }
   _ = json.Unmarshal(jsonStrByte, &databaseConfig)
   fmt.Printf("%+v 123\\n", databaseConfig)
   return event
}

获取到event之后,新开协程,进行阻塞获取通道,当获取到数据后,重新获取配置并继续获取一个通道监听数据

func listenDBConfigChange(event <-chan zk.Event) {
   var e zk.Event
   for {
      e = <-event
      //if node data change,db reconnect
      if e.Type == zk.EventNodeDataChanged {
         fmt.Printf("node data changed: %s, \\n",e.Path)
         event = getDatabaseConfig()
         err := db.Close()
         if err != nil {
            panic(err)
         }
         connectDb()
         dbTest()
      }
   }
}

运行结果:

image.png

目录
相关文章
|
5月前
|
存储 运维 安全
金融级 ZooKeeper 来袭:性能提升100%,SLA 99.99%,数据防护升级
阿里云微服务引擎 MSE ZooKeeper 企业版正式发布,提供比专业版更高的稳定性与安全能力,SLA 达 99.99%,整体服务性能提升 100%。针对关键业务,企业版通过独享资源池实现更高规格配额,满足大规模需求。此外新增数据备份容灾、容量管理反脆弱限流等功能,提升整体企业级特性,助力企业应对复杂业务挑战。
383 137
金融级 ZooKeeper 来袭:性能提升100%,SLA 99.99%,数据防护升级
|
3月前
|
消息中间件 分布式计算 资源调度
《聊聊分布式》ZooKeeper与ZAB协议:分布式协调的核心引擎
ZooKeeper是一个开源的分布式协调服务,基于ZAB协议实现数据一致性,提供分布式锁、配置管理、领导者选举等核心功能,具有高可用、强一致和简单易用的特点,广泛应用于Kafka、Hadoop等大型分布式系统中。
|
3月前
|
存储 监控 算法
117_LLM训练的高效分布式策略:从数据并行到ZeRO优化
在2025年,大型语言模型(LLM)的规模已经达到了数千亿甚至数万亿参数,训练这样的庞然大物需要先进的分布式训练技术支持。本文将深入探讨LLM训练中的高效分布式策略,从基础的数据并行到最先进的ZeRO优化技术,为读者提供全面且实用的技术指南。
|
10月前
|
SQL
【YashanDB知识库】手工迁移Doris数据到崖山分布式
【YashanDB知识库】手工迁移Doris数据到崖山分布式
|
10月前
|
存储 分布式计算 负载均衡
数据分布式存储:在海量数据面前,我们如何站稳脚跟?
数据分布式存储:在海量数据面前,我们如何站稳脚跟?
1406 1
|
8月前
|
数据采集 存储 NoSQL
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
417 67
|
7月前
|
数据采集 机器学习/深度学习 数据可视化
让回归模型不再被异常值"带跑偏",MSE和Cauchy损失函数在噪声数据环境下的实战对比
本文探讨了MSE与Cauchy损失函数在线性回归中的表现,特别是在含噪声数据环境下的差异。研究发现,MSE虽具良好数学性质,但对异常值敏感;而Cauchy通过其对数惩罚机制降低异常值影响,展现出更强稳定性。实验结果表明,Cauchy损失函数在处理含噪声数据时参数估计更接近真实值,为实际应用提供了更鲁棒的选择。
265 1
让回归模型不再被异常值"带跑偏",MSE和Cauchy损失函数在噪声数据环境下的实战对比
|
10月前
|
存储 人工智能 固态存储
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统
3FS是DeepSeek开源的高性能分布式文件系统,专为AI训练和推理任务设计,提供高达6.6 TiB/s的读取吞吐量,支持强一致性保障和通用文件接口,优化AI工作负载。
1408 2
DeepSeek开源周第五弹之一!3FS:支撑V3/R1模型数据访问的高性能分布式文件系统