1 gRPC Services 

发送到etcd服务器的每个API请求都是一个gRPC。

在etcd3中的RPCs会根据功能分类到不同的service中。

1.1 Services important for dealing with etcd’s key space include(处理etcd键值空间比较重要的service有以下三点):

  • KV - Creates, updates, fetches, and deletes key-value pairs.(键值的增删改查)
  • Watch - Monitors changes to keys.(监查-watch操作)
  • Lease - Primitives for consuming client keep-alive messages.(租约)

1.2 Services which manage the cluster itself include(管理集群的service)

  • Auth - Role based authentication mechanism for authenticating users.(身份验证机制,用于验证用户)
  • Cluster - Provides membership information and configuration facilities. (提供成员资格信息和配置工具)
  • Maintenance - Takes recovery snapshots, defragments the store, and returns per-member status information.(维护)

2 Requests and Responses,请求与响应

service KV {Range(RangeRequest) returns (RangeResponse)...
}# 在etcd中的所有的rpc都遵循相同的格式,如上所示,并且所有的响应都需要一个响应头,如下所示:message ResponseHeader {uint64 cluster_id = 1;uint64 member_id = 2;int64 revision = 3;uint64 raft_term = 4;
}# Cluster_ID  - 应用程序可以读取Cluster_ID或Member_ID字段,以确保它与预期的群集(成员)进行通信;集群id.
# Member_ID   - 应用程序可以读取Cluster_ID或Member_ID字段,以确保它与预期的群集(成员)进行通信;成员id.
# Revision    - 应用程序可以使用该Revision字段来了解键值存储的最新版本;
# Raft_Term   - 应用程序可以Raft_Term用来检测集群何时完成新的领导者选举;

3 Key-Value API,KV_V3_API

3.1 键值对

# 在etcd中都是以键值对的形式存储的,所以最小的操作单位就是key-value的形式,在grpc的表现方式如下所示,下面的message代表一个键值对message KeyValue {bytes key = 1;int64 create_revision = 2;int64 mod_revision = 3;int64 version = 4;bytes value = 5;int64 lease = 6;
}# Key             - byte 数据类型不允许空
# Value           - byte 数据类型不允许空
# Version         - 操作时的版本
# Create_Revision - revision of the last creation on the key.
# Mod_Revision    - revision of the last modification on the key.
# Lease           - 租约ID,如果为0,则不存在租约

3.2 增,注意是range的概念,由key和range_end组成

#通过range 来获取KV的值,message如下所示:message RangeRequest {enum SortOrder {NONE = 0; // default, no sortingASCEND = 1; // lowest target value firstDESCEND = 2; // highest target value first}enum SortTarget {KEY = 0;VERSION = 1;CREATE = 2;MOD = 3;VALUE = 4;}bytes key = 1;bytes range_end = 2;int64 limit = 3;int64 revision = 4;SortOrder sort_order = 5;SortTarget sort_target = 6;bool serializable = 7;bool keys_only = 8;bool count_only = 9;int64 min_mod_revision = 10;int64 max_mod_revision = 11;int64 min_create_revision = 12;int64 max_create_revision = 13;
}#收到的response message如下所示:message RangeResponse {ResponseHeader header = 1;repeated mvccpb.KeyValue kvs = 2;bool more = 3;int64 count = 4;
}

3.3 改:

#request
message PutRequest {bytes key = 1;bytes value = 2;int64 lease = 3;bool prev_kv = 4;bool ignore_value = 5;bool ignore_lease = 6;
}# response
message PutResponse {ResponseHeader header = 1;mvccpb.KeyValue prev_kv = 2;
}

3.4 删:

#request
message DeleteRangeRequest {bytes key = 1;bytes range_end = 2;bool prev_kv = 3;
}#response
message DeleteRangeResponse {ResponseHeader header = 1;int64 deleted = 2;repeated mvccpb.KeyValue prev_kvs = 3;
}

4 gRPC gateway

# put
url = 'http://127.0.0.1:12379/v3/kv/put'
data = '{"key": "test", "value": "test"}'
response = requests.post(url,data)
text = json.loads(response.text)
print(text)# range
url = 'http://127.0.0.1:12379/v3/kv/range'
data = '{"key": "test"}'
response = requests.post(url,data)
text = json.loads(response.text)
print(text)

