最近几个城市分别都开始了全员核酸和封城的规定,只进不出火车已经全部停运了,一个有一千多万的城市要快速的将所有的人口都 “核算” 一遍的任务其实是艰巨的,你很难想象70-80岁的人可能要在半夜12点去做核酸,而更有意思的是,一个城市在工作日街上没有人,每个中学,小学门口都在排队,排队做核酸,可能你早上7:00去排队,到下午还没有做上,在冷风里面站上几个小时,十几个小时。这里管理就至关重要了,有的居民小区管理的井井有条,那个楼的人下楼做核酸,那个楼和去银行发号一样,没有号的不能做,有的小区就属于无人管理,反正你不做转天你的 “绿码”, 就变黄了。因为插队做核酸而大打出手的新闻也是在各种微信群里面传播着。
胡说八道完的说说正经的东西了,ETCD 一个分布式键值数据库,必然有他应用的场景,与传统的数据库不同,ETCD 其实是一个与应用程序基础架构密切有关的基础性数据库。应用的场景也与普通键值类的数据库不同。
总结ETCD的使用场景,主要有
1 服务注册与发现
2 消息发布和订阅
3 负载均衡
4 分布式通知与消息调配
5 分布式锁
6 分布式队列
7 集群绑定与选主,保证集群正常运行判定
基于以上的信息,实际上ETCD 本身的数据库功能是要配合他主要的关键点分布式,分布式协议RAFT 来围绕的。
1 服务的注册和发现
数据库ER可能对这些不是很熟悉,但对于程序人员这个是一个程序架构里面必不可少的东西,每个应用服务中提供了相应服务的和对应的服务的监听地址,通过简便的标称就可以对这些服务提供得连接快速获得。
应用系统中目前常用的DOCKER服务的发布的模式,让一个服务的扩充会很迅速,而随着产生的问题,新添加的信息如何进行扩散和辨别他的有效性,就是一个问题,这个问题可以通过ETCD将信息目录话的存储,在使用服务的过程中,只要从服务目录下查找可用的服务信息进行访问就可以了。
这里ETCD 主要在这个系统里面主要的作用
1 信息的写入与在ETCD 分布式节点中的信息的分发
2 信息的访问,对于写入ETCD中的信息的共享和访问
2 消息的发布与订阅 (4 分布式通知与消息调配)
微服务系统中,组件之间通信是通过消息的发布和订阅的机制来完成的
如在ETCD中管理配置信息的更新,可以在ETCD中存储配置信息,在服务端启动时可以一次性获得信息,并且在ETCD中配置wathcer 服务,在配置完后,信息如果有变化可以直接通知订阅信息的服务端。
这里ETCD主要的功能在于信息的汇总和信息的发布,此时ETCD作为一个信息收集中心和信息的集散地,保证每一个时刻,其他想获取这些变动信息的点都可以获得信息。
3 负载均衡
通过在ETCD中保存多个服务节点的信息,在程序中轮训访问服务节点的信息达到客户访问服务节点的均衡负载。通过ETCD 来对服务提供的位置进行健康检查,并动态的更新服务节点的状态。
5 分布式锁 6 分布式队列
分布式锁分布式锁主要的功能点在两点 1 时序控制 2 根据时序控制时的独占 (锁)ETCD 中提供了一套实现分布式锁的功能实现,通过设置preExist值来控制当多个请求创建同一个目录时,只有一个请求会被相应,从而保证多节点请求时只有一个节点能成功。
而独占的实现就是时序控制,根据先来后到的原则,先到的申请会进入到队列中,获得锁的顺序也是通过时序来进行控制的。
分布式锁和分布式不同实现的地方在于在/queue 目录中创建condition 节点,与传统数据库中的 子事务类似,只有在子队列中的任务都完成后, 主队列的任务才开始工作,这样可以将多个子任务完成作为主任务开始工作的条件,晚餐分布式队列的工作。
7 集群监控与leader竞选
大部分分布式系统通过ETCD作为中间件,通过ETCD分布式协议已经其中的功能来判断涉及节点的工作状态,并导向对失败的主节点进行切换的工作, 通过wather机制以及TTL KEY 功能,通过向ETCD发送信息为判断的条件,同时辅助以上面提到的分布式锁,在各个节点都要提升为主节点时,通过ETCD的分布式锁,来完成分布式中唯一LEADER的选举成功的功能。
ETCD 以上的7种功能,有的功能雷同但使用的方式和在应用程序架构中的位置和功能不同,有些如最后的集群监控和leader 的选举已经在多种分布式结构的数据库系统,或其他分布式系统中应用,大有替代zookeeper 的趋势。