0

基于Etcd的配置中心搭建

 2 years ago
source link: https://zasy.github.io/2018/10/17/project-1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

基于Etcd的配置中心搭建

发表于 2018-10-17

| 阅读次数:

字数统计:

|

阅读时长 ≈

  1. 基于etcd的搭建配置中心

    • etcd是关键数据的分布式可靠kv存储。主要用于一些基础组件事务性数据的存储,强调数据和事务的一致性和可靠性。
    • 特点
      • 简单,user-facing API(gRPC)
      • 安全,automatic TLS 认证
      • 快速,10000 writes/sec的速率
      • 可靠,Raft分布式算法
  2. 分布式一致性算法

    1. Raft一致性算法

      • 节点的三个状态:跟随者、候选者、领导者。三个之间的转换关系如图。

      • 跟随者可以接受候选者的vote_rpc,根据版本号和任期号投出。可以接受领导者的心跳包,维持其leader状态。当timeout时间没收到包时,会转变为候选者状态,像其他节点发起投票。

      • 候选者,收到大多数节点的投票,会转变为领导者。在选举过程中发现任期数比自己高的候选者,会转变为跟随者。如果选举超时,会重新发起投票

      • 领导者,发现任期比自己高的节点会变为跟随者。会发送心跳包维持自己的领导地位;

    2. 领导人选举

      • 启动时的随机timeout时间
      • 增加自己的任期号,转变为候选人状态,发送请求投票RPCs
      • 收到客户端请求时,并行发起附加条目RPCs给其他服务器,当这条日志被其他服务器复制后,领导者才会加入到它的状态机中,返还结果给客户端。
      • 领导人处理不一致是通过强制跟随者直接复制自己的日志来解决了。这意味着在跟随者中的冲突的日志条目会被领导人的日志覆盖
  3. 服务中配置的动态下发的结构

  4. 主要代码结构和细节

    1. 本地缓存啊
    2. 起watch监控对应的配置
    3. 替换本地的配置 多线程同步的问题 读写锁
type Watcher interface {
AddEntry(key string, data []byte) error
DeleteEntry(key string) error
GetPrefix() string
}
  1. 具体自己提供结构的主要能力
  • 不同的本地配置结构实现该三个接口就可以快速的接入watcher配置的能力
  • watch结构内会初始化 new client, 对于本地缓存的配置。 会先load_conf 一把,然后会开始开启watch对应的配置
  • addEntry 具体配置修改添加本地配置
  • delete 参数本地的配置
  • getPrefix 配置本地prefix的能力

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK