Slide 1

Slide 1 text

Towards Language Support for Distributed Systems Heather Miller

Slide 2

Slide 2 text

But it doesn’t always look that way from the outside… One thing I love about research is that research is very animated.

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

This talk is about context Whirlwind tour of research on language support for distributed programming

Slide 7

Slide 7 text

Language Support for Distributed Systems = ways that the programming language/ compiler can aid in the development of a distributed application

Slide 8

Slide 8 text

Distributed Programming Research Today If I could visually depict all of the various research projects in the space of distributed programming… it’d look something like this! Context

Slide 9

Slide 9 text

Distributed Programming Research Today Session Types Consistency & Programming Models Context Static Analysis & Verification

Slide 10

Slide 10 text

Distributed Programming Research Today Context Session Types Consistency & Programming Models Static Analysis & Verification Other research

Slide 11

Slide 11 text

Distributed Programming Research Today Context Session Types Consistency & Programming Models Static Analysis & Verification Other research I’ll give a high-level overview of these

Slide 12

Slide 12 text

Consistency

Slide 13

Slide 13 text

Consistency? Specifically I mean programming models that provide some kind of consistency guarantee.

Slide 14

Slide 14 text

Consistency? If I have a replica of an object/datum that can be updated by another node… What guarantees do I have about what all other nodes see? Specifically I mean programming models that provide some kind of consistency guarantee. Example scenario:

Slide 15

Slide 15 text

Consistency? Example scenario: If I have a replica of an object/datum that can be updated by another node… What guarantees do I have about what all other nodes see? Specifically I mean programming models that provide some kind of consistency guarantee. Often a developer assumes that they want strong consistency (everyone can see the same state). But sometimes weak consistency is good enough (not every node needs to be in sync before computation can resume)

Slide 16

Slide 16 text

the CAP theorem. Consistency? Specifically I mean programming models that provide some kind of consistency guarantee. In the past decade or so, thinking about controlling consistency by way of a programming model has come out of a famous impossibility result:

Slide 17

Slide 17 text

the CAP theorem. A Consistency Availability C P Partition Tolerance (Linearizability) Quickly must state

Slide 18

Slide 18 text

the CAP theorem. A Consistency Availability C P Partition Tolerance (Linearizability) Quickly must state This has been broadly interpreted as: Pick two.

Slide 19

Slide 19 text

Models that can enforce or tolerate weaker consistency Models like CRDTs choose sides. CRDTs (Conflict-free replicated data types.)

Slide 20

Slide 20 text

Models that can enforce or tolerate weaker consistency Models like CRDTs choose sides. Such models sacrifice consistency in favor of availability. CRDTs (Conflict-free replicated data types.) (People like to call these AP) Think: Data structures that can be replicated over many nodes. When one node updates its replica, a CRDT guarantees that eventually all replicas will be eventually consistent.

Slide 21

Slide 21 text

Models that can enforce or tolerate weaker consistency There has been effort to provide CRDTs as data types in functional languages that allow for composition. On the CRDTs+ programming model front…

Slide 22

Slide 22 text

Models that choose other points in the design space There is also work experimenting with other edges of that triangle.

Slide 23

Slide 23 text

Models that choose other points in the design space There is also work experimenting with other edges of that triangle. Meiklejohn’s work on Spry explores whether there’s other design points in the space, e.g., CA. “Spry is a programming model for building applications that want to tradeoff availability and consistency at varying points in application code to support application requirements.”

Slide 24

Slide 24 text

Models that choose other points in the design space There is also work experimenting with other edges of that triangle. Meiklejohn’s work on Spry explores whether there’s other design points in the space, e.g., CA. “Spry is a programming model for building applications that want to tradeoff availability and consistency at varying points in application code to support application requirements.” Can add bounded staleness and freshness requirements via annotations!

Slide 25

Slide 25 text

Mixed Consistency Answers the question of what if we want to choose from multiple consistency options in one application? Work from the distributed systems community takes a step: Correctables

Slide 26

Slide 26 text

