极客时间-Go进阶训练营|全新升级第4期|完结无密

Download:极客时间-Go进阶训练营|全新升级第4期 GO高级进阶 ETCD 操作
etcd是分布式系统中高可用键值(key-value)存储数据库,有几大重要的特征:
简单:安装简单、提供了gRPC API交互
安全:支持TLS加密通道的规范
快速:基准10000次写入/秒
可靠:基于raft算法,实现分布式系统数据的可用性和一致性
etcd是用Go编写的,它使用Raft一致性算法来管理高可用日志
linux 下安装etcd
需要安装go 1.13以上版本
cd $GOPATH/src
mkdir go.etcd.io && cd go.etcd.io
git clone https://github.com/etcd-io/etcd
cd etcd
./build
使用build脚本构建后生成etcd 和etcdctl 可执行程序,etcdctl是一个命令行客户端
go如何操作etcd
首先引用etcd库
import "go.etcd.io/etcd/clientv3"
连接etcd服务器
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"192.168.1.109:2379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
fmt.Printf("connect to etcd failed, err:%v\n", err)
return
}
fmt.Println("connect to etcd success")
defer cli.Close()
通过put将key和value存储在etcd
// put
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
_, err = cli.Put(ctx, "server1", "192.168.3.10")
cancel()
if err != nil {
fmt.Printf("put to etcd failed, err:%v\n", err)
return
}
// 通过get获取key的值
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
resp, err := cli.Get(ctx, "server1")
cancel()
if err != nil {
fmt.Printf("get from etcd failed, err:%v\n", err)
return
}
for _, ev := range resp.Kvs {
fmt.Printf("%s:%s\n", ev.Key, ev.Value)
}
etcd应用场景
【极客时间-Go进阶训练营|全新升级第4期|完结无密】etcd比较常见用于服务器发现,服务发现是分布式系统一个不可缺少的关键组件,通过开源的的框架zookeeper, etcd ,consul 等来实现服务发现,本文主要介绍如何通过go操作基于etcd构建服务发现。

    推荐阅读