Meet Microplatforms. Stuart Harris, Red Badger

35
UXD Exchange Powered by Red Badger Meet Microplatforms. By Stu Harris @StuartHarris Wifi: Red Badger p/w: RedBadger2014 @redbadgerteam

Transcript of Meet Microplatforms. Stuart Harris, Red Badger

UXD Exchange

Powered by Red Badger

Meet Microplatforms.By Stu Harris@StuartHarris

Wifi: Red Badgerp/w: RedBadger2014

@redbadgerteam

Microplatforms

Hi, I’m Stu

DG/UX

Mosaic Browser

Trackernet

Conchango

Privileged & confidential

Hello. We are Red Badger

We bring together the best in strategic services, user experience and technical delivery using Lean and Agile processes.Founded in 2010 by Stuart, Cain and David, we help large organisations improve their speed to market whilst focusing on delivering value to their users and customers. We work with our clients to understand their problems and validate ideas in order to deliver improved process efficiencies, strategic enhancements and new digital products and services (or make significant improvements to existing ones).

Over the last 7 years we’ve built an incredible team of over 100 really talented individuals.

8

Privileged & confidential

Microplatforms

The “mmmm!” Stack

The “mmmm!” Stack

Deploy a Microservices application as though it was a Monolith, from a

Monorepo to a Microplatform...

Semver

Rich Hickey

https://www.youtube.com/watch?v=oyLBGkS5ICk

Monorepo

Web

Gat

eway

Exp

erie

nce

AP

I

Pro

cess

AP

I 1

Pro

cess

AP

I 2

Sys

tem

AP

I 1

Sys

tem

AP

I 2

Sys

tem

AP

I 3

Time

db77f39

986b8b6

The commit SHA

Docker in Swarm Mode

CI -> CD -> CDP -> Kaizen

The fastest sustainable way to deliver value into the hands of the customers.

Lowest RiskHighest Quality

Lowest CostHighest VelocityHappiest teams

Enterprise architecture -> Evolutionary architectureCultureSeparate concepts of deploy (tech decision) and release (business decision)Feature flagsHumans think, computers do

Smallest possible MTTRError budgets (1 - SLO), Google SRE

Coordination costs...

Aligned autonomy

Everything as code

● Application as code● Tests as code● Pipeline as code

○ Jenkinsfile○ circle.yml

● Immutable infrastructure as code○ Terraform

● Containers as code○ Dockerfile

● Service orchestration as code○ compose-file.yml

Everything as code

● All possible changes are code changes● Humans are not allowed in● Auditable, helps with governance● Enables evolution (knowledge is

captured and built on)

DevOps

12-factor apps

Idempotent BuildIdempotent Push

Idempotent Deploy

1. Webhook triggers on push to [Github Enterprise]. [Jenkins] pulls and starts build.2. [Nexus 3/IQ] holds scanned and approved base images (Docker) and dependencies (NPM, Maven, etc).3. Docker build with no Internet access. Unit tests and code quality as part of build. Images tagged with commit SHA.4. Private registry for untested images. Disposable and used only to deploy for testing.5. Pull by tag (SHA). Resolve to content hash (for idempotency). Deploy one instance (of full application) per open PR.6. Static analysis. Code quality. Integration tests. BDD-style automated functional tests. Manual testing.7. [Nexus 3] holds tested images (release candidates), tagged with commit SHA.8. Deploy includes resolve by content hash. Smoke tests (golden path synthetics) in each environment (UAT to Prod). User testing.9. Zero downtime rolling deploy. Canary releases. Blue/green with ramp-up.

Github Enterprise

Private registry

Nexus 3

PRMicroplatform

UATMicroplatform

Pul

l

Build + Unit Tests

Pus

h

Dep

loy

Test

Pus

h

Dep

loy

Smoke Test

ProductionMicroplatform

Dep

loy

Smoke Test

JenkinsMicroplatform

Nexus 3 + IQ

Get

Confidence

1 2

3

4

5

7

86

All branches Master branch only

9

Sha

red

serv

ices

Jenk

ins

pipe

line

Pla

tform

s

Demo - local

Demo - AWS

> cat ~/.ssh/configHost bastion Hostname 52.50.162.185 User admin IdentityFile ~/.ssh/id_rsaHost mgrA Hostname 10.0.31.253 User core ProxyCommand ssh bastion -W %h:%p

> nohup ssh -nNT -L /tmp/docker.sock:/var/run/docker.sock mgrA &

> export DOCKER_HOST=unix:///tmp/docker.sock

> docker node ls

Tunnel to remote Docker server

Thanks!

@stuartharris