(一) etcd3-server-API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(一) etcd3-server-API相关的知识,希望对你有一定的参考价值。

参考技术A 发送到etcd服务器的每个API请求都是gRPC远程过程调用。etcd3中的RPC根据功能分类为:

1、处理etcd key空间的API包括:

2、管理集群本身的API包括:

etcd3中的所有gRPC都遵循相同的格式。每个gRPC都有一个函数Name,该函数NameRequest作为参数并NameResponse作为响应返回。详细gRPC API描述:

来自etcd API的所有响应都有一个附加的响应头,其中包含响应的集群元数据:

Cluster_ID - 生成响应的集群的ID。

Member_ID - 生成响应的成员的ID。

Reversion - 生成响应时key-value存储的修订版。

Raft_Term - 生成响应时成员的Raft术语。

2.1      Key-Value

Key-Value 是KV API可以操作的最小单位。每个key-value对都有许多以 protobuf格式 定义的字段:

Key --- 以字节为单位的key, 不允许使用空ke'y。

Value --- 以字节为单位的value。

Version --- 版本是key的版本。删除version将重置为零,并且对key的任何修改都会增加其版本。

Create_Revision --- 最后一次创建key的版本号。

Mod_Revision --- 最后一次修改key的版本号。

Lease --- 附加到key的Lease的ID。如果Lease为0,表明没有将任何Lease附加到key。

2.2      Range   Request

使用Range API调用从KV存储中获取key,其中包含RangeRequest:

Key,Range_End --- 要获取的key范围。

Limit ---限制请求返回的最大key数量。当limit设置为0时,将其视为无限制。

Revision --- 用于key Range内的KV存储的版本范围限制。如果revision小于或等于零,则范围超过最新的key-value存储如果压缩修订,则返回ErrCompacted作为响应。

Sort_Order --- 请求倒序还是顺序。

Sort_Target --- 要排序的类型(key, value, version, create_version, mod_version)。

Serializable --- 设置范围请求以使用可序列化的成员本地读取。默认情况下,Range是可线性化的; 它反映了该集群目前的共识。为了获得更好的性能和可用性,为了换取可能的过时读取,可在本地提供可序列化范围请求,而无需与群集中的其他节点达成共识。

Keys_Only --- 仅返回key而不返回value。

Count_Only --- 仅返回range中key的计数。

Min_Mod_Revision --- key mod version的下限; 

Max_Mod_Revision --- key mod version的上限; 

Min_Create_Revision --- key create version的下限; 

Max_Create_Revision --- key create version的上限; 

2.3      Range   Response :

Header ---见ResponseHeader

Kvs --- 范围请求匹配的key-value对列表。当Count_Only设置为true时,Kvs为空。

More --- 表明RangeRequest中的limit为true。

Count --- 满足范围请求的key总数。

2.4      Put   Request

通过发出Put Request将key-value保存到KV存储中:

Key --- 放入key-value存储区的key的名称。

Value --- 与key-value存储中的key关联的值(以字节为单位)。

Lease ---与key-value存储中的key关联的Lease ID。Lease值为0表示没有Lease。

Prev_Kv --- 设置时,在从此Put请求更新之前使用key-value对数据进行响应。

Ignore_Value --- 设置后,更新key而不更改其当前值。如果key不存在,则返回错误。

Ignore_Lease --- 设置后,更新key而不更改其当前Lease。如果key不存在,则返回错误。

2.5      Put   Response

Header ---见ResponseHeader

Prev_Kv --- 由Putif Prev_Kv设置的key-value对PutRequest。

2.6      Delete Range Request

使用该DeleteRange呼叫删除key范围,其中DeleteRangeRequest:

Key,Range_End - 要删除的key范围。

Prev_Kv - 设置后,返回已删除key-value对的内容。

2.6    Delete Range Request

Deleted --- 已删除的key数。

Prev_Kv --- DeleteRange操作删除的所有key-value对的列表。

2.7      Transaction

事务是KV存储上的原子If / Then / Else构造。它提供了一个原语,用于将请求分组在原子块(即then / else)中,这些原子块的执行基于key-value存储的内容被保护(即if)。事务可用于保护key免受意外的并发更新,构建比较和交换操作以及开发更高级别的并发控制。

事务可以在单个请求中以原子方式处理多个请求。对于key-value存储的修改,这意味着商店的修订仅针对事务递增一次,并且事务生成的所有事件将具有相同的修订。但是,禁止在单个事务中多次修改同一个key。

所有交易都通过比较结合来保护,类似于“如果”声明。每次比较都会检查商店中的单个key。它可以检查值的缺失或存在,与给定值进行比较,或检查key的修订版本或版本。两种不同的比较可适用于相同或不同的key。所有的比较都是原子地应用的; 如果所有比较都为真,则说事务成功并且etcd应用事务的then / successrequest块,否则称其失败并应用else / failurerequest块。

每个比较都编码为一条Compare消息:

Result --- 逻辑比较操作的类型(例如,等于,小于等)。

Target --- 要比较的key-value字段。key的版本,创建修订版,修改版本或值。

Key --- 比较的key。

Target_Union --- 用于比较的用户指定数据。

在处理比较块之后,事务应用一个请求块。块是RequestOp消息:

Request_Range --- a RangeRequest。

Request_Put --- a PutRequest。钥匙必须是唯一的。它可能不与任何其他Puts或Deletes共享key。

Request_Delete_Range --- a DeleteRangeRequest。它可能不会与任何Puts或Deletes请求共享key。

总之,一个事务是通过TxnAPI调用发出的,它需要TxnRequest:

Compare --- 表示保护事务的术语组合的谓词列表。

Success --- 如果所有比较测试评估为true,则处理请求列表。