5 gRPC-python(https://etcd3-py.readthedocs.io/en/latest/

pip install etcd3-py
安装过程中的一个问题:
Package 'aiohttp' requires a different Python: 3.5.2 not in '>=3.5.3'
pip3 install async-timeout==2.0.1
pip3 install aiohttp==2.2.0
then OK.....from etcd3 import Client
client = Client('127.0.0.1', 12379)
print(client.version())
client.put('foo', 'bar')
print(client.range('foo').kvs)

下一节,事物,租约

分布式学习(6)etcd@3@ API v3 gRPC_range,put,deleterange相关推荐

  1. 分布式学习(7)etcd@3@ API v3 gRPC_事务,租约

    一.ETCD 之 事务 在etcdv3中,事务就是一个原子的.针对key-value存储操作的If / Then / Else 结构,事务提供了一个原语,用于请求归并到一起放在原子块中,例如then/ ...

  2. Google Maps API V3学习--- 简单地图显示

    技术发展日新月异,为了与时俱进,不让自己很快的落伍,正好项目有所需要,就学习了下 新发布的Google Maps API V3. V3相对于V2存在许多改变,比如在地图的加载上,尤其是手机浏览器访问的 ...

  3. 谷歌地图api v3学习之:起步

    最近公司项目需要用到地图搜索功能,首先考虑的是gmap(谷歌地图api),一开始觉得它很神秘很难,但经过几天的研究发现其实很简单.谷歌官网api写的很详细,一目了然 .在此用的是version3版本, ...

  4. etcd http API

    在docker中启动etcd 参考 https://etcd.io/docs/v3.5/op-guide/container/ 启动后,假定服务监听在192.168.1.21:2379. 基本示例 r ...

  5. aes加密 java_Java中的微信支付(2):API V3 微信平台证书的获取与刷新

    1. 前言 在Java 中的微信支付(1):API V3 版本签名详解一文中胖哥讲解了微信支付 V3 版本 API 的签名,当我方(你自己的服务器)请求微信支付服务器时需要根据我方的API 证书对参数 ...

  6. 微信支付API V3版本JAVA开发指南

    微信支付版本V3的Demo,在官方上下载下来,压根就是不能直接用的东西,你要想学会用,你就得一层一层的看源码,看文档,要求你事无巨细的做一个接入者. 如果接入API需要让人看源码来理解,我觉得是一件让 ...

  7. Go 分布式学习利器(16) -- go中可复用的package构建

    通过本文,你将了解go 语言中如何将自己的package构建到项目中 以及如何将远程(github)的package构建到项目中. 1. 构建本地的package package 是可复用模块的基本单 ...

  8. Redis学习笔记 - 数据类型与API(1)Key

    Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令 含义 时间复杂度 keys 查找所有符合给定模式 pattern 的 key O(N), N 为数据库中 k ...

  9. Java中的微信支付(2):API V3 微信平台证书的获取与刷新

    1. 前言 在Java 中的微信支付(1):API V3 版本签名详解一文中胖哥讲解了微信支付 V3 版本 API 的签名,当我方(你自己的服务器)请求微信支付服务器时需要根据我方的API 证书对参数 ...

最新文章

  1. vue.js安装过程(npm安装)
  2. Android Studio 怎样打JAR包
  3. 【附可运行代码】剑指 Offer 12. 矩阵中的路径
  4. java 实现excel 导出功能
  5. cude的__ldg使用
  6. 记一次git amend事故处理方案
  7. Java中的 WeakReference 和 SoftReference
  8. led灯光衰怎么解决_如何解决LED灯具照明光衰问题
  9. java如何解析word大纲_Java POI 解析word文档
  10. Spark键值对RDD的转化操作
  11. python 数字类型判断_Python中 各种数字类型的判别(numerica, digital, decimal)
  12. 网站漏洞修复之CSRF跨站攻击
  13. 如何使用python进行社交网络分析
  14. CTF php反序列化总结
  15. 热水bot协议_如何设计Bot协议
  16. ElasticSearch教程——proximity match 近似匹配
  17. Typora安装包64位---百度网盘下载
  18. 电路板元件符号及名称概述
  19. 百度天气预报接口使用详细
  20. Android ocr识别文字介绍(文字识别)

热门文章

  1. TortoiseGit(小乌龟) git did not exit cleanly (exit code 1)
  2. erlang使用c语言开发的吗,Erlang语言作者告诉你什么才是编程最好的方法
  3. Ubuntu18.04系统安装及深度学习框架搭建
  4. web前端工程师的分工安排
  5. java properties map_为什么java.util.Properties实现Map而不是Map
  6. 小重山·斯卡波罗集市
  7. R语言如何做FDR校正(21)
  8. 这个日期格式是什么? 2011-08-12T20:17:46.384Z
  9. xmanager 5 linux 6.5,工欲善其事必先利其器 —— Xmanager Enterprise 5 和 RealVNC 5/6 介绍...
  10. TI 毫米波雷达学习网站链接整理