ETCD3 和 ETCD2 性能比较

Server 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.client2版本中,因为是每一个key都进行一次etcd的set操作,这个操作是加锁的,所以,在一边遍历一边set的情况下会耗时很多在锁上面。

  • 在etcd.client3版本中,是把所有的conf分类后,每128个操作进行一次事务性执行,所以,性能增长很明显。

ETCD3 基本命令用法:

查看版本:

./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:

watch某个Key:

./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

ETCD3 go-clientv3 使用示例

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\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
        }
    }

}

你可能感兴趣的:(etcd)