nomad - ricon · 2020-04-30 · large scale operationally simple!"#!$%&'(thousands of...

72
Nomad HASHICORP

Upload: others

Post on 20-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Page 2: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Armon Dadgar @armon

Page 3: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency
Page 4: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Page 5: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Distributed

Optimistically Concurrent

Scheduler

Page 6: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Distributed

Optimistically Concurrent

Scheduler

Page 7: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Schedulers map a set of work to a set of resources

Page 8: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

CPU Scheduler

Web Server -Thread 1

CPU - Core 1

CPU - Core 2

Web Server -Thread 2

Redis -Thread 1

Kernel -Thread 1

Work (Input) Resources

CPU Scheduler

Page 9: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

CPU Scheduler

Web Server -Thread 1

CPU - Core 1

CPU - Core 2

Web Server -Thread 2

Redis -Thread 1

Kernel -Thread 1

Work (Input) Resources

CPU Scheduler

Page 10: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Schedulers In the Wild

Type Work Resources

CPU Scheduler Threads Physical Cores

AWS EC2 / OpenStack Nova Virtual Machines Hypervisors

Hadoop YARN MapReduce Jobs Client Nodes

Cluster Scheduler Applications Servers

Page 11: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Advantages

Higher Resource Utilization

Decouple Work from Resources

Better Quality of Service

Page 12: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Advantages

Bin Packing

Over-Subscription

Job Queueing

Higher Resource Utilization

Decouple Work from Resources

Better Quality of Service

Page 13: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Advantages

Abstraction

API Contracts

Standardization

Higher Resource Utilization

Decouple Work from Resources

Better Quality of Service

Page 14: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Advantages

Priorities

Resource Isolation

Pre-emption

Higher Resource Utilization

Decouple Work from Resources

Better Quality of Service

Page 15: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Page 16: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Page 17: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Cluster Scheduler

Easily Deploy Applications

Job Specification

Page 18: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

example.nomad

# Define our simple redis jobjob "redis" {

# Run only in us-east-1 datacenters = ["us-east-1"]

# Define the single redis task using Docker task "redis" { driver = "docker"

config { image = "redis:latest" }