Failure --- 如果任何比较测试评估为false,则处理的请求列表。

客户端收到TxnResponse来自Txn呼叫的消息:

Success --- 无论是Compare评估为真还是假。

Responses --- Success如果成功,则应用块的结果对应的响应列表为true或Failure if成功为false。

该Responses列表对应于应用RequestOp列表的结果,每个响应编码为ResponseOp:

Watch API提供基于事件的接口,用于异步监视key更改。etcd3 watch通过持续watch当前或历史的给定修订,等待key的更改,并将key更新流回客户端。

3.1    Events

每个key的每次更改都用Event消息表示。一个Event消息同时提供更新的数据和更新的类型:

Type --- 事件的类型。PUT类型表示新数据已存储到Key中。DELETE表示Key已删除。

KV --- 与事件关联的KeyValue。PUT事件包含当前的kv对。kv.Version = 1的PUT事件表示创建key。DELETE事件包含已删除的key,其修改修订版设置为删除修订版。

Prev_KV --- 紧接事件之前修订的key的key-value对。为了节省带宽,只有在watch明确启用它时才会填写。

3.2    Watch streams

Watch是长时间运行的请求,并使用gRPC流来传输事件数据。 Watch streams 是双向的; 客户端写入流以建立监视和读取以接收监视事件。单个监视流可以通过使用每个监视标识符标记事件来复用许多不同的监视。这种多路复用有助于减少核心etcd集群的内存占用和连接开销。

Watch对事件做出三点保证:

有序 --- 事件按修订排序; 如果事件发生在已经发布的事件之前,则该事件将永远不会出现在watch上。

可靠 --- 一系列事件永远不会丢失任何事件的后续序列; 如果有事件按时间顺序排列为

原子 --- 事件清单保证包含完整的修订; 多个key上相同修订版的更新不会分成几个事件列表。

3.3    WatchCreateRequest

Key,Range_End --- 要watch的key范围。

Start_Revision --- 包含开始watch的可选修订版。如果没有给出,它将在修改监视创建响应标题修订版之后流式传输事件。可以从最后一次压缩修订开始watch整个可用事件历史记录。

Progress_Notify --- 设置后,如果没有最近的事件,watch将定期收到没有事件的WatchResponse。当客户希望从最近的已知修订版本开始恢复断开连接的watcher时,它非常有用。etcd服务器根据当前服务器负载决定发送通知的频率。

Fliters --- 要在服务器端过滤掉的事件类型列表。

Prev_Kv --- 设置后,watch会在事件发生之前接收key-value数据。这对于了解已覆盖的数据非常有用。

3.5    WatchCreateResponse:

Watch_ID --- 与响应对应的监视的ID。

Created --- 如果响应是针对创建监视请求,则设置为true。客户端应记录ID并期望在流上接收监视事件。发送给创建的watcher的所有事件都将具有相同的watch_id。

Canceled --- 如果响应是取消watch请求,则设置为true。不会向已取消的watcher发送更多事件。

Compact_Revision --- 如果watcher尝试watch压缩版本,则设置为etcd可用的最小历史版本。在压缩版本中创建watch程序或watcher无法跟上key-value存储的进度时会发生这种情况。watcher将被取消; 使用相同的start_revision创建新watch将失败。

Events - 与给定监视ID对应的顺序新事件列表。

3.6    WatchCancelRequest:

Watch_ID - 要取消的watch的ID,以便不再传输任何事件。

Lease是一种检测客户活跃度的机制。集群授予Lease生存时间。如果etcd集群在给定的TTL周期内没有收到keepAlive,则Lease到期。

为了将Lease绑定到key-value存储中,每个key可以附加到最多一个Lease。当Lease到期或被撤销时,附加到该Lease的所有key都将被删除。每个过期的key在事件历史记录中生成删除事件。

4.1   LeaseGrantRequest ( 获得Lease)

TTL --- 咨询生存时间,以秒为单位。

ID --- 请求的Lease ID。如果ID设置为0,则etcd将选择一个ID。

4.2    LeaseGrantResponse

ID - 授予的LeaseID。

TTL - 服务器为Lease选择的生存时间(以秒为单位)。

4.3    LeaseRevokeRequest

ID --- 要撤消的LeaseID。撤销Lease后,将删除所有附加的key。

4.4    LeaseRevokeResponse

4.5    LeaseKeepAliveRequest

使用通过LeaseKeepAliveAPI调用创建的双向流刷新Lease。当客户希望刷新Lease时,它会通过LeaseKeepAliveRequest流发送:

ID - 要保持活动的Lease的ID。

4.6    LeaseKeepAliveResponse

ID - 使用新TTL刷新的Lease。

TTL - Lease剩余的新生存时间(以秒为单位)。

nl:::1:一::一、01!iw。n:一1::ld一11一:一、::.,

一株基因型为AaBB的豌豆自花传粉后,其子一代基因型的比例为(  )
A. 1:1:1:1
B. 9:3:3:1
C. 1:2:l
D. 3:3:1:l

参考技术A 将两对相对性状分开考虑,Aa自交子一代基因型有AA、Aa和aa,比例为1:2:1,BB自交子一代基因型全为BB,二者综合,则子一代基因型比例为(1:2:1)×1=1:2:1,C正确,A、B、D错误.
故选:C.

以上是关于(一) etcd3-server-API的主要内容,如果未能解决你的问题,请参考以下文章

nl:::1:一::一、01!iw。n:一1::ld一11一:一、::.,

js 获取当前月和当前周的第一天和最后一天

获取一年中的第一天和最后一天

如何使用js获取某月的第一天和最后一天

测试一篇文章

python怎么获得每个月的第一天和最后一天