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

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 sorting
	ASCEND = 1; // lowest target value first
	DESCEND = 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)

下一节,事物,租约

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值