Microservices: Why, what, and how to get there Adrian Cockcroft - - PowerPoint PPT Presentation

microservices why what and how to get there
SMART_READER_LITE
LIVE PREVIEW

Microservices: Why, what, and how to get there Adrian Cockcroft - - PowerPoint PPT Presentation

Microservices: Why, what, and how to get there Adrian Cockcroft @adrianco Technology Fellow - Battery Ventures March 2016 What does @adrianco do? Maintain Relationship with Presentations at Technology Due Cloud Vendors Conferences


slide-1
SLIDE 1

Microservices: Why, what, and how to get there

Adrian Cockcroft @adrianco Technology Fellow - Battery Ventures March 2016

slide-2
SLIDE 2

What does @adrianco do?

@adrianco

Technology Due Diligence on Deals Presentations at Conferences Presentations at Companies Technical Advice for Portfolio Companies Program Committee for Conferences Networking with Interesting People Tinkering with Technologies Maintain Relationship with Cloud Vendors

slide-3
SLIDE 3

Why am I here?

%*&!”

By Simon Wardley http://enterpriseitadoption.com/

slide-4
SLIDE 4

Why am I here?

%*&!”

By Simon Wardley http://enterpriseitadoption.com/

2009

slide-5
SLIDE 5

Why am I here?

%*&!”

By Simon Wardley http://enterpriseitadoption.com/

2009

slide-6
SLIDE 6

Why am I here?

@adrianco’s job at the intersection of cloud and Enterprise IT, looking for disruption and opportunities.

%*&!”

By Simon Wardley http://enterpriseitadoption.com/

2014 2009 Disruptions in 2016 coming from server- less computing and teraservices.

slide-7
SLIDE 7

What I learned from my time at Netflix

slide-8
SLIDE 8

What I learned from my time at Netflix

  • Speed wins in the marketplace
slide-9
SLIDE 9

What I learned from my time at Netflix

  • Speed wins in the marketplace
  • Remove friction from product development
slide-10
SLIDE 10

What I learned from my time at Netflix

  • Speed wins in the marketplace
  • Remove friction from product development
  • High trust, low process, no hand-offs between teams
slide-11
SLIDE 11

What I learned from my time at Netflix

  • Speed wins in the marketplace
  • Remove friction from product development
  • High trust, low process, no hand-offs between teams
  • Freedom and responsibility culture
slide-12
SLIDE 12

What I learned from my time at Netflix

  • Speed wins in the marketplace
  • Remove friction from product development
  • High trust, low process, no hand-offs between teams
  • Freedom and responsibility culture
  • Don’t do your own undifferentiated heavy lifting
slide-13
SLIDE 13

What I learned from my time at Netflix

  • Speed wins in the marketplace
  • Remove friction from product development
  • High trust, low process, no hand-offs between teams
  • Freedom and responsibility culture
  • Don’t do your own undifferentiated heavy lifting
  • Use simple patterns automated by tooling
slide-14
SLIDE 14

What I learned from my time at Netflix

  • Speed wins in the marketplace
  • Remove friction from product development
  • High trust, low process, no hand-offs between teams
  • Freedom and responsibility culture
  • Don’t do your own undifferentiated heavy lifting
  • Use simple patterns automated by tooling
  • Self service cloud makes impossible things instant
slide-15
SLIDE 15

“You build it, you run it.”

Werner Vogels 2006

slide-16
SLIDE 16

In 2014 Enterprises finally embraced public cloud and in 2015 began replacing entire datacenters.

slide-17
SLIDE 17

In 2014 Enterprises finally embraced public cloud and in 2015 began replacing entire datacenters.

Oct 2014

slide-18
SLIDE 18

In 2014 Enterprises finally embraced public cloud and in 2015 began replacing entire datacenters.

Oct 2014 Oct 2015

slide-19
SLIDE 19

In 2014 Enterprises finally embraced public cloud and in 2015 began replacing entire datacenters.

Oct 2014 Oct 2015

slide-20
SLIDE 20

Key Goals of the CIO? Align IT with the business Develop products faster Try not to get breached

slide-21
SLIDE 21

Security Blanket Failure

Insecure applications hidden behind firewalls make you feel safe until the breach happens…

http://peanuts.wikia.com/wiki/Linus'_security_blanket

slide-22
SLIDE 22

What needs to change?

slide-23
SLIDE 23

Developer responsibilities: Faster, cheaper, safer

slide-24
SLIDE 24

Value Chain Mapping

Simon Wardley http://blog.gardeviance.org/2014/11/how-to-get-to-strategy-in-ten-steps.html Related tools and training http://www.wardleymaps.com/

slide-25
SLIDE 25

Value Chain Mapping

Simon Wardley http://blog.gardeviance.org/2014/11/how-to-get-to-strategy-in-ten-steps.html Related tools and training http://www.wardleymaps.com/

Your unique product - Agile

slide-26
SLIDE 26

Value Chain Mapping

Simon Wardley http://blog.gardeviance.org/2014/11/how-to-get-to-strategy-in-ten-steps.html Related tools and training http://www.wardleymaps.com/

Your unique product - Agile Best of breed as a Service - Lean

slide-27
SLIDE 27

Value Chain Mapping

Simon Wardley http://blog.gardeviance.org/2014/11/how-to-get-to-strategy-in-ten-steps.html Related tools and training http://www.wardleymaps.com/

Your unique product - Agile Undifferentiated utility suppliers - 6sigma Best of breed as a Service - Lean

slide-28
SLIDE 28

Observe Orient Decide Act

Continuous Delivery

slide-29
SLIDE 29

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Measure Customers

Continuous Delivery

slide-30
SLIDE 30

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point

INNOVATION

Measure Customers

Continuous Delivery

slide-31
SLIDE 31

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Analysis Model Hypotheses

INNOVATION

Measure Customers

Continuous Delivery

slide-32
SLIDE 32

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Analysis Model Hypotheses

BIG DATA INNOVATION

Measure Customers

Continuous Delivery

slide-33
SLIDE 33

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Analysis JFDI Plan Response Share Plans Model Hypotheses

BIG DATA INNOVATION

Measure Customers

Continuous Delivery

slide-34
SLIDE 34

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Analysis JFDI Plan Response Share Plans Model Hypotheses

BIG DATA INNOVATION CULTURE

Measure Customers

Continuous Delivery

slide-35
SLIDE 35

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Analysis JFDI Plan Response Share Plans Incremental Features Automatic Deploy Launch AB Test Model Hypotheses

BIG DATA INNOVATION CULTURE

Measure Customers

Continuous Delivery

slide-36
SLIDE 36

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Analysis JFDI Plan Response Share Plans Incremental Features Automatic Deploy Launch AB Test Model Hypotheses

BIG DATA INNOVATION CULTURE CLOUD

Measure Customers

Continuous Delivery

slide-37
SLIDE 37

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Analysis JFDI Plan Response Share Plans Incremental Features Automatic Deploy Launch AB Test Model Hypotheses

BIG DATA INNOVATION CULTURE CLOUD

Measure Customers

Continuous Delivery

slide-38
SLIDE 38

Observe Orient Decide Act Land grab

  • pportunity

Competitive Move Customer Pain Point Analysis JFDI Plan Response Share Plans Incremental Features Automatic Deploy Launch AB Test Model Hypotheses

BIG DATA INNOVATION CULTURE CLOUD

Measure Customers

Continuous Delivery

slide-39
SLIDE 39

Breaking Down the SILOs

slide-40
SLIDE 40

Breaking Down the SILOs

QA DBA Sys Adm Net Adm SAN Adm Dev UX Prod Mgr

slide-41
SLIDE 41

Breaking Down the SILOs

QA DBA Sys Adm Net Adm SAN Adm Dev UX Prod Mgr

Product Team Using Monolithic Delivery Product Team Using Monolithic Delivery

slide-42
SLIDE 42

Breaking Down the SILOs

QA DBA Sys Adm Net Adm SAN Adm Dev UX Prod Mgr

Product Team Using Microservices Product Team Using Monolithic Delivery Product Team Using Microservices Product Team Using Microservices Product Team Using Monolithic Delivery

slide-43
SLIDE 43

Breaking Down the SILOs

QA DBA Sys Adm Net Adm SAN Adm Dev UX Prod Mgr

Product Team Using Microservices Product Team Using Monolithic Delivery Platform Team Product Team Using Microservices Product Team Using Microservices Product Team Using Monolithic Delivery

slide-44
SLIDE 44

Breaking Down the SILOs

QA DBA Sys Adm Net Adm SAN Adm Dev UX Prod Mgr

Product Team Using Microservices Product Team Using Monolithic Delivery Platform Team

A P I

Product Team Using Microservices Product Team Using Microservices Product Team Using Monolithic Delivery

slide-45
SLIDE 45

Breaking Down the SILOs

QA DBA Sys Adm Net Adm SAN Adm Dev UX Prod Mgr

Product Team Using Microservices Product Team Using Monolithic Delivery Platform Team

Re-Org from project teams to product teams

A P I

Product Team Using Microservices Product Team Using Microservices Product Team Using Monolithic Delivery

slide-46
SLIDE 46

Release Plan Developer Developer Developer Developer Developer QA Release Integration Ops Replace Old With New Release

Monolithic service updates Works well with a small number

  • f developers and a single

language like php, java or ruby

slide-47
SLIDE 47

Release Plan Developer Developer Developer Developer Developer QA Release Integration Ops Replace Old With New Release Bugs

Monolithic service updates Works well with a small number

  • f developers and a single

language like php, java or ruby

slide-48
SLIDE 48

