1. 程式人生 > >etcd的API介紹

etcd的API介紹

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
}