ETCD 3とETCD 2の性能比較
2835 ワード
Server
ETCD2
ETCD3
ETCD2
1.698331852s = 1698.331852ms
error
ETCD3
20.87944695s = 20879.44695ms
156.3686ms
etcd.Client 2バージョンでは、keyごとにetcdのset操作が1回行われているため、この操作はロックされているため、回りながらsetする場合はロックに時間がかかることが多い. etcd.Client 3バージョンでは、すべてのconfを分類した後、128操作ごとにトランザクション実行を行うため、パフォーマンスの増加が顕著である.
KVを取得
すべてのKVを取得
一定範囲のKVを取得
書き込みKV
KVを削除
一定範囲のKVを削除
ウォッチのキー:
watch一定範囲内のKey
watchある文字列をはじめとするすべてのKey
一定時間のリースを作成します.単位はsです.
あるKVにリースを付与する
リース情報の表示
リースを保持する
リースを取り消すと、リースを取り消すと同時に、リースを付与されたKVが削除されます
ETCD2
ETCD3
ETCD2
1.698331852s = 1698.331852ms
error
ETCD3
20.87944695s = 20879.44695ms
156.3686ms
: 2000 。etcd3 TXN 128 , , etcd3 128 txn , 128 。 key , 2000 。
結論
ETCD 3基本命令の使い方:
バージョンの表示:
./etcdctl version
GET:
KVを取得
./etcdctl get key
すべてのKVを取得
./etcdctl get --from-key ''
一定範囲のKVを取得
./etcdctl get key1 keyn
PUT:
書き込みKV
./etcdctl put key value
DEL:
KVを削除
./etcdctl del key
一定範囲のKVを削除
./etcdctl del key1 keyn
WATCH:
ウォッチのキー:
./etcdctl watch key
watch一定範囲内のKey
./etcdctl watch key1 keyn
watchある文字列をはじめとするすべてのKey
./etcdctl watch --prefix=true string
LEASE:
一定時間のリースを作成します.単位はsです.
./etcdctl lease grant n
あるKVにリースを付与する
./etcdctl put --lease=name key value
リース情報の表示
./etcdctl lease timetolive name
リースを保持する
./etcdctl lease keep-alive name
リースを取り消すと、リースを取り消すと同時に、リースを付与されたKVが削除されます
./etcdctl lease revoke name
ETCD 3 go-clientv 3使用例
func main() {
cli, err := clientv3.New(clientv3.Config{
Endpoints: endpoints,
DialTimeout: dialTimeout,
})
if err != nil {
println(err)
}
defer cli.Close()
//PUT
if _, err := cli.Put(context.TODO(), "foo", "bar"); err != nil{
fmt.Println(err.Error())
}
//GET
if resp, err := cli.Get(context.TODO(), "foo"); err != nil {
fmt.Println(err.Error())
} else {
fmt.Println("resp: ", resp)
}
//TXN
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
_, err = cli.Txn(ctx).
If(clientv3.Compare(clientv3.Value("key"), ">", "abc")).
Then(clientv3.OpPut("key", "XYZ")).
Else(clientv3.OpPut("key", "ABC")).
Commit()
cancel()
if err != nil {
fmt.Println(err)
}
//Watch
rch := cli.Watch(context.Background(), "", clientv3.WithPrefix())
for wresp := range rch {
for _, ev := range wresp.Events {
fmt.Printf("%s %q : %q
", ev.Type, ev.Kv.Key, ev.Kv.Value)
}
}
}