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,打开服务端
  • 打开命令行,将客户端与服务端连接起来,输入键值对:

    查询键值对:


相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
相关文章
|
3天前
|
存储 Go
go语言中fmt格式化包和内置函数汇总
【7月更文挑战第10天】本文介绍fmt包和`Errorf`用于创建格式化的错误消息。`fmt`包还涉及一些接口,如`Formatter`、`GoStringer`、`ScanState`、`Scanner`和`Stringer`,支持自定义格式化和输入/输出处理。
16 1
|
3天前
|
Go
go语言中格式化输出的占位符
【7月更文挑战第10天】`fmt` 包在 Go 语言中用于格式化输出,包括不同类型的占位符:%v(默认格式)、%+v(带字段名的结构体)、%#v(Go语法表示)、%T(类型表示)、%%(百分号)。布尔值用%t,整数有%b、%c、%d、%o、%q、%x、%X和%U。浮点数和复数用%b、%e、%E、%f、%g、%G。字符串和字节切片用%s、%q、%x、%X。指针用%p。占位符可配合+、-、#、空格和0进行调整。宽度和精度控制输出格式,例如 %.4g 控制小数精度。Go 没有 `%u`,但无符号整数默认打印为正数。运算符包括逻辑、比较、加减、乘除、移位、按位和按位异或等。
16 1
|
1天前
|
安全 Go
Go语言map并发安全,互斥锁和读写锁谁更优?
Go并发编程中,`sync.Mutex`提供独占访问,适合读写操作均衡或写操作频繁的场景;`sync.RWMutex`允许多个读取者并行,适用于读多写少的情况。明智选择锁可提升程序性能和稳定性。示例展示了如何在操作map时使用这两种锁。
3 0
|
1天前
|
安全 Go 开发者
Go语言map并发安全使用的正确姿势
在Go并发编程中,由于普通map不是线程安全的,多goroutine访问可能导致数据竞态。为保证安全,可使用`sync.Mutex`封装map或使用从Go 1.9开始提供的`sync.Map`。前者通过加锁手动同步,后者内置并发控制,适用于多goroutine共享。选择哪种取决于具体场景和性能需求。
4 0
|
1天前
|
存储 安全 Java
Go语言中的map为什么默认不是并发安全的?
Go语言的map默认不保证并发安全,以优化性能和简洁性。官方建议在需要时使用`sync.Mutex`保证安全。从Go 1.6起,并发读写map会导致程序崩溃,鼓励开发者显式处理并发问题。这样做的哲学是让代码更清晰,并避免不必要的性能开销。
2 0
|
16天前
|
存储 关系型数据库 MySQL
|
9天前
|
Java 测试技术 Apache
《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)
【7月更文挑战第4天】Apache Log4j 是一个广泛使用的 Java 日志框架,它允许开发者控制日志信息的输出目的地、格式和级别。Log4j 包含三个主要组件:Loggers(记录器)负责生成日志信息,Appenders(输出源)确定日志输出的位置(如控制台、文件、数据库等),而 Layouts(布局)则控制日志信息的格式。通过配置 Log4j,可以灵活地定制日志记录行为。
25 4
|
10天前
|
运维 Java Apache
Java中的日志框架:Log4j与SLF4J详解
Java中的日志框架:Log4j与SLF4J详解
|
16天前
|
SQL 运维 关系型数据库
|
16天前
|
存储 关系型数据库 MySQL