Upload
rob-hirschfeld
View
583
Download
3
Tags:
Embed Size (px)
Citation preview
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