Mixed Consistency Answers the question of what if we want to choose from multiple consistency options in one application? • invokeWeak(operation) • invokeStrong(operation) • invoke(operation[, levels]) Give the user different APIs depending on the sort of consistency they’re after! Correctables They provide incremental consistency guarantees by capturing successive changes to the value of a replicated object. Applications can opt to receive a fast but possibly inconsistent result if eventual consistency is acceptable, or to wait for a strongly consistent result.

Slide 27

Slide 27 text

Mixed Consistency Answers the question of what if we want to choose from multiple consistency options in one application? Work from the programming languages community takes a step: MixT

Slide 28

Slide 28 text

Session Types

Slide 29

Slide 29 text

What are they? Can be thought of as types for communication protocols

Slide 30

Slide 30 text

What are they? Can be thought of as types for communication protocols That is, if a program type checks, then it’s guaranteed to follow the defined communication protocol.

Slide 31

Slide 31 text

What are they? No hanging systems due to an accidental message send to the wrong service! Can be thought of as types for communication protocols That is, if a program type checks, then it’s guaranteed to follow the defined communication protocol. More concretely:

Slide 32

Slide 32 text

What are they? No hanging systems due to an accidental message send to the wrong service! Can be thought of as types for communication protocols Binary & Multiparty Static & Dynamic That is, if a program type checks, then it’s guaranteed to follow the defined communication protocol. More concretely: Many variants of session types:

Slide 33

Slide 33 text

What are they? Tiny example of implementing SMTP: SMTPClient = ⊕ { EHLO: !Domain.!FromAddress.!ToAddress.!Message.SMTPClient QUIT: end } great introduction to session types by Simon Fowler: http:/ /simonjf.com/2016/05/28/session-type-implementations.html Client side:

Slide 34

Slide 34 text

What are they? Tiny example of implementing SMTP: SMTPClient = ⊕ { EHLO: !Domain.!FromAddress.!ToAddress.!Message.SMTPClient QUIT: end } great introduction to session types by Simon Fowler: http:/ /simonjf.com/2016/05/28/session-type-implementations.html Client side: means: select between the following two branches

Slide 35

Slide 35 text

What are they? Tiny example of implementing SMTP: SMTPClient = ⊕ { EHLO: !Domain.!FromAddress.!ToAddress.!Message.SMTPClient QUIT: end } great introduction to session types by Simon Fowler: http:/ /simonjf.com/2016/05/28/session-type-implementations.html Client side: EHLO: send (!) domain, from address, to address, and the message. Repeat. means: select between the following two branches

Slide 36

Slide 36 text

What are they? Tiny example of implementing SMTP: SMTPClient = ⊕ { EHLO: !Domain.!FromAddress.!ToAddress.!Message.SMTPClient QUIT: end } great introduction to session types by Simon Fowler: http:/ /simonjf.com/2016/05/28/session-type-implementations.html Client side: EHLO: send (!) domain, from address, to address, and the message. Repeat. QUIT: protocol is over. means: select between the following two branches

Slide 37

Slide 37 text

What are they? SMTPClient = ⊕ { EHLO: !Domain.!FromAddress.!ToAddress.!Message.SMTPClient QUIT: end } SMTPServer = & { EHLO: ?Domain.?FromAddress.?ToAddress.?Message.SMTPServer QUIT: end } great introduction to session types by Simon Fowler: http:/ /simonjf.com/2016/05/28/session-type-implementations.html Tiny example of implementing SMTP: Client side: Server side:

Slide 38

Slide 38 text

What are they? SMTPClient = ⊕ { EHLO: !Domain.!FromAddress.!ToAddress.!Message.SMTPClient QUIT: end } SMTPServer = & { EHLO: ?Domain.?FromAddress.?ToAddress.?Message.SMTPServer QUIT: end } great introduction to session types by Simon Fowler: http:/ /simonjf.com/2016/05/28/session-type-implementations.html Tiny example of implementing SMTP: Client side: Server side: means: offering a choice between the following two branches

Slide 39

Slide 39 text

What are they? sig smtpClient : (SMTPClient, FromAddress, ToAddress, Message) ~> () fun smtpClient(c, from, to, msg) { var c1 = select EHLO c; var c2 = send(getDomain(from), c1); var c3 = send(from, c2); var c4 = send(to, c3); var c5 = send(message, c4) var c6 = select QUIT c5; close c6 } great introduction to session types by Simon Fowler: http:/ /simonjf.com/2016/05/28/session-type-implementations.html Tiny example of implementing SMTP: Implementation of the client: (Implemented in Links)

