0x01 功能分类

Etcd作为一个分布式一致性的KV存储组件,现在的功能远不止于KV存储了。详细了解下其功能特点,有利用在使用它时做出最合适的选择。

通过etcdctl -h命令可以看到有如下的特性。

  1. 基本的KV操作 get put txn del watch
  2. 数据操作 碎片整理 defrag 压缩事件 compaction
  3. 端点管理 endpoint
  4. 租期管理 lease
  5. 锁 lock
  6. 选举 elec
  7. 成员管理 member
  8. 转移leader move-leader
  9. 角色管理 role
  10. 快照管理 snapshot
  11. 运维相关 告警 alarm,状态检测 check,镜像 make-mirror
  12. 认证管理 auth
  13. 用户管理 user

居然已经有这么多的特性,不得不感叹开源社区力量的强大。之前也觉得ZooKeeper有许多不错的特性,但因为社区不活跃了,与Etcd对比,已经落后太多了。

0x02 基本的KV操作

基本的KV包含查询get、写入put、删除del、监听watch和事务txn。

2.1 get

仅仅一个get就支持了许多选项。先不管全局的选项。

  1. --consistency 2个取值"l"或者"s",这涉及到了分布式中两种一致性模型,见参考1。简单理解l为linearizability,表示所有客户端任意一时间看到的数据都是一致的。而s代表sequential,只保证一个客户端自己的操作是有序的,自己写的,后面读能读到新的。
  2. --count-only 默认为false,为true时,需要和全局的–write-out="fields"联合使用,只返回查询的数量。这可以适用于某些只需要数量的场景,避免传输大量数据。
  3. --from-key 查询从某个key开始的所有key,与--limit联合使用,可以实现分页机制,同样可以减小网络传输的数据量。
  4. --keys-only 默认为false,查询默认会返回key和value,同样某些场景下只需要key,也可以减轻网络压力。
  5. --limit 限制获取的key数量。
  6. --order 支持排序方式,升序、降序。
  7. --prefix 按照前缀方式获取。类似mysql中的前缀匹配。
  8. --print-value-only 默认为false,只返回值。意义同前述。
  9. --rev 获取特定revsion的值。Etcd是支持子版本的,k8s就是利用这个机制实现pod回滚的。
  10. --sort-by 指定排序的键。支持创建时间、key、修改时间、值和版本。

同时注意到get也支持一次获取多个,也支持一个范围。通过查看源码可以知道,这在Etcd协议中是通过range来实现的。

2.2 put

put的选项就少了许多。

  1. --ignore-lease 也就是不更新lease。
  2. --ignore-value 不更新value。
  3. --lease 指定lease的ID。
  4. --prev-kv 返回修改前的key/value。

lease是Etcd支持临时节点的一种实现方式,ZooKeeper中的“临时节点”。相当于租约,过期了数据就被清除了。

2.3 del

删除,选项也比较少。

  1. --from-key 与get类似,支持批量删除。
  2. --prefix 默认为false,打开时代表通过前缀删除。
  3. --prev-kv 返回删除前的key和value。

2.4 watch

watch用来监听一个key或者一系列key的变化,比如被PUT、DEL。可以基于这个来实现事件通知,一次watch是一直有效的(至少从etcdctl看来是这样的),与ZooKeeper不同。
选项也不多。

  1. --interactive 默认为false,打开是为交互模式。可以一次运行watch多个节点。测试起来非常方便。
  2. --prefix 同前面。watch指定前缀的key。
  3. --prev-kv 同前,变化时,返回变化前的。
  4. --progress-notify 默认为false,打开时代表server端周期性发送响应,即使数据没有变化。推送的间隔是服务端根据自己的负载情况确定的,对客户端来说不是很明确。
  5. --rev 代表watch特定子版本起始值。

2.6 txn

txn是事务操作。可以一次请求中进行多个put、del操作。
一般是开启--interactive模式。注意的是前置判断完成后,要按两个回车结束当前的操作。

$ etcdctl txn --interactive
compares:
value("user1") = "ok1" // 输入后按两次entersuccess requests (get, put, del):
put user1 "ok" // 输入后按两次enterfailure requests (get, put, del):
put user2 "ok2" // 输入后按两次enterFAILUREOK

0x03 小结

Etcd基本的KV操作提供了非常丰富的特性,可以灵活应用于各种场景。对相关服务设计提供了不错的参考。下一步会继续学习后面的内容。

0x04 参考

  1. https://cse.buffalo.edu/~stevko/courses/cse486/spring13/lectures/26-consistency2.pdf

Etcd特性学习1——KV操作相关推荐

  1. jdk7新特性学习笔记

    jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...

  2. Java8新特性学习_001_(Lambda表达式,函数式接口,方法引用,Stream类,Optional类)

    目录 ■代码 ■代码运行结果 ■代码说明 ・44行:Stream的.foreach方法ー参数类型:函数式接口 ・82行:Interface中,default方法 ・92行   Stream的.max方 ...

  3. Java8新特性学习笔记

    Java8新特性学习笔记 文章目录 Java8新特性学习笔记 一.接口和日期处理 1.接口增强 1.1.JDK8以前 VS JDK8 1)接口定义: 1.2.默认方法(default) 1)默认方法格 ...

  4. eclipsevue代码怎么运行_[Java教程]使用eclipse初步学习vue.js操作

    [Java教程]使用eclipse初步学习vue.js操作 0 2017-11-26 19:00:06 一.vue.js的初步认识 https://unpkg.com/vue ">vu ...

  5. 以python入门教程新世界-国外旅行也不忘学习Python:Python 操作列表001

    Python从小白到入门 ~ Part 4 操作列表 001 Python是一门杰出的语言,值得你去学习,咱们现在就开始吧.--<Python编程从入门到实践>P44-P50 人生--这个 ...

  6. 【Python基础】零基础学习Python列表操作

    作者:来自读者投稿 整理:Lemon 出品:Python数据之道 " 「Python数据之道」导读:本文来自读者投稿,Python数据之道早些时候也发过 Python 列表相关的文章,可以前 ...

  7. python设置文件权限_PYTHON学习之文件操作;

    PYTHON学习之文件操作: 文件内容替换 for line in flielinput.input("filepath",inplace=1): line = line.repa ...

  8. PyTorch框架学习三——张量操作

    PyTorch框架学习三--张量操作 一.拼接 1.torch.cat() 2.torch.stack() 二.切分 1.torch.chunk() 2.torch.split() 三.索引 1.to ...

  9. c语言行列坐标是先行后j,C语言学习之行列操作

    C语言学习之队列操作 本文件为队列操作的接口: /*queue.h*/ #ifndef _SEQQUEUE_H_ #define _SEQQUEUE_H_ #define QUEUE_MAX 15 t ...

最新文章

  1. Android Studio导入github项目详解
  2. 什么地方容易刷出ak_男人会用什么理由拒绝表白?
  3. linux串口tx缓冲区大小,[Linux C]自己写的串口缓冲区
  4. Java之volatile
  5. scale data:线性空间映射
  6. atitit.软件开发--socket框架选型--netty vs mina j
  7. 云桌面终端_云桌面是否真的有被夸大,看完你就知道了
  8. myeclipse安装使用svn
  9. win10系统无法登录ftp服务器失败,Win10系统下ftp连接失败提示“连接已超时”如何解决?...
  10. stm32数据手册boot_stm32f103中文手册.pdf
  11. php网站安装有密钥,win10安装时跳过密钥
  12. matlab中的textscan函数
  13. 2019春季学期个人总结
  14. A_A03_007 CH32串口软件安装与CH32程序串口下载
  15. Flutter如何有效地退出程序
  16. 2022年中国农业现代化发展现状
  17. arm linux not syncing,Kernel panic - not syncing: No init found(busybox制作根文件
  18. 如何学习VB最新总结
  19. Jenkins Pipelin扩展
  20. Symbian OS SDKs简介(转)

热门文章

  1. java中自加(++)和自减(--)运算符
  2. shell脚本中的结构化命令(if-then-else、case、for、while、until) 脚本中的循环控制
  3. git支持的协议大全
  4. APISpace 身份证识别API
  5. 微信小程序开发【一】-- 初识小程序
  6. 用双眼无法扑捉 索尼Z2的细节改动
  7. 【AFSA TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】
  8. 浅谈餐饮业如何实施ERP(转)
  9. ModuleNotFoundError: No module named xxx 的原因和万能解决办法
  10. css怎么做向左拉伸动画_CSS核心动画技巧:重力,挤压和拉伸