etcd的API介紹
阿新 • • 發佈:2019-01-04
etcd的API
1、核心API
目前,核心API以服務型別劃分為6大部分,具體參考包內proto檔案的定義:
github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.proto
KV:鍵值相關操作
對外提供的介面:
type KV interface {
// 存放.
Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error)
// 獲取.
Get(ctx context.Context, key string , opts ...OpOption) (*GetResponse, error)
// 刪除.
Delete(ctx context.Context, key string, opts ...OpOption) (*DeleteResponse, error)
// 壓縮rev指定版本之前的歷史資料.
Compact(ctx context.Context, rev int64, opts ...CompactOption) (*CompactResponse, error)
// 通用的操作執行命令,可用於操作集合的遍歷。Put/Get/Delete也是基於Do.
Do(ctx context.Context, op Op) (OpResponse, error)
// 建立一個事務,只支援If/Then/Else/Commit操作.
Txn(ctx context.Context) Txn
}
Watch:觀察者模式,監聽資料變化
對外提供的介面:
type Watcher interface {
// 監視key的變化,返回變化的結果
Watch(ctx context.Context, key string, opts ...OpOption) WatchChan
// 關閉所有監視器
Close() error
}
Lease:租約相關操作
對外提供的介面:
type Lease interface {
// 分配一個租約.
Grant(ctx context.Context, ttl int64 ) (*LeaseGrantResponse, error)
// 釋放一個租約.
Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error)
// 獲取剩餘TTL時間.
TimeToLive(ctx context.Context, id LeaseID, opts ...LeaseOption) (*LeaseTimeToLiveResponse, error)
// 獲取所有租約.
Leases(ctx context.Context) (*LeaseLeasesResponse, error)
// 續約保持啟用狀態.
KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error)
// 僅續約啟用一次.
KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error)
// 關閉續約啟用的功能.
Close() error
}
Cluster:叢集管理相關操作
對外提供的介面:
type Cluster interface {
// 列出叢集所有成員.
MemberList(ctx context.Context) (*MemberListResponse, error)
// 新增新成員到叢集中.
MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error)
// 移除一個叢集中的成員.
MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error)
// 更新一個叢集成員的地址.
MemberUpdate(ctx context.Context, id uint64, peerAddrs []string) (*MemberUpdateResponse, error)
}
Maintenance:維護操作
不常用,具體可參考包內檔案:`github.com/coreos/etcd/clientv3/maintenance.go`
Auth:使用者及許可權管理操作
不常用,具體可參考包內檔案:`github.com/coreos/etcd/clientv3/auth.go`
-
2、併發API
目前能操作的主要有兩部分:鎖和選舉。
Lock:分散式鎖
可參考包內proto定義:`github.com/coreos/etcd/etcdserver/api/v3lock/v3lockpb/v3lock.proto`
// proto定義的介面
type LockServer interface {
// 獲取一個鎖.
Lock(context.Context, *LockRequest) (*LockResponse, error)
// 釋放當前持有的鎖.
Unlock(context.Context, *UnlockRequest) (*UnlockResponse, error)
}
// 已提供的實現
type lockServer struct {
c *clientv3.Client
}
Election:選舉
可參考包內proto定義:`github.com/coreos/etcd/etcdserver/api/v3election/v3electionpb/v3election.proto`
// proto定義的介面
type ElectionClient interface {
// 競選.
Campaign(ctx context.Context, in *CampaignRequest, opts ...grpc.CallOption) (*CampaignResponse, error)
// 公告更新新的領導值.
Proclaim(ctx context.Context, in *ProclaimRequest, opts ...grpc.CallOption) (*ProclaimResponse, error)
// 返回最新的公告.
Leader(ctx context.Context, in *LeaderRequest, opts ...grpc.CallOption) (*LeaderResponse, error)
// 流式返回多個公告.
Observe(ctx context.Context, in *LeaderRequest, opts ...grpc.CallOption) (Election_ObserveClient, error)
// 退選領導地位.
Resign(ctx context.Context, in *ResignRequest, opts ...grpc.CallOption) (*ResignResponse, error)
}
// 已提供的實現
type electionServer struct {
c *clientv3.Client
}