rethinking thinking: models for event-driven programming

27
RETHINKING THINKING MODELS FOR EVENT-DRIVEN PROGRAMMING CORNELIA DAVIS SR. DIRECTOR OF TECHNOLOGY PIVOTAL

Upload: cornelia-davis

Post on 23-Jan-2018

275 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Rethinking thinking: Models for Event-driven Programming

RETHINKING THINKING MODELS FOR EVENT-DRIVEN PROGRAMMING

CORNELIA DAVIS SR. DIRECTOR OF TECHNOLOGY PIVOTAL

Page 2: Rethinking thinking: Models for Event-driven Programming

function SumToN(n : INTEGER): INTEGER; var i : INTEGER; s : INTEGER; begin i := 0; s := 0; while (i <= n) do begin s := s + i; i := i + 1; end; SumToN := s; end;

Page 3: Rethinking thinking: Models for Event-driven Programming

(define sumToN (lambda (n) (if (= n 1) 1 (+ n (sumToN (- n 1))) )))

Page 4: Rethinking thinking: Models for Event-driven Programming

function SumToN(n : INTEGER): INTEGER; var i : INTEGER; s : INTEGER; begin i := 0; s := 0; while (i <= n) do begin s := s + i; i := i + 1; end; SumToN := s; end;

VARIABLE

ITERATION

ASSIGNMENT (SIDE EFFECT)

START TO FINISHSTART TO FINISH

Page 5: Rethinking thinking: Models for Event-driven Programming

(define sumToN (lambda (n) (if (= n 1) 1 (+ n (sumToN (- n 1))) )))

CONDITIONAL

BASE CASE

GENERAL CASE (INCLUDES A LEAP OF FAITH)

Page 6: Rethinking thinking: Models for Event-driven Programming

function SumToN(n : INTEGER): INTEGER; var i : INTEGER; s : INTEGER; begin i := 0; s := 0; while (i <= n) do begin s := s + i; i := i + 1; end; SumToN := s; end;

(define sumToN (lambda (n) (if (= n 1) 1 (+ n (sumToN (- n 1))) )))

RECURSION IS HARD!!

RECURSION IS NATURAL

Page 7: Rethinking thinking: Models for Event-driven Programming

WHAT ARE THE PRIMITIVES, PATTERNS AND PLATFORMS THAT WILL MAKE EVENT-DRIVEN PROGRAMMING

EASY?

Page 8: Rethinking thinking: Models for Event-driven Programming

FUNCTIONS AND

EVENTS?

Page 9: Rethinking thinking: Models for Event-driven Programming

MAYBE

I HONESTLY HAVEN’T GOT A CLUE

Page 10: Rethinking thinking: Models for Event-driven Programming

@cdavisafc

THE “IMPERATIVE” MODEL?

CLOUD-NATIVE SOFTWARE

▸ Cloud-Native App (yup, the microservices)

▸ Cloud-Native Services (yup, some are apps … and other are other types of services)

▸ Cloud-Native Data (a distributed data fabric)

▸ The Cloud-Native Collective (implicit and explicit connections)

APP

SERVICE APP

SERVICE APP

SERVICE APP

SERVICE APP

DATA DATA

DATA

?

Page 11: Rethinking thinking: Models for Event-driven Programming

11 http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html

Page 12: Rethinking thinking: Models for Event-driven Programming

APPSERVICE

APPSERVICE

APP

APP

WE’VE BEEN THINKING CLIENT/SERVER FOR SO LONG

▸ HA & Scaling

▸ → Multiple Instances

▸ → Load Balancing

▸ → Externalize Config

▸ Resilience

▸ → Statelessness

▸ → Retries

▸ → Circuit Breaker

APPSERVICE

APP

DATA

ROUT

ER

CONFIG SERVICES

Page 13: Rethinking thinking: Models for Event-driven Programming

SERVICE

APP + …

▸ Autonomy and Agility

▸ → Versioning

▸ Dynamic Environment

▸ → Service Discovery

▸ → Resource Bindings

APP SERVICE APP

SERVICE APP

CLIENT SERVICE

DATA

ROUT

ER

SERVICE DISCOVERY

Page 14: Rethinking thinking: Models for Event-driven Programming

DATA

IN SERVICE TO “SERVICES”

▸ Agility and Autonomy

▸ → Services get their own DB

▸ → MDM? (eeh)

▸ Resilience

▸ → Caches

▸ → Cache miss

▸ → Expiry

SERVICE APP

SERVICE APP

SERVICE APP

DATA

DATA

DATA

?