Release Plan Developer Developer Developer Developer Developer QA Release Integration Ops Replace Old With New Release Bugs Bugs

Monolithic service updates Works well with a small number

  • f developers and a single

language like php, java or ruby

slide-49
SLIDE 49

Use monolithic apps for small teams, simple systems and when you must, to optimize for efficiency and latency

slide-50
SLIDE 50

Developer Developer Developer Developer Developer Old Release Still Running Release Plan Release Plan Release Plan Release Plan

Immutable microservice deployment scales, is faster with large teams and diverse platform components

slide-51
SLIDE 51

Developer Developer Developer Developer Developer Old Release Still Running Release Plan Release Plan Release Plan Release Plan Deploy Feature to Production Deploy Feature to Production Deploy Feature to Production Deploy Feature to Production

Immutable microservice deployment scales, is faster with large teams and diverse platform components

slide-52
SLIDE 52

Developer Developer Developer Developer Developer Old Release Still Running Release Plan Release Plan Release Plan Release Plan Deploy Feature to Production Deploy Feature to Production Deploy Feature to Production Deploy Feature to Production Bugs

Immutable microservice deployment scales, is faster with large teams and diverse platform components

slide-53
SLIDE 53

Developer Developer Developer Developer Developer Old Release Still Running Release Plan Release Plan Release Plan Release Plan Deploy Feature to Production Deploy Feature to Production Deploy Feature to Production Deploy Feature to Production Bugs Deploy Feature to Production

Immutable microservice deployment scales, is faster with large teams and diverse platform components

slide-54
SLIDE 54

Configure Configure Developer Developer Developer Release Plan Release Plan Release Plan Deploy Standardized Services

Standardized container deployment saves time and effort

https://hub.docker.com

slide-55
SLIDE 55

Configure Configure Developer Developer Developer Release Plan Release Plan Release Plan Deploy Standardized Services Deploy Feature to Production Deploy Feature to Production Deploy Feature to Production Bugs Deploy Feature to Production

Standardized container deployment saves time and effort

https://hub.docker.com

slide-56
SLIDE 56

Developer Developer

Run What You Wrote

Developer Developer

slide-57
SLIDE 57

Developer Developer

Run What You Wrote

Micro service Micro service Micro service Micro service Micro service Micro service Micro service Developer Developer

slide-58
SLIDE 58

Developer Developer Developer

Run What You Wrote

Micro service Micro service Micro service Micro service Micro service Micro service Micro service Developer Developer Monitoring Tools

slide-59
SLIDE 59

Developer Developer Developer

Run What You Wrote

Micro service Micro service Micro service Micro service Micro service Micro service Micro service Developer Developer Site Reliability Monitoring Tools Availability Metrics 99.95% customer success rate

slide-60
SLIDE 60

Developer Developer Developer

Run What You Wrote

Micro service Micro service Micro service Micro service Micro service Micro service Micro service Developer Developer Manager Manager Site Reliability Monitoring Tools Availability Metrics 99.95% customer success rate

slide-61
SLIDE 61

Developer Developer Developer

Run What You Wrote

Micro service Micro service Micro service Micro service Micro service Micro service Micro service Developer Developer Manager Manager VP Engineering Site Reliability Monitoring Tools Availability Metrics 99.95% customer success rate

slide-62
SLIDE 62

Change One Thing at a Time!

slide-63
SLIDE 63

What Happened?

Rate of change increased Cost and size and risk of change reduced

slide-64
SLIDE 64

Low Cost of Change Using Docker

Developers

  • Compile/Build
  • Seconds

Extend container

  • Package dependencies
  • Seconds

PaaS deploy Container

  • Docker startup
  • Seconds
slide-65
SLIDE 65

Low Cost of Change Using Docker

Fast tooling supports continuous delivery of many tiny changes

Developers

  • Compile/Build
  • Seconds

Extend container

  • Package dependencies
  • Seconds

PaaS deploy Container

  • Docker startup
  • Seconds
slide-66
SLIDE 66

Disruptor: Continuous Delivery with Containerized Microservices

slide-67
SLIDE 67

Microservices

slide-68
SLIDE 68

A Microservice Definition Loosely coupled service oriented architecture with bounded contexts

slide-69
SLIDE 69

A Microservice Definition Loosely coupled service oriented architecture with bounded contexts

If every service has to be updated at the same time it’s not loosely coupled

slide-70
SLIDE 70

A Microservice Definition Loosely coupled service oriented architecture with bounded contexts

If every service has to be updated at the same time it’s not loosely coupled If you have to know too much about surrounding services you don’t have a bounded context. See the Domain Driven Design book by Eric Evans.

slide-71
SLIDE 71

Speeding Up The Platform

Datacenter Snowflakes

  • Deploy in months
  • Live for years
slide-72
SLIDE 72

Speeding Up The Platform

Datacenter Snowflakes

  • Deploy in months
  • Live for years

