Go語言操作etcd的示例詳解
etcd介紹
etcd是使用Go語言開發(fā)的一個開源的、高可用的分布式key—value存儲系統(tǒng),可以用于配置共享和服務(wù)的注冊和發(fā)現(xiàn),基于raft算法實現(xiàn)具有強一致性
etcd中涉及了數(shù)據(jù)一致性、多版本并發(fā)控制、watch監(jiān)控、磁盤IO讀寫等知識點
etcd的特性:
1.簡單:etcd的安裝簡單,為用戶提供了HTTP的接口,使用也很簡單
2.存儲:etcd的基本功能,基本信息存儲在文件中
3.Watch機制:watch指定的鍵的更改會通知
4.安全通信:SSL證書驗證
5.高性能:2K/s讀操作,提供了基準(zhǔn)測試的工具
6.一致可靠:raft一致性算法
類似的項目有zookeeper和consul。
etcd具有以下的特點:
1.完全復(fù)制:集群中的每個節(jié)點都可以使用完整的存檔
2.高可用性:Etcd可用于避免硬件的單點故障或網(wǎng)絡(luò)問題
3.一致性:每次讀取都會返回跨多主機的最新寫入
4.簡單:包括一個定義良好、面向用戶的API(gRPC)
5.安全:實現(xiàn)了帶有可選的客戶端證書身份驗證的自動化TLS
6.快速:每秒10000次寫入的基準(zhǔn)速度
7.可靠:使用Raft算法實現(xiàn)了強一致、高可用的服務(wù)存儲目錄
etcd的常見分布式場景:
1.鍵值對存儲
2.服務(wù)注冊與發(fā)現(xiàn)
3.消息訂閱與發(fā)布
4.分布式鎖
go語言操作etcd
首先在后臺啟動etcd

寫一段go代碼
package main
import (
"context"
"fmt"
clientv3 "go.etcd.io/etcd/client/v3"
"time"
)
func main() {
// 創(chuàng)建客戶端,連接etcd
cli, err := clientv3.New(clientv3.Config{
Endpoints: []string{"127.0.0.1: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()
str := `[{"path":"d:/logs/s4.logs","topic":"s4_logs"},{"path":"d:/logs/web.logs","topic":"web_logs"}`
// put操作
_, err = cli.Put(context.TODO(), "collect_log_conf", str)
if err != nil {
fmt.Printf("put to etcd failed, err:%v\n", err)
return
}
get操作
resp, err := cli.Get(context.TODO(), "collect_log_conf") // 獲取指定Key的值
if err != nil {
fmt.Printf("get to etcd failed")
return
}
for _, ev := range resp.Kvs {
fmt.Printf("key:%s,value:%s\n", ev.Key, ev.Value)
}
delete 刪除key
//if _,err = cli.Delete(context.TODO(), "testetcd");err != nil{
// fmt.Println("delete key failed")
//}else{
// fmt.Println("delete key success")
//}
}也可以直接使用ectdctl工具查看key
etcdctl.exe --endpoints=127.0.0.1:2379 get collect_log_conf

到此這篇關(guān)于Go語言操作etcd的示例詳解的文章就介紹到這了,更多相關(guān)Go操作etcd內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Linux系統(tǒng)中安裝Go語言的詳細(xì)教程
這篇文章主要介紹了在Linux系統(tǒng)中安裝Go語言的詳細(xì)教程,由于國內(nèi)很多人對谷歌的盲目追捧,導(dǎo)致Go語言在國內(nèi)的人氣遠(yuǎn)超國外...需要的朋友可以參考下2015-06-06
vscode上搭建go開發(fā)環(huán)境詳細(xì)完整過程
這篇文章主要給大家介紹了關(guān)于vscode上搭建go開發(fā)環(huán)境的詳細(xì)完整過程,Go語言或?qū)⒊蔀樾碌闹髁﹂_發(fā)語言,Go是google開發(fā)的一種靜態(tài)強類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言,所以我們有必要學(xué)習(xí)并掌握它,需要的朋友可以參考下2023-10-10
Golang程序中使用Prometheus的client_golang庫
這篇文章主要介紹了Golang程序中使用Prometheus的client_golang庫,Prometheus 是一個開源的監(jiān)控和警報工具包,用于收集和處理應(yīng)用程序和系統(tǒng)的指標(biāo)數(shù)據(jù)。Prometheus 提供了多種客戶端庫,可以輕松地集成到各種編程語言中2023-04-04
Go語言使用protojson庫實現(xiàn)Protocol Buffers與JSON轉(zhuǎn)換
本文主要介紹Google開源的工具庫Protojson庫如何Protocol Buffers與JSON進(jìn)行轉(zhuǎn)換,以及和標(biāo)準(zhǔn)庫encoding/json的性能對比,需要的朋友可以參考下2023-09-09

