ONOS点滴学习之Distributed Primitives(分布式原语)


EventuallyConsistentMap

Eventually consistent map提供了弱一致性的保证,以换取读/写的性能。所有的读都是在本地下执行的,所有的写都是先更新本地,然后再将更新传播到后台的其他副本。用户可以使用ClockService来配置该Map,ClockService被用于时间戳标识各种更新事件。时间戳用于确保每个副本以正确的顺序更新到本地状态。Eventually consistent map通过一个名为anti-entropy“反熵”的轻量级背景程序,修复了由于丢失的更新导致不同步的副本。


An eventually consistent map完全复制了它的所有状态。这意味着集群中的每个节点都将拥有该Map内容的完整副本。状态存储在每个节点的内存中,这意味着一个完整的集群重启将导致数据丢失。我们将引入一个选项,将数据保存到磁盘,这样它就可以在完整的集群重启时存活下来。


ConsistentMap


需要强一致性保障的应用可以使用ConsistentMap 原语。ConsistentMap支持java.util.concurrent.ConcurrentMap风格的条件更新操作,它确保所有给定键(在Map中)的所有操作都被序列化为强一致性。让我们实现这一目标的基本协议是Raft。此外,整个key空间(用于映射)被分区,以确保具有良好的扩展特性。例如,一致性映射中的每个键都映射到单个分区或shard。每个shard的一致性通过一个单独的Raft共识簇来维持。这样可以确保映射到不同分区key的操作可以独立进行。在N节点集群中,默认情况下我们创建了N个shards。每个shard的责任在于3个不同的节点,因此即使其中一个节点失败,也确保了shard可用性。


LeadershipService


ONOS有一项服务,可以为任意主题的领导人选举提供便利。该服务确保在任何给定的时间点,单个控制器节点充当给定主题的领导者。在任何给定的时间点,LeadershipService 都可以为多个主题的领导人选举提供便利,同样,每个控制器节点也可以同时参与多个主题的领导竞选。


DistributedSet


与它的名字相似的,这是一个数据结构,在分布式环境下提供了set的概念。


DistributedQueue


提供一个分布式FIFO队列抽象,通过长轮询支持非阻塞dequeue操作。


AtomicCounter


这类似于AtomicLong,但在分布式环境中。常用语全局唯一计数。


AtomicValue

AtomicReference的一个分布式版本。


LogicalClockService


该服务对于为各种事件分配全局有序时间戳非常有用。这对于在分布式环境下排序事件非常有用。


ClusterCommunicationService


该服务是其基本功能,允许控制器实例通过制造rpc来与他人进行通信。控制器可以注册在收到特定类型的消息时要调用的处理程序。该服务支持多种集群通信原语,如:单播、多播和广播。


ClusterService


这个服务用来发现集群中的其他节点及其当前状态(存活或死亡)



wiki地址:https://wiki.onosproject.org/display/ONOS/Distributed+Primitives