Virtualized and Cloud

  • Deploy in minutes
  • Live for weeks
slide-73
SLIDE 73

Speeding Up The Platform

Datacenter Snowflakes

  • Deploy in months
  • Live for years

Virtualized and Cloud

  • Deploy in minutes
  • Live for weeks

Container Deployments

  • Deploy in seconds
  • Live for minutes/hours
slide-74
SLIDE 74

Speeding Up The Platform

Datacenter Snowflakes

  • Deploy in months
  • Live for years

Virtualized and Cloud

  • Deploy in minutes
  • Live for weeks

Container Deployments

  • Deploy in seconds
  • Live for minutes/hours

Lambda Deployments

  • Deploy in milliseconds
  • Live for seconds
slide-75
SLIDE 75

Speeding Up The Platform

AWS Lambda is leading exploration of serverless architectures in 2016

Datacenter Snowflakes

  • Deploy in months
  • Live for years

Virtualized and Cloud

  • Deploy in minutes
  • Live for weeks

Container Deployments

  • Deploy in seconds
  • Live for minutes/hours

Lambda Deployments

  • Deploy in milliseconds
  • Live for seconds
slide-76
SLIDE 76

Inspiration

slide-77
SLIDE 77

http://www.infoq.com/presentations/Twitter-Timeline-Scalability http://www.infoq.com/presentations/twitter-soa http://www.infoq.com/presentations/Zipkin http://www.infoq.com/presentations/scale-gilt Go-Kit https://www.youtube.com/watch?v=aL6sd4d4hxk http://www.infoq.com/presentations/circuit-breaking-distributed-systems https://speakerdeck.com/mattheath/scaling-micro-services-in-go-highload-plus-plus-2014

State of the Art in Web Scale Microservice Architectures

AWS Re:Invent : Asgard to Zuul https://www.youtube.com/watch?v=p7ysHhs5hl0 Resiliency at Massive Scale https://www.youtube.com/watch?v=ZfYJHtVL1_w Microservice Architecture https://www.youtube.com/watch?v=CriDUYtfrjs New projects for 2015 and Docker Packaging https://www.youtube.com/watch?v=hi7BDAtjfKY Spinnaker deployment pipeline https://www.youtube.com/watch?v=dwdVwE52KkU http://www.infoq.com/presentations/spring-cloud-2015

slide-78
SLIDE 78

Microservice Concerns

Configuration Tooling Discovery Routing Observability

Development: Languages and Container Operational: Orchestration and Deployment Infrastructure Datastores Policy: Architectural and Security Compliance

slide-79
SLIDE 79

Microservices

Edda Archaius Configuration Spinnaker SpringCloud Tooling Eureka Prana Discovery

Denominator

Zuul Ribbon Routing Hystrix Pytheus Atlas Observability

Development using Java, Groovy, Scala, Clojure, Python with AMI and Docker Containers Orchestration with Autoscalers on AWS, exploring Mesos & ECS for Docker Ephemeral datastores using Dynomite, Memcached, Astyanax, Staash, Priam, Cassandra Policy via the Simian Army - Chaos Monkey, Chaos Gorilla, Conformity Monkey, Security Monkey

slide-80
SLIDE 80
  • Edda - the “black box flight recorder” for configuration state
  • Chaos Monkey - enforcing stateless business logic
  • Chaos Gorilla - enforcing zone isolation/replication
  • Chaos Kong - enforcing region isolation/replication
  • Security Monkey - watching for insecure configuration settings
  • See over 100 NetflixOSS projects at netflix.github.com
  • Get “Technical Indigestion” reading techblog.netflix.com

Trust with Verification

slide-81
SLIDE 81

Cloud Native Monitoring and Microservices

slide-82
SLIDE 82

Cloud Native Microservices

  • High rate of change

Code pushes can cause floods of new instances and metrics Short baseline for alert threshold analysis – everything looks unusual

  • Ephemeral Configurations

Short lifetimes make it hard to aggregate historical views Hand tweaked monitoring tools take too much work to keep running

  • Microservices with complex calling patterns

End-to-end request flow measurements are very important Request flow visualizations get overwhelmed

slide-83
SLIDE 83

Whoops! I didn’t mean that! Reverting…


Not cool if it takes 5 minutes to see it failed and 5 more to see a fix
 No-one notices if it only takes 5 seconds to detect and 5 to see a fix

slide-84
SLIDE 84

NetflixOSS Hystrix/Turbine Circuit Breaker

http://techblog.netflix.com/2012/12/hystrix-dashboard-and-turbine.html

slide-85
SLIDE 85

NetflixOSS Hystrix/Turbine Circuit Breaker

http://techblog.netflix.com/2012/12/hystrix-dashboard-and-turbine.html

slide-86
SLIDE 86

Low Latency SaaS Based Monitors