Slide 40

Slide 40 text

Is this only theory? No! There are prototypes of session types implemented for many languages! C: Multiparty Session C (https://www.doc.ic.ac.uk/~cn06/sessionc/) Rust: session-types (https://github.com/Munksgaard/session-types) Erlang: monitored-session-erlang (https://github.com/SimonJF/monitored-session-erlang) Java: Scribble (https://www.doc.ic.ac.uk/~rhu/scribble/index.html) Scala: Ichannels (http://alcestes.github.io/lchannels/) Haskell: effect-sessions (https://www.doc.ic.ac.uk/~dorchard/popl16/) Python: SPY (https://www.doc.ic.ac.uk/~rn710/spy/)

Slide 41

Slide 41 text

Still interested? If you want a friendly introduction, check out Simon Fowler’s blog article! http:/ /simonjf.com/ 2016/05/28/session-type- implementations.html Sam Lindley Phil Wadler Frank Pfenning

Slide 42

Slide 42 text

Zooming out…

Slide 43

Slide 43 text

Some cool projects that don’t fit neatly into these categories

Slide 44

Slide 44 text

Whip Lucas Waye, Stephen Chong, Christos Dimoulas ICFP 2017

Slide 45

Slide 45 text

Whip Lucas Waye, Stephen Chong, Christos Dimoulas Whip must… • …operate under partial deployment • …be transparent (don’t touch communication) • …be language agnostic • …should accommodate the loose coupling of modern services and be extensible with wire protocols.

Slide 46

Slide 46 text

Paul Chiusano, Arya Irani, Rúnar Bjarnason Unison under development

Slide 47

Slide 47 text

Paul Chiusano, Arya Irani, Rúnar Bjarnason Unison move computations around which are received and interpreted by the receiving node. Key idea: Functional Haskell-like language, where you can

Slide 48

Slide 48 text

Syndicate Tony Garnock-Jones and collaborators PhD 2017

Slide 49

Slide 49 text

ML5 Tom Murphy VII and collaborators PhD 2008

Slide 50

Slide 50 text

Function-passing Philipp Haller, Heather Miller, Normen Müller JFP 2018

Slide 51

Slide 51 text

A bird’s eye view of a couple of our projects that we hope will move the needle.

Slide 52

Slide 52 text

Statically ensuring that microservices satisfy invariants Adelbert Chang Getting going on this project together.

Slide 53

Slide 53 text

Christopher Meiklejohn Zeeshan Lakhani Peter Alvaro

Slide 54

Slide 54 text

Statically ensuring that functions on replicated data are monotone. Kevin Clancy

Slide 55

Slide 55 text

our projects Distributed Programming Research Today (relatively)

Slide 56

Slide 56 text

Ilya Sergey University College London Damien Zufferey Max Planck Institute for Software Systems Marc Shapiro Sorbonne- Université-LIP6 & Inria ! " # Alexy Gotsman IMDEA Software Institute$ Sebastian Burckhardt Microsoft Research % Tom Van Cutsem Nokia Bell Labs & Suresh Jagannathan Purdue University % Patrick Eugster University of Lugano ' James Cheney University of Edinburgh ! Wolfgang De Meuter Vrije Universiteit Brussel Tony Garnock-Jones University of Glasgow ! Other folks active in this space

Slide 57

Slide 57 text

Lotsa References Programming Languages conferences

Slide 58

Slide 58 text

Lotsa References Programming Languages conferences

Slide 59

Slide 59 text

Lotsa References Programming Languages conferences

Slide 60

Slide 60 text

Lotsa References Programming Languages conferences

Slide 61

Slide 61 text

Lotsa References Programming Languages conferences

Slide 62

Slide 62 text

Lotsa References other conferences

Slide 63

Slide 63 text

Lotsa References other conferences http://bit.ly/dist-prog-refs posted online at:

Slide 64

Slide 64 text

Thank you! References available: (soon) http://bit.ly/dist-prog-refs posted online at: