Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Overview

ONOS Blackbird release introduces few offers a core set of primitives for managing distributed state. The goal behind this was is to make distributed state management and coordination simple and easily accessible to application developers. These primitives cater to different use cases by providing different levels of consistency, redundancy and durabilityhigh availability, durability and a choice of two consistency modes: strong and eventual. All these primitives are designed with correctness, usability and performance at scale as key considerations.

Applications can create different instances of these primitives for managing their state.

EventuallyConsistentMap

An eventually consistent map provides weaker consistency guarantees in return for superior read/write performance. All reads are performed on local state and all writes update local state first and subsequently propagate updates to other replicas in the background. Users can configure this map with a ClockService that will be used to time stamp various update events. The timestamps are used to ensure each replica applies updates to local state in the correct order. The map fixes replicas that get out of sync (due to lost updates) via a light weight background process known as anti-entropy. This ensures that the system state across all replicas eventually converges to the correct state.

...

ONOS has a service to facilitate leader election for arbitrary topics. The service ensures that at any given point in time a single controller node acts as a leader for a given topic. The LeadershipService can at any given point in time facilitate leader election for multiple topics and likewise each controller node can simultaneously be in the leadership race for multiple topics.

DistributedSet

As the name suggests this is a data structure that provides set semantics in a distributed context.

DistributedQueue

Provides a distributed FIFO queue abstraction with support for non-blocking dequeue operations via long polling.

AtomicCounter

This is similar to AtomicLong but in a distributed setting. It is useful for vending globally unique counter values.

LogicalClockService

This service is useful for assigning globally ordered time stamps to various events. This will be useful for ordering events in a distributed setting.

ClusterCommunicationService

...

This service can be used to discover other nodes in the cluster and their current state (alive or dead)

DistributedSet (available in Cardinal)

As the name suggests this is a data structure that provides set semantics in a distributed context.

AtomicCounter (available in Cardinal)

This is similar to AtomicLong but in a distributed setting. It is useful for vending globally unique counter values.

LogicalClockService (available in Cardinal)

This service is useful for assigning globally consistent time stamps to various events. This will be useful for ordering events in a distributed setting.