https://www.datadoghq.com/ http://www.instana.com/ www.bigpanda.io www.vividcortex.com signalfx.com wavefront.com sysdig.com

slide-87
SLIDE 87

Metric to display latency needs to be less than human attention span (~10s)

slide-88
SLIDE 88

Challenges for Microservice Platforms

slide-89
SLIDE 89

Managing Scale

slide-90
SLIDE 90

A Possible Hierarchy Continents Regions Zones Services Versions Containers Instances How Many? 3 to 5 2-4 per Continent 1-5 per Region 100’s per Zone Many per Service 1000’s per Version 10,000’s

It’s much more challenging than just a large number of machines

slide-91
SLIDE 91

Flow

slide-92
SLIDE 92

Some tools can show the request flow across a few services

slide-93
SLIDE 93

Interesting architectures have a lot of microservices! Flow visualization is a big challenge.

See http://www.slideshare.net/LappleApple/gilt-from-monolith-ruby-app-to-micro-service-scala-service-architecture
slide-94
SLIDE 94

Simulated Microservices

Model and visualize microservices Simulate interesting architectures Generate large scale configurations Eventually stress test real tools See github.com/adrianco/spigo Simulate Protocol Interactions in Go Visualize with D3

ELB Load Balancer Zuul API Proxy Karyon Business Logic Staash Data Access Layer Priam Cassandra Datastore Three Availability Zones

slide-95
SLIDE 95

Spigo Nanoservice Structure

