consul–基础–1.3–理论3
1、网络坐标
Consul使用网络断层成像系统计算集群中的节点的网络坐标。这些坐标可以计算在任何两个节点之间估计网络往返时间。这有很多有用的应用,例如找到最靠近请求节点的服务节点,或是向最近的datacenter进行故障转移。
1.1、Consul的网络坐标
在Consul里,网络坐标有几种形式:
-
consul rtt命令可以查询任意两个节点的网络往返之间。
-
显示端点和端点运行状况端点可以使用“?near =”参数根据给定节点的网络往返时间对查询的结果进行排序。
-
Prepared queries可以基于网络往返时间自动故障转移到其他Consul datacenter。
-
Coordinate端点暴露原始的网络坐标给应用。
2、Session
Consul提供了Session机制用于构建分布式锁,Session作为节点之间的绑定,运行状况检查和键值对数据。
2.1、Session设计
- Consul的session中包含了节点名称,列表的健康性,行为,TTL和lock-delay。
- 新建的Session中提供了一个可以用来识别它的ID。
- 这个ID可与存储的键值对一起使用以获取锁
- 锁: 相互排斥的咨询机制
2.2、组件之间的关系
2.2.1、Consul定制的标准在下列情况下,被定义为无效:
- 节点被注销
- 所有的健康检查都被注销
- 所有健康检查都在危险状态
- Session被明确销毁了
- TTL过期
Session无效的时候,将会被销毁,关联锁是创建的指定行为,Consul支持发布和删除。Consul支持释放和删除行为,如果没有特别指定,默认的行为为释放。
如果正在执行释放操作,与Session相关的所有的锁都会被释放掉,并且键的索引无法递增。在删除行为执行的时候,则锁和键都会被删除。这可以用于Consul自动删除条目。
这种设计常用于流言传播的故障检测器的健康监测。在默认情况下,使用基于留言传播的故障检测器作为故障检测器用来进行相关的健康检查。该故障检测器允许Consul检测持有锁的节点在发生故障时自动释放锁。这种机制让consul发生故障或者其他失败的情况下,可以继续运行下去。但是由于没有完美的故障检测器,有的时候,检测到的故障并不存在,也会导致锁的释放。这就意味着他并不是绝对安全的。
相反的,可以创建一个无关联的健康检测的session。这就提供了对安全性要求的虚假的不健康检测的消除提供了可能。即使现有的锁的持有者执行出现故障,你也可以自己确定是否释放Consul的锁。由于Consul的API可以强制销毁session,所以我们可以在发生故障的时候进行人为干预,防止split-brain。
第三个健康检测机制是session的TTL。当创建一个session的时候,一个TTL也被指定。如果这个TTL的间隔时间到而没有更新,则session过期,并且无法早触发。这种类型的故障检测器叫做心跳检测器。他想必基于流言传播的故障检测器的可扩展性低,因为他会对服务器造成更大的负担,但是在一些情况下很有用。TTL是session过期的时间,在到达TTL之前,consul不会让session过去,但是consul允许延迟过期。在session创建初期,session更新和leader故障转移的时候,TTL会更新。当一个TTL被使用的时候,客户端应当注意时间的偏差——时间不可能会像consul Server上那样在客户端上以相同的速率进展。我们最好设置保守的TTL值,TTL更新之前考虑时间的偏差。
最后的细微差别为session会提供锁定延迟。这个延迟会持续0-60秒。当有无效的session时,consul会防止ssession在锁定延时的时间内重新获取之前的保存的所有锁。这种延迟的目录是允许潜在的leader检测到无效后,停止并导致状态不一致的请求。虽然不是一个彻底的方式,但是可以减少很多问题。延迟默认为15秒,客户端可以将延迟设置为0来取消这个机制。
3、安全模型
3.1、安全模型
Consul使用了流言传播协议和RPC来提供各种功能。这两个系统在设计上采用了不同的安全机制,但是,Consul的安全机制完成的共同目标为:提供机密性,完整性和认证。流言传播协议由serf提供支持,serf使用对称秘钥或者共享密码系统。RPC支持使用可选客户端认证的端到端的TLS。
这就意味着Consul有完善的安全机制可以使其在不可信的网络上运行。
3.2、威胁模型
- 非成员可以访问数据
- 由于恶意邮件导致集群被操控
- 恶意邮件造成的虚假数据
- 对接点拒接服务