关于go:极客时间Go进阶训练营全新升级第4期完结无密

61次阅读

共计 1199 个字符,预计需要花费 3 分钟才能阅读完成。

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 利用场景

etcd 比拟常见用于服务器发现,服务发现是分布式系统一个不可短少的要害组件, 通过开源的的框架 zookeeper, etcd ,consul 等来实现服务发现,本文次要介绍如何通过 go 操作基于 etcd 构建服务发现。

正文完
 0