resources { cpu = 500 # Mhz memory = 256 # MB network { mbits = 10 dynamic_ports = ["redis"] } } }}

Page 19: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Job Specification

Declares what to run

Page 20: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Job Specification

Nomad determines where and manages how to run

Page 21: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Job Specification

Abstract work from resources

Page 22: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Higher Resource Utilization

Decouple Work from Resources

Better Quality of Service

Page 23: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Designing Nomad

Page 24: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Multi-Datacenter

Multi-Region

Flexible Workloads

Job Priorities

Bin Packing

Large Scale

Operationally Simple

Page 25: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Thousands of regions

Tens of thousands of clients per region

Thousands of jobs per region

Page 26: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Built on Experience

gossip consensus

Page 27: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Cluster Management

Gossip Based (P2P)

Membership

Failure Detection

Event System

Page 28: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Gossip Protocol

Large Scale

Production Hardened

Operationally Simple

Page 29: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Service Discovery

Configuration

Coordination (Locking)

Central Servers + Distributed Clients

Page 30: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Multi-Datacenter

Raft Consensus

Large Scale

Production Hardened

Page 31: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

gossip consensus

Mature Libraries

Design Patterns

No Scheduling Logic

Page 32: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Built on Research

gossip consensus

Page 33: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Page 34: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Optimistic vs Pessimistic

Internal vs External State

Single vs Multi Level

Fixed vs Pluggable

Service vs Batch Oriented

Page 35: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Inspired by Google Omega

Optimistic Concurrency

Internal State and Coordination

Service and Batch workloads

Pluggable Architecture

Page 36: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Page 37: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Multi-Datacenter

Servers Per DC

Failure Isolation Domain

is the Datacenter

Page 38: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Single Region Architecture

SERVER SERVER SERVER

CLIENT CLIENT CLIENTDC1 DC2 DC3

FOLLOWER LEADER FOLLOWER

REPLICATIONFORWARDING

REPLICATIONFORWARDING

RPC RPC RPC

Page 39: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Multi Region Architecture

SERVER SERVER SERVERFOLLOWER LEADER FOLLOWER

REPLICATIONFORWARDING

REPLICATION

REGION  B GOSSIP

REPLICATION REPLICATIONFORWARDING

REGION  FORWARDING

REGION  A

SERVERFOLLOWER

SERVER SERVERLEADER FOLLOWER

Page 40: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Region is Isolation Domain

1-N Datacenters Per Region

Flexibility to do 1:1 (Consul)

Scheduling Boundary

Page 41: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Data Model

Page 42: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Evaluations ~= State Change Event

Page 43: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Create / Update / Delete Job

Node Up / Node Down

Allocation Failed

Page 44: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

“Scheduler” = func(Eval) => []AllocUpdates

Page 45: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Scheduler func’s can specialize

(Service, Batch, System, etc)

Page 46: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Evaluation Enqueue

Page 47: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Evaluation Dequeue

Page 48: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Plan Generation

Page 49: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Plan Execution

Page 50: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

External  Event

Evalua?on  Crea?on

Evalua?on  Queuing

Evalua?on  Processing

Op?mis?c  Coordina?on

State  Updates

Page 51: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Server Architecture

Omega Class Scheduler

Pluggable Logic

Internal Coordination and State

Multi-Region / Multi-Datacenter

Page 52: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Client Architecture

Broad OS Support

Host Fingerprinting

Pluggable Drivers

Page 53: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Fingerprinting

Operating System

Hardware

Applications

Environment

Type Examples

Kernel, OS, Versions

CPU, Memory, Disk

Java, Docker, Consul

AWS, GCE

Page 54: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Fingerprinting

Constrain Placement and Bin Pack

Page 55: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Fingerprinting

“Task Requires Linux, Docker, and PCI-Compliant Hardware” expressed as Constraints

Page 56: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Fingerprinting

“Task needs 512MB RAM and 1 Core” expressed as Resource Ask

Page 57: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Drivers

Execute Tasks

Provide Resource Isolation

Page 58: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Containerized

Virtualized

Standalone

Docker

Qemu / KVM

Java Jar

Static Binaries

Rocket

Page 59: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Containerized

Virtualized

Standalone

Docker

Rocket

Windows Server Containers

Qemu / KVM

Hyper-V

Xen

Java Jar

Static Binaries

C#

Page 60: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Workload Flexibility:

Schedulers

Fingerprints

Drivers

Job Specification

Page 61: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Operational Simplicity:

Single Binary

No Dependencies

Highly Available

Page 62: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Page 63: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Nomad 0.1

Released in October

Service and Batch Scheduler

Docker, Qemu, Exec, Java Drivers

Page 64: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Case Study

Page 65: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Case Study

3 servers in NYC3

100 clients in NYC3, SFO1, AMS2/3

1000 Containers

Page 66: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Case Study

<1s to schedule

1s to first start

6s to 95%

8s to 99%

Page 67: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Nomad 0.2 - Service Workloads

Service Discovery

System Scheduler

Restart Policies

Enhanced Constraints

Page 68: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Nomad 0.3 - Batch Workloads

Cron

Job Queuing

Latency-Aware Scheduling

Page 69: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Production Hardening

Nomad 0.2 in Prod

Stress Testing

Atlas Integration

Page 70: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Cluster Scheduler

Easily Deploy Applications

Job Specification

Page 71: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

NomadHASHICORP

Higher Resource Utilization

Decouple Work from Resources

Better Quality of Service

Page 72: Nomad - RICON · 2020-04-30 · Large Scale Operationally Simple!"#!$%&'(Thousands of regions ... Service vs Batch Oriented. Nomad!"#!$%&'(Inspired by Google Omega Optimistic Concurrency

HASHICORP

Thanks! Q/A