func Start(listener chan gotocol.Message) { ... for { select { case msg := <-listener: flow.Instrument(msg, name, hist) switch msg.Imposition { case gotocol.Hello: // get named by parent ... case gotocol.NameDrop: // someone new to talk to ... case gotocol.Put: // upstream request handler ...

  • utmsg := gotocol.Message{gotocol.Replicate, listener, time.Now(),

msg.Ctx.NewParent(), msg.Intention} flow.AnnotateSend(outmsg, name)

  • utmsg.GoSend(replicas)

} case <-eurekaTicker.C: // poll the service registry ... } } }

Skeleton code for replicating a Put message

Instrument incoming requests Instrument outgoing requests update trace context

slide-96
SLIDE 96

Flow Trace Recording

riak2 us-east-1 zoneC

riak9 us-west-2 zoneA

Put s896 Replicate

riak3 us-east-1 zoneA

riak8 us-west-2 zoneC

riak4 us-east-1 zoneB

riak10

us-west-2 zoneB

us-east-1.zoneC.riak2 t98p895s896 Put us-east-1.zoneA.riak3 t98p896s908 Replicate us-east-1.zoneB.riak4 t98p896s909 Replicate us-west-2.zoneA.riak9 t98p896s910 Replicate us-west-2.zoneB.riak10 t98p910s912 Replicate us-west-2.zoneC.riak8 t98p910s913 Replicate

staash

us-east-1 zoneC

s910 s908 s913 s909 s912

Replicate Put

slide-97
SLIDE 97

Open Zipkin

A common format for trace annotations A Java tool for visualizing traces Standardization effort to fold in other formats Driven by Adrian Cole (currently at Pivotal) Extended to load Spigo generated trace files

slide-98
SLIDE 98

Trace for one Spigo Flow

slide-99
SLIDE 99

Definition of an architecture

{ "arch": "lamp", "description":"Simple LAMP stack", "version": "arch-0.0", "victim": "webserver", "services": [ { "name": "rds-mysql", "package": "store", "count": 2, "regions": 1, "dependencies": [] }, { "name": "memcache", "package": "store", "count": 1, "regions": 1, "dependencies": [] }, { "name": "webserver", "package": "monolith", "count": 18, "regions": 1, "dependencies": ["memcache", "rds-mysql"] }, { "name": "webserver-elb", "package": "elb", "count": 0, "regions": 1, "dependencies": ["webserver"] }, { "name": "www", "package": "denominator", "count": 0, "regions": 0, "dependencies": ["webserver-elb"] } ] }

Header includes chaos monkey victim New tier name Tier package 0 = non Regional Node count List of tier dependencies

slide-100
SLIDE 100

Running Spigo

$ ./spigo -a lamp -j -d 2 2016/01/26 23:04:05 Loading architecture from json_arch/lamp_arch.json 2016/01/26 23:04:05 lamp.edda: starting 2016/01/26 23:04:05 Architecture: lamp Simple LAMP stack 2016/01/26 23:04:05 architecture: scaling to 100% 2016/01/26 23:04:05 lamp.us-east-1.zoneB.eureka01....eureka.eureka: starting 2016/01/26 23:04:05 lamp.us-east-1.zoneA.eureka00....eureka.eureka: starting 2016/01/26 23:04:05 lamp.us-east-1.zoneC.eureka02....eureka.eureka: starting 2016/01/26 23:04:05 Starting: {rds-mysql store 1 2 []} 2016/01/26 23:04:05 Starting: {memcache store 1 1 []} 2016/01/26 23:04:05 Starting: {webserver monolith 1 18 [memcache rds-mysql]} 2016/01/26 23:04:05 Starting: {webserver-elb elb 1 0 [webserver]} 2016/01/26 23:04:05 Starting: {www denominator 0 0 [webserver-elb]} 2016/01/26 23:04:05 lamp.*.*.www00....www.denominator activity rate 10ms 2016/01/26 23:04:06 chaosmonkey delete: lamp.us-east-1.zoneC.webserver02....webserver.monolith 2016/01/26 23:04:07 asgard: Shutdown 2016/01/26 23:04:07 lamp.us-east-1.zoneB.eureka01....eureka.eureka: closing 2016/01/26 23:04:07 lamp.us-east-1.zoneA.eureka00....eureka.eureka: closing 2016/01/26 23:04:07 lamp.us-east-1.zoneC.eureka02....eureka.eureka: closing 2016/01/26 23:04:07 spigo: complete 2016/01/26 23:04:07 lamp.edda: closing

  • a architecture lamp
  • j graph json/lamp.json
  • d run for 2 seconds
slide-101
SLIDE 101

Riak IoT Architecture

{ "arch": "riak", "description":"Riak IoT ingestion example for the RICON 2015 presentation", "version": "arch-0.0", "victim": "", "services": [ { "name": "riakTS", "package": "riak", "count": 6, "regions": 1, "dependencies": ["riakTS", "eureka"]}, { "name": "ingester", "package": "staash", "count": 6, "regions": 1, "dependencies": ["riakTS"]}, { "name": "ingestMQ", "package": "karyon", "count": 3, "regions": 1, "dependencies": ["ingester"]}, { "name": "riakKV", "package": "riak", "count": 3, "regions": 1, "dependencies": ["riakKV"]}, { "name": "enricher", "package": "staash", "count": 6, "regions": 1, "dependencies": ["riakKV", "ingestMQ"]}, { "name": "enrichMQ", "package": "karyon", "count": 3, "regions": 1, "dependencies": ["enricher"]}, { "name": "analytics", "package": "karyon", "count": 6, "regions": 1, "dependencies": ["ingester"]}, { "name": "analytics-elb", "package": "elb", "count": 0, "regions": 1, "dependencies": ["analytics"]}, { "name": "analytics-api", "package": "denominator", "count": 0, "regions": 0, "dependencies": ["analytics-elb"]}, { "name": "normalization", "package": "karyon", "count": 6, "regions": 1, "dependencies": ["enrichMQ"]}, { "name": "iot-elb", "package": "elb", "count": 0, "regions": 1, "dependencies": ["normalization"]}, { "name": "iot-api", "package": "denominator", "count": 0, "regions": 0, "dependencies": ["iot-elb"]}, { "name": "stream", "package": "karyon", "count": 6, "regions": 1, "dependencies": ["ingestMQ"]}, { "name": "stream-elb", "package": "elb", "count": 0, "regions": 1, "dependencies": ["stream"]}, { "name": "stream-api", "package": "denominator", "count": 0, "regions": 0, "dependencies": ["stream-elb"]} ] }

New tier name Tier package Node count List of tier dependencies 0 = non Regional

slide-102
SLIDE 102

Single Region Riak IoT

slide-103
SLIDE 103

Single Region Riak IoT

IoT Ingestion Endpoint Stream Endpoint Analytics Endpoint

slide-104
SLIDE 104

Single Region Riak IoT

IoT Ingestion Endpoint Stream Endpoint Analytics Endpoint Load Balancer Load Balancer Load Balancer

slide-105
SLIDE 105

Single Region Riak IoT

IoT Ingestion Endpoint Stream Endpoint Analytics Endpoint Load Balancer Normalization Services Load Balancer Load Balancer Stream Service Analytics Service

slide-106
SLIDE 106

Single Region Riak IoT

IoT Ingestion Endpoint Stream Endpoint Analytics Endpoint Load Balancer Normalization Services Enrich Message Queue Riak KV Enricher Services Load Balancer Load Balancer Stream Service Analytics Service

slide-107
SLIDE 107

Single Region Riak IoT

IoT Ingestion Endpoint Stream Endpoint Analytics Endpoint Load Balancer Normalization Services Enrich Message Queue Riak KV Enricher Services Ingest Message Queue Load Balancer Load Balancer Stream Service Analytics Service

slide-108
SLIDE 108

Single Region Riak IoT

IoT Ingestion Endpoint Stream Endpoint Analytics Endpoint Load Balancer Normalization Services Enrich Message Queue Riak KV Enricher Services Ingest Message Queue Load Balancer Load Balancer Stream Service Riak TS Analytics Service Ingester Service

slide-109
SLIDE 109

Two Region Riak IoT

IoT Ingestion Endpoint Stream Endpoint Analytics Endpoint East Region Ingestion West Region Ingestion Multi Region TS Analytics

slide-110
SLIDE 110

Two Region Riak IoT

IoT Ingestion Endpoint Stream Endpoint Analytics Endpoint East Region Ingestion West Region Ingestion Multi Region TS Analytics

What’s the response time of the stream endpoint?

slide-111
SLIDE 111

Response Times

slide-112
SLIDE 112

What’s the response time of a simple service?

memcached rds-msql rds-msql webservers elb www

slide-113
SLIDE 113

What’s the response time of an even simpler storage backed web service?

memcached mysql disk volume web service load generator

slide-114
SLIDE 114

Measuring Response Time With Histograms

slide-115
SLIDE 115

Changes made to codahale/hdrhistogram Changes made to go-kit/kit/metrics Implementation in adrianco/spigo/collect

slide-116
SLIDE 116

What to measure?

Client Server

GetRequest GetResponse

Client Time

Client Send CS Server Receive SR Server Send SS Client Receive CR

Server Time

slide-117
SLIDE 117

What to measure?

Client Server

GetRequest GetResponse

Client Time

Client Send CS Server Receive SR Server Send SS Client Receive CR

Response CR-CS Service SS-SR Network SR-CS Network CR-SS Net Round Trip (SR-CS) + (CR-SS) (CR-CS) - (SS-SR)

Server Time

slide-118
SLIDE 118

Spigo Histogram Results

name: storage.*.*.load00....load.denominator_resp count: 1978 gauges: map[50:126975 99:278527] From, To, Count, Prob, Bar 28672, 29695, 1, 0.0005, : 31744, 32767, 1, 0.0005, : 34816, 36863, 2, 0.0010, :# 36864, 38911, 8, 0.0040, |###### 38912, 40959, 13, 0.0066, |########## 40960, 43007, 18, 0.0091, |############## 43008, 45055, 12, 0.0061, |######### 45056, 47103, 26, 0.0131, |#################### 47104, 49151, 24, 0.0121, |################## 49152, 51199, 33, 0.0167, |######################### 51200, 53247, 29, 0.0147, |###################### 53248, 55295, 35, 0.0177, |########################### 55296, 57343, 39, 0.0197, |############################## 57344, 59391, 35, 0.0177, |########################### 59392, 61439, 43, 0.0217, |################################# 61440, 63487, 31, 0.0157, |######################## 63488, 65535, 39, 0.0197, |############################## 65536, 69631, 74, 0.0374, |######################################################### 69632, 73727, 65, 0.0329, |################################################## 73728, 77823, 57, 0.0288, |############################################ 77824, 81919, 37, 0.0187, |############################ 81920, 86015, 37, 0.0187, |############################ 86016, 90111, 30, 0.0152, |####################### 90112, 94207, 39, 0.0197, |############################## 94208, 98303, 28, 0.0142, |##################### 98304, 102399, 30, 0.0152, |####################### 102400, 106495, 31, 0.0157, |######################## 106496, 110591, 20, 0.0101, |############### 110592, 114687, 26, 0.0131, |#################### 114688, 118783, 44, 0.0222, |################################## 118784, 122879, 41, 0.0207, |############################### 122880, 126975, 54, 0.0273, |########################################## 126976, 131071, 51, 0.0258, |####################################### 131072, 139263, 114, 0.0576, |######################################################################################## 139264, 147455, 123, 0.0622, |############################################################################################### 147456, 155647, 127, 0.0642, |################################################################################################### 155648, 163839, 102, 0.0516, |############################################################################### 163840, 172031, 90, 0.0455, |###################################################################### 172032, 180223, 65, 0.0329, |################################################## 180224, 188415, 43, 0.0217, |################################# 188416, 196607, 60, 0.0303, |############################################## 196608, 204799, 54, 0.0273, |########################################## 204800, 212991, 29, 0.0147, |###################### 212992, 221183, 21, 0.0106, |################ 221184, 229375, 25, 0.0126, |################### 229376, 237567, 18, 0.0091, |############## 237568, 245759, 15, 0.0076, |########### 245760, 253951, 9, 0.0046, |####### 253952, 262143, 8, 0.0040, |###### 262144, 278527, 10, 0.0051, |####### 278528, 294911, 6, 0.0030, |#### 294912, 311295, 2, 0.0010, |# 327680, 344063, 2, 0.0010, :# 344064, 360447, 1, 0.0005, | 376832, 393215, 1, 0.0005, :

name: storage.*.*.load00....load.denominator_resp count: 1978 gauges: map[50:126975 99:278527] From, To, Count, Prob, Bar 28672, 29695, 1, 0.0005, : 31744, 32767, 1, 0.0005, : 34816, 36863, 2, 0.0010, :#

36864, 38911, 8, 0.0040, |######

38912, 40959, 13, 0.0066, |##########

Normalized probability Response time distribution measured in nanoseconds using High Dynamic Range Histogram :# Zero counts skipped |# Contiguous buckets Total count, median and 99th percentile values

slide-119
SLIDE 119

See http://www.getguesstimate.com/models/1307 https://github.com/getguesstimate/guesstimate-app by Ozzie Gooen

slide-120
SLIDE 120

See http://www.getguesstimate.com/models/1307 https://github.com/getguesstimate/guesstimate-app by Ozzie Gooen

slide-121
SLIDE 121

See http://www.getguesstimate.com/models/1307 https://github.com/getguesstimate/guesstimate-app by Ozzie Gooen

slide-122
SLIDE 122

See http://www.getguesstimate.com/models/1307 https://github.com/getguesstimate/guesstimate-app by Ozzie Gooen

slide-123
SLIDE 123

Hit rates: memcached 40% mysql 70%

slide-124
SLIDE 124

memcached hit % memcached response mysql response service cpu time memcached hit mode mysql cache hit mode mysql disk access mode

Hit rates: memcached 40% mysql 70%

slide-125
SLIDE 125

Hit rates: memcached 60% mysql 70%

slide-126
SLIDE 126

memcached hit % memcached response mysql response service cpu time memcached hit mode mysql cache hit mode mysql disk access mode

Hit rates: memcached 60% mysql 70%

slide-127
SLIDE 127

Hit rates: memcached 20% mysql 90%

slide-128
SLIDE 128

memcached hit % memcached response mysql response service cpu time memcached hit mode mysql cache hit mode mysql disk access mode

Hit rates: memcached 20% mysql 90%

slide-129
SLIDE 129

Go Guesstimate Interface

https://github.com/adrianco/goguesstimate

{ "space": { "name": "gotest", "description": "Testing", "is_private": "true", "graph": { "metrics": [ {"id": "AB", "readableId": "AB", "name": "memcached", "location": {"row": 2, "column":4}}, {"id": "AC", "readableId": "AC", "name": "memcached percent", "location": {"row": 2, "column": 3}}, {"id": "AD", "readableId": "AD", "name": "staash cpu", "location": {"row": 3, "column":3}}, {"id": "AE", "readableId": "AE", "name": "staash", "location": {"row": 3, "column":2}} ], "guesstimates": [ {"metric": "AB", "input": null, "guesstimateType": "DATA", "data": [119958,6066,13914,9595,6773,5867,2347,1333,9900,9404,13518,9021,7915,3733,10244,5461,12243,7931,9044,11706, 5706,22861,9022,48661,15158,28995,16885,9564,17915,6610,7080,7065,12992,35431,11910,11465,14455,25790,8339,9 991]}, {"metric": "AC", "input": "40", "guesstimateType": "POINT"}, {"metric": "AD", "input": "[1000,4000]", "guesstimateType": "NORMAL"}, {"metric": "AE", "input": "=100+((randomInt(0,100)>AC)?AB:AD)", "guesstimateType": "FUNCTION"} ] } } }

slide-130
SLIDE 130

See http://www.getguesstimate.com

slide-131
SLIDE 131

What’s Next?

slide-132
SLIDE 132

Trends to watch for 2016: Serverless Architectures - AWS Lambda Teraservices - using terabytes of memory

slide-133
SLIDE 133

Serverless Architectures

AWS Lambda getting some early wins Google Cloud Functions alpha launched IBM OpenWhisk - open sourced Startup activity: iron.io , serverless.com, apex.run toolkit

slide-134
SLIDE 134

Teraservices

slide-135
SLIDE 135

Terabyte Memory Directions

Engulf dataset in memory for analytics Balanced config for memory intensive workloads Replace high end systems at commodity cost point Explore non-volatile memory implications

slide-136
SLIDE 136

Terabyte Memory Options

Now: Diablo DDR4 DIMM containing flash 64/128/256GB Migrates pages to/from companion DRAM DIMM Shipping now as volatile memory, future non-volatile Announced but not shipped for 2016 AWS X1 Instance Type - over 2TB RAM Easy availability should drive innovation

slide-137
SLIDE 137

Diablo Memory1: Flash DIMM

NO CHANGES to CPU or Server NO CHANGES to Operating System NO CHANGES to Applications

✓ UP TO 256GB DDR4 MEMORY PER MODULE ✓ UP TO 4TB MEMORY IN 2 SOCKET SYSTEM

TM

slide-138
SLIDE 138

Learn More…

slide-139
SLIDE 139

Q&A

Adrian Cockcroft @adrianco http://slideshare.com/adriancockcroft Technology Fellow - Battery Ventures

See www.battery.com for a list of portfolio investments

slide-140
SLIDE 140

Security

Visit http://www.battery.com/our-companies/ for a full list of all portfolio companies in which all Battery Funds have invested. Palo Alto Networks

Enterprise IT

Operations & Management Big Data Compute Networking Storage