20
The Layer Cake is a LIE A functional programming approach to operations and architecture

Functional Ops - the cake is a lie

Embed Size (px)

Citation preview

The Layer Cake is a LIEA functional programming approach to operations and architecture

Rigid Abstraction Anti-Pattern!Call to action:

Consider functional interactions up front in design.

“Abstractions are useful until they are not”

Rob HirschfeldCloud Operations since 1999OpenStack Board Member since 2011Founder of OpenCrowbar Project (& RackN)Cloud Culture & Process BloggerEducation: Robotics & Industrial Engineering

What is a Layer Cake?Product Architectural SegmentationAka “Taxonomy” Assumes:● clean boundaries between services● upward stacking of dependencies● Under-layers can create resources● Services APIs are equally available● Does not show time component

Leave No Service Behind...Just keep stacking layers (and colors) until you’ve included the kitchen sink.

Is everything required?How do you deploy that?

Ops is messy, not layered● There are dependencies between

layers● Things are constantly changing● We have to connect actions together● Where matters as much as what

It's not just Ops! Application design is messy too.

Ops is about inter-connect● No server/service stands alone● Not everything is equally

reachable● Order of operations matters● Connectivity and proximity

matters● Hidden Interconnects are

FAILURESDurability and Simplicity are very important characteristics in Ops

NetworkAbstractions

StandardOpsTool

Chains

HardwareAbstractions

UserInterface,

Scale,& High

Availability

Top of Rack Switch Fabric

BMC management networkC

usto

mA

PIs

Pup

pet

Sal

t, ...

SS

HP

XE

TFTP

OpenCrowbarOrchestration

Che

f

App

Firmware

O/S

NCC-1701-r

A

F

O

A

F

O

A

F

O

A

F

O

A

F

O

A

F

O

App

F/W

O/S

A

F

O

A

F

O

A

F

O

A

F

O

A

F

O

A

F

O

App

F/W

O/S

A

F

O

A

F

O

A

F

O

A

F

O

A

F

O

A

F

O

App

F/W

O/S

How do we manage inter-connect?● Accept The Cake is a Lie● Decompose Big Work

into Small Work● Do not hide interconnections● Apply Functional

Programming

Functional Programming?… that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data …

● Defined Inputs & Outputs● No Side Effects● Repeatable Actions● Black Box

http://en.wikipedia.org/wiki/Functional_programming

Interchangeable PartsFunctional Design has very early roots allowing scale operations.

Famously, Eli Whitney demonstrated how a decomposed design could be used to speed assembly of rifles.

Robust designs can be taken apart and put back together.

Functional Ops is DifferentThe system construction paradigm focuses on connections and services instead of nodes and abstraction layers.

It is easier to automate in a generic wayAnd platforms can scale it dynamically

Can't we ignore this? I <3 Cake!That was the idea for PaaS, but…

● Containers make it worse!● Smaller Units (“micro-services”)● Shorter Life Cycles● More Portable● Highly Interconnect

Irony Alert: Docker's #1 feature is layering images (not the same thing, but...)

How does this help?● Clear contracts between operations● Replaceable work units (functions)● No Hidden interconnections● Deterministic execution (not

eventual)● Easier to Test

We still have complexity, but it's visibleHidden connections are fatal

RackN

IPM

I / B

MC

BIO

S

RA

ID

O/S

CM

age

nt(s

)

Clie

nts

Net

wor

k

Customers’ Applications

East-West vs North-SouthE-W is dependency focused vs N-S is control focused

East-West is critical when...● sequence of operations matters● the control layer is incomplete● you have multiple control surfaces● you have circular dependencies● you have distributed authors

Functional Ops Example 1Database Configuration Functionally● Setup the Server Service – target network, credentials● Setup the Client – target network, register client● Create the Database – credentials, db name, ACL

Base functions work ● even for a cluster● different BD types● work independently of each other (DB as a service)● Cross-reference issues are resolved externally● Deterministic

Functional Ops Example 2Milestone 6 Milestone 8Milestone 7: “setup NIC”

Node 2

Vendor B

Node 1

Vendor AA1

B2

C1

D1

A2 A3

A1 A2 A3

B1

D2

C2

A0

B0

A0

C0

A4

Container Orchestration, Oh my.This area is very turbulent. My thoughts:1. It’s not clear how to best orchestrate µServices2. There are a lot of companies/projects in play3. This approach is different than cloud IaaS4. I believe it will disrupt virtualization APIs

Functional Ops Take Aways● Avoid side-effects in Ops scripting● Establish clear requirements

(inputs/outputs)● Establish contracts for interconnects● Do not over define “black box” actions● Embrace orchestration● When possible, fail fast and small

Thank You