Page 15: Rethinking thinking: Models for Event-driven Programming

THE COLLECTIVE

WE’VE BEEN THINKING CLIENT/SERVER FOR SO LONG

▸ Managability

▸ → Distributed Tracing

▸ Act locally - who’s thinking globally?

SERVICE APP

SERVICE APPAPP

SERVICE APP

SERVICE APP

SERVICE APP

Page 16: Rethinking thinking: Models for Event-driven Programming

DISTRIBUTED SYSTEMS CONCERNS

▸ HA & Scaling

▸ Dynamic Environment

▸ Resilience

▸ Autonomy and Agility

▸ Managability

Page 17: Rethinking thinking: Models for Event-driven Programming

FROM RETRIES…

CLIENT

SERVICE

RETRY

CLIENT

EVENT

PROMISE

… TO PROMISES

GENERAL CASE (INCLUDES A LEAP OF FAITH)

… ENSURING EVENTS ARE NOT LOSTFROM CIRCUIT BREAKERS…

RESILIENCE

Page 18: Rethinking thinking: Models for Event-driven Programming

FROM CACHE EXPIRY…

SERVICE SERVICE

… TO MATERIALIZED VIEWS

GENERAL CASE (INCLUDES A LEAP OF FAITH)

… ENSURING EVENTS ARE NOT LOST

CACHEEXPIRY

VIEW

EVENT CONSUMER

AUTONOMY

… …Event Stream

Page 19: Rethinking thinking: Models for Event-driven Programming

FROM SERVICES…

SERVICE

… TO FUNCTIONS

… TO FUNCTIONSFROM LOAD BALANCING…

FUNCTION

FUNCTION

FUNCTION

A BIT LIKE THE STACK FRAME WITH EACH RECURSIVE CALL

RESILIENCE & SCALE

LOAD

BAL

ANCI

NG

Page 20: Rethinking thinking: Models for Event-driven Programming

SERVICE

FROM DATA BOTTLENECK… … DATA PARTITIONING

DATA DATA

SERVICE

DATA

SERVICE

DATA

SERVICE

… AND PARTITION RESOLVERS

SERVICE SERVICE

SCALE

Page 21: Rethinking thinking: Models for Event-driven Programming

FROM SHARED DATABASES…

SERVICE A

… EVENT SOURCING

DATA

SERVICE B SERVICE C

VIEW

SERVICE A

VIEW

SERVICE B

VIEW

SERVICE C

EVENT CONSUMER

EVENT STORE

EVENT CONSUMER

EVENT CONSUMER

AUTONOMY

Page 22: Rethinking thinking: Models for Event-driven Programming

ALSO, EVENT PRODUCERS

VIEW

SERVICE A

VIEW

SERVICE B

VIEW

SERVICE C

EVENT CONSUMER

EVENT STORE

EVENT CONSUMER

EVENT CONSUMER

EVENT PRODUCER

EVENT PRODUCER

Page 23: Rethinking thinking: Models for Event-driven Programming

MANY QUESTIONS

▸ Programming the “Collective”

▸ Justifying the “leap of faith”

▸ …

Page 24: Rethinking thinking: Models for Event-driven Programming

@cdavisafc

CLOUD-NATIVE - IMPERATIVE MODEL

▸ Cloud-native Apps

▸ Scale out

▸ Statelessness

▸ Externalize configuration

▸ Implications from changes in the application lifecycle

▸ Retries

▸ Services

▸ Versioned services (autonomy)

▸ Service Discovery

▸ Distributed tracing

▸ Data

▸ Breaking the Data monolith

▸ Data APIs

▸ Caching

▸ Polyglot Persistence

▸ Event sourcing

Page 25: Rethinking thinking: Models for Event-driven Programming

@cdavisafc

CLOUD-NATIVE - EVENT-DRIVEN MODEL

▸ Promises

▸ Event Consumers

▸ Event Producers

▸ Distributed Data Fabric: Data Partitioning and Partition Resolvers

▸ Event Sourcing and Materialized Views

▸ Health check (are producers & consumers functioning?)

Page 26: Rethinking thinking: Models for Event-driven Programming

Hard to explain in layman terms in just a sentence. I'll try to make it as layman as possible.

Suppose you have a function f which takes one argument which is supposed to be a continuation. Then call/cc is a special function that takes f as an argument and calls f passing it, as its argument, the current continuation, which is the continuation in which call/cc itself was called

FROM QUORA: WHAT IS CALL/CC IN LAYMAN TERMS?

Page 27: Rethinking thinking: Models for Event-driven Programming

THANK YOU