go语言并发实战——日志收集系统(七) etcd的介绍与简单使用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: go语言并发实战——日志收集系统(七) etcd的介绍与简单使用

什么是etcd

etcd是基于Go语言开发的一个开源且高可用的分布式key-value存储系统,我们可以在上面实现配置共享与服务的注册与发现。

和它比较相似的还有我们之间所提到的Zookeeper以及consul.(注:后面我们学习微服务的时候etcd和consul会有广泛的使用)

etcd有以下几点特点:

  • 完全复制:集群中的每个节点都可以使用完整的存档
  • 高可用:Etcd可用于避免硬件的单点故障或网络问题
  • 一致性:每次读取都会返回跨多主机的最新写入
  • 简单:包含一个定义良好,面相用户的API(grpc)
  • 安全:实现了带有可选的客户端证书身份验证的自动化TLS
  • 可靠:使用raft算法实现了强一一致,高可用的服务存储目录

etcd应用场景

服务发现

服务发现是分布式系统中比较常见的问题之一,指的是在同一个分布式集群中的进程或服务如何找到彼此并建立连接,而从本质上来说,就是了解集群中是否有集群

在监听udp/tcp端口,并且通过名字就可以查找或连接。

配置中心

我们将一些配置信息发到etcd上进行集中管理,主要流程是应用在启动的时候主动从etcd中获取一次配置信息,同时我们在etcd上注册一个Watcher并等

待,每次配置更新时,etcd实时通知订阅者来获取最新配置消息。

分布式锁

因为etcd使用了raft算法来实现强一致性,所以某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁,而锁服务主要的使用方式有以下两种:

  • 保证获取锁的用户最后只有一个可以得到
  • 控制时序,所有想获得锁的用户都会被安排执行,但是获取锁的顺序是全局唯一的,这也决定了执行顺序

etcd结构图

  • Http Server:用于处理用户发送的API请求与其他etcd节点的同步与心跳信息请求
  • Raft:强一致散发的具体实现
  • Store:用于处理etcd支持的各种功能的事务,包括数据索引,节点状态变更,事件的助理与执行等等。
  • WAL:预写式日志,是etcd数据存储的方式。除了在内存存有数据的状态以及节点的索引外,都主要通过WAL做持久化存储,WAL中,所有数据在提交前都会事先
    记录日志,Snapshot是用于防止存储WAL中数据过多的状态快照,Entry表示存储具体日志。

etcd的下载与简单使用

etcd的下载地址

下载地址

简单使用

  • 打开服务端
    下载完后将压缩包解压,打开文件夹:

    双击etcd.exe,打开服务端
  • 打开命令行,将客户端与服务端连接起来,输入键值对:

    查询键值对:


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
10天前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
41 2
|
1月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
2月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
229 0
|
1月前
|
存储 前端开发 JavaScript
Go语言实战案例-项目实战篇:编写一个轻量级在线聊天室
本文介绍如何用Go语言从零实现一个轻量级在线聊天室,基于WebSocket实现实时通信,支持多人消息广播。涵盖前后端开发、技术选型与功能扩展,助你掌握Go高并发与实时通信核心技术。
|
2月前
|
负载均衡 监控 Java
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
在微服务架构中,高可用与稳定性至关重要。本文详解熔断、限流与负载均衡三大关键技术,结合API网关与Hystrix-Go实战,帮助构建健壮、弹性的微服务系统。
336 1
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
|
2月前
|
安全 Go 开发者
Go语言实战案例:使用sync.Mutex实现资源加锁
在Go语言并发编程中,数据共享可能导致竞态条件,使用 `sync.Mutex` 可以有效避免这一问题。本文详细介绍了互斥锁的基本概念、加锁原理及实战应用,通过构建并发安全的计数器演示了加锁与未加锁的区别,并封装了一个线程安全的计数器结构。同时对比了Go中常见的同步机制,帮助开发者理解何时应使用 `Mutex` 及其注意事项。掌握 `Mutex` 是实现高效、安全并发编程的重要基础。
|
2月前
|
数据采集 Go API
Go语言实战案例:使用context控制协程取消
本文详解 Go 语言中 `context` 包的使用,通过实际案例演示如何利用 `context` 控制协程的生命周期,实现任务取消、超时控制及优雅退出,提升并发程序的稳定性与资源管理能力。
|
2月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
10月前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
11月前
|
存储 Go 开发者
Go语言中的并发编程与通道(Channel)的深度探索
本文旨在深入探讨Go语言中并发编程的核心概念和实践,特别是通道(Channel)的使用。通过分析Goroutines和Channels的基本工作原理,我们将了解如何在Go语言中高效地实现并行任务处理。本文不仅介绍了基础语法和用法,还深入讨论了高级特性如缓冲通道、选择性接收以及超时控制等,旨在为读者提供一个全面的并发编程视角。
246 50

热门文章

最新文章