why … erlang?twvideo01.ubm-us.net/.../presentations/diedrich_henning_whyerlang.pdf · 3...

160
Why … Erlang? Henning Diedrich CEO Eonblast

Upload: dinhtruc

Post on 30-Jan-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

Why … Erlang?

Henning DiedrichCEO Eonblast

Page 2: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

2

Your Host

Henning Diedrich

• Founder, CEO Eonblast• CTO Freshworks• CTO, Producer at Newtracks• Team Lead, Producer at Bigpoint• OS Maintainer Emysql, Erlvolt

Page 3: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

3

Acknowledgements

Thank You!

Joe ArmstrongRobert Virding Erlang SolutionsUlf Wiger Feuerland LabsFelix Geisendörfer Transloadit

… for vetting and improving these slides in various stages.All errors and omissions are, of course, mine.

Page 4: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

4

Why Erlang?

1. Why Care About It?2. Who Uses It?3. What for?4. Is It for Me? 5. How It Looks6. Getting Started!

Page 5: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

5

Erlang may be to Javawhat Java was to C++

Page 6: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

6

Erlang may be to Javawhat Java was to C++

C++ – pointers = Java

Java – deadlocks = Erlang

Page 7: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

7

Erlang may be to Javawhat Java was to C++

„Drop Slides 4 and 5“

Joe Armstrong

Page 8: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

8

Erlang may be to Javawhat Java was to C++

Erlang is a lot more ...

Page 9: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

9

Who Uses It?

Page 10: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

10

You are Using It

„You probably use systems based on Erlang/OTP every day without knowing it.“

Mike Williams

Page 11: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

11

Erlang Game Servers

Zynga: FarmVille via membase, Activision Blizzard: Call of Duty, Bigpoint: Battle Star Galactica, Wooga: Magic Land

Page 12: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

12

Distributed DBs using Erlang

Handling state: secure, fast and distributed.Membase, riak, BigCouch

Page 14: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

14

The Erlang Poster Child

Klarna AB

• Financial Services for E-Commerce• 600 Employees, $38M revenue • 12,000 e-commerce stores• 30 seconds downtime in 3 years• Investment by Sequoia Capital

Page 15: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

15

Sequoia Capital

1975 Atari 1978 Apple1982 Electronic Arts1987 Cisco1993 Nvidia1995 Yahoo!1999 Google1999 Paypal

2000 Rackspace2003 LinkedIn2005 YouTube2007 Dropbox2009 Unity 3D2010 Klarna2012 Instagram

Page 16: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

16

Why Use It?

Page 17: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

17

Why Erlang?

Business Perspective

• Reduce Costs• Improve Retention• Shorten Time To Market

Page 18: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

18

Why Erlang?

Production Perspective

• High Productivity• Low Hardware Requirements• More Robust Servers

Page 19: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

19

Why Erlang?

Design Perspective

• More Complex Designs• Profitable On Small Markets• Less Mainstreaming Pressure

Page 20: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

20

When Use It?

Page 21: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

21

Sweet Spots

• Stateful Servers with High Throughput• Cluster Distribution Layers• Chats*

* Chats are a bitch. The Facebook Chat was written in Erlang.

Page 22: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

22

Why Is It Good At These Things?

Page 23: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

23

Origins

PLEX• Ericsson makes billions with telecom switches• They used PLEX, an all proprietary software• PLEX delivers, but has bad productivity

Page 24: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

24

Origins• The 80's: Ericsson Computer Science Lab

Joe Armstrong, Robert Virding, Mike Williams

„What aspects of computer languages make it easier to program telecom systems?“

Page 25: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

25

OriginsMission

● Keep features, but invent a more productive PLEX.

Approach● Programmed a small telephone exchange (MD110) in

Prolog, CHILL, Ada, Concurrent Euclid,Rules Based Systems, AI Systems, Functional Langs

Conclusion● Many good abstractions● None could match the characteristics of PLEX

The True story about why we invented Erlang and A few things you don’t want to tell your ManagerMike Williams

www.erlang-factory.com/upload/presentations/416/MikeWilliams.pdf

Page 26: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

26

Origins

PLEX● Safe pointers● Ability to change size of arrays etc without memory leaks● Fine grained massive concurrency● Ability to develop software in independent “blocks”● Ability to change code at runtime without stopping● Advanced tracing ability at runtime● Restart Mechanisms to recover software & hardware failure

The True story about why we invented Erlang and A few things you don’t want to tell your ManagerMike Williams

www.erlang-factory.com/upload/presentations/416/MikeWilliams.pdf

Page 27: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

27

Erlang was Built For

• Reliability• Maintenance• Distribution• Productivity

Page 28: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

28

Features Achieved

● Productive● Reliable● Fast● Scalable● Great to Maintain

… how?

Page 29: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

29

The Magic

• Microprocesses• Pattern Matching*

• Immutable Variables

* Not your familiar Regex string matching

Page 30: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

30

What Is That?

Page 31: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

31

Thinking Erlang

• The Actor Model• Thinking Parallel• Thinking Functional• Thinking Processes• Let It Crash!

Page 32: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

32

Actor Model vs. OO

Page 33: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

33

The Actor Model

Carl Hewitt 1973

• Behavior• State• Parallel• Asynchronous Messages• Mailboxes• No Shared State

Page 34: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

34

Object Oriented

Data Code

Object

● Data + Code● Encapsulation● Inheritance ● Polymorphy● Late Binding

Page 35: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

35

Data Code

Object

Actor Model

Data Code

Actor

Process

● Data + Code + Process● Self-Contained Machines● Stronger Encapsulation● Less Inheritance ● Type Inference● Hot Code Upgrades

Page 36: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

36

Data Code

Object

Actor Model

Data Code

Actor

Process

● Data + Code + Process● Self-Contained Machines● Stronger Encapsulation● Less Inheritance ● Type Inference● Hot Code Upgrades

Data Code

Object

Data Code

Actor

Process

Data Code

Object

Data Code

Actor

Process

Page 37: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

37

Data Code

Base

Data Code

Base

Data Code

Base

OO Inheritance

Data Code

Base

Data Code

Object● Inheritance of Class● Multi-Level, Multi-Branch● Overloading

Page 38: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

38

Code

Behavior

Erlang Behavior

Data Code

Actor

Process

● Inheritance of Behavior only.● Usually only one level deep.● Usually one of the standard OTP behaviors:

Generic Server, Event, State Machine, Supervisor.

Page 39: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

39

OO Methods: Synchronous Calls

● OO “method calls” are simply synchronous function calls.● Not really the OO “messages” once promised.● OO fails itself where building on Algol.

o.method(a)

Page 40: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

40

Actors: Asynchronous Messages

● Message dispatch is one-way, truly asynchronous.● Not function calls but something in their own right.● Clean break from the FP paradigm.

Pid ! Msg

Page 41: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

41

Actor Model: Benefits

• More true to the real world• Better suited for parallel hardware• Better suited for distributed architectures• Scaling garbage collection (sic!)• Less Magic

Page 42: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

42

Thinking ProcessesThinking Processes

Page 43: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

43

Thinking Processes• What should be a Process?

„Easy!“ Joe Armstrong

Page 44: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

44

Thinking Processes• Three Elevators• Ten Floors• How many processes?

Page 45: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

45

Thinking Processes

Thirteen!„It's so obvious!“ - Joe Armstrong

• elevators hold state• floors hold state• All live separate lives• All don't share state• Elevators and floors interact independently

The Algorithm courtesy Joe:1. each fl oor has it's own stop list2. when you press the "up" button on

fl oor K you broadcast to all lifts"I want to go up, how long will it take to get to me?“

3. each lift computes this independentally and

4. sends the result to fl oor K. 5. Floor K waits for 3 messages then6. Chooses the minimum7. then sends a message to this list

"add me to your stop list."

Page 46: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

46

Thinking Processes

Processes• Don’t share State• Communicate Asynchronously• Are Very Cheap to create and keep• Monitor Each Other• Provide Contention Handling• Constitute the Error Handling Atom

Page 47: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

47

Objects share Threads

● Multiple objects share threads.● Objects can be accessed across threads.● Threads - and objects - share state.

Page 48: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

48

● State, code and process form a unity: the actor.● Like processes, actors do not share state. ● In fact, like humans. Who mostly work quite well.

Actors are Processes

Page 49: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

49

Objects and Threads

Lifetime & Destruction

Page 50: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

50

Objects and Threads

C C++ C# Java JavaScript Node Lua Python

Page 51: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

51

Objects and Threads

Idle Threads

Page 52: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

52

Objects and Threads

Thread Pooling for Recycling

Controller

Page 53: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

53

Objects and Threads

Unwanted surviving objects

Leeroy Jenkins!!!

Page 54: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

54

Objects and Threads

Prematurely destroyed objects

2*B || !2*B ?

Page 55: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

55

Erlang Processes

Erlang Actors: State + Code + Process

Page 56: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

56

Erlang Processes

One dies.

Page 57: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

57

Erlang Processes

The Erlang way: the process is restarted.

Page 58: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

58

Processes are Cheap

→ No Process Pooling in Erlang

Page 59: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

59

Processes are Cheap

Have millions of them.

spawn(fun).

Page 60: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

60

Locks and Deadlocks

Page 61: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

61

Objects share State

● State can be contested.● Locks invite deadlocks.● Truly parallel architectures increase fringe case race conditions.

Page 62: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

62

Actors message Copies

● Messages can only communicate via copies of state.● Eliminates most race conditions.● (But references and locks do exist for global lists.)

Page 63: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

63

Objects reference State

● Multiple objects share threads.● Objects can be accessed across threads.● Threads - and objects - share state.

Page 64: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

64

Objects need Locks

● System design is disrupted by explicit locks.● Overly cautious locking slows things down.● Forgotten locks create errors that show under load.

Locked Locked

Waiting

Doing X1

Doing X2

Resource

Worker 2

Worker 1

Page 65: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

65

Crashed Locks Stall

● Locks can need cross-thread error handling.● Stalling and time outs aggravate load.

Locked

Waiting

Doing X1

Resource

Worker 2

Worker 1

Doing X2

Locked

Page 66: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

66

Processes are Transactional

Obviously:● One actor is one process and so, cannot “race itself”.● Mandating a job kind to an actor creates a transactional funnel.● Only one such job will ever be executing at any one time.

Do X1 for me!

Do X2 for me!

Doing X1 Doing X2Funnel

Page 67: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

67

Couldn't I just ...

… be disciplined? And program like this in Java?

:-) Almost, yes, plus some extensions.:-) Like, you can avoid null pointers in C by discipline.:-) And Conwell's Game of Life is Turing Complete.

:-( So realistically, not at all.:-( Erlang encourages the right way.:-( Erlang performs better at what it is made for.:-( Erlang/OTP is made for servers.

→ you will be faster learning and using Erlang.

Page 68: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

68

Server Architecture

Page 69: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

69

OO Server Architecture

Database

ThreadPool Objects

Client

Request / Response

Controller

Client ClientClient

ClientClientClientClient

Client

ClientClient

Page 70: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

70

Fitting Recycled Threads

● One thread fitting per single request.● Pooling owed to heavy footprint of system threads.● Cracks traumatically under pressure.

Fitting

Execute

Controller → Dispatch

Worker →

Page 71: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

71

Fitting Recycled Threads

● One thread fitting per single request.● Pooling owed to heavy footprint of system threads.● Cracks traumatically under pressure.

Fitting

Execute

Controller → Dispatch

Activated Session

Sessions →

Worker →

Pool →

Page 72: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

72

OO Server Architecture

Database

Client

Request / Response

Controller

Client ClientClient

ClientClientClientClient

Client

ClientClient

Multi-Thread Execution

Controller

Page 73: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

73

Erlang Server Architecture

Database

Client

Request / Response

Client ClientClient

ClientClientClientClient

Client

ClientClient

Shared-Nothing Processes

Page 74: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

74

● Natural congruence of requirements and system.● Thread management way simpler.● Enabled by light-weight processes.

Erlang: One Process per Session

Page 75: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

75

Sessions & Processes

Sessions and Processes correlate.

• VM schedules & spreads across Cores• Asynchronous Messages + Mailboxes• Shared-Nothing: Messages are Copies• Individual Memory Management & GC• Strong Built-In Monitoring Features

Page 76: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

76

Sessions & Processes

One Player Session per Process+ Immutable State

= Transactional Behavior

Hello CloudDB!

Page 77: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

77

Sessions & Processes

1 Session per Process+ VM is Process-Aware

= VM is Session-Aware

→ Process Stats = session stats→ Per Process GC = per session sweep

Courtesy Wooga: http://www.slideshare.net/wooga/erlang-the-big-switch-in-social-games

Page 78: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

78

OO vs Erlang Architecture

Controller

Controller Router

Page 79: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

79

Thinking Parallel

„It's not easy.“ Robert Virding

Page 80: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

80

Thinking Parallel

• The Generals’ Problem• Lamport Clocks• No Guarantees

Page 81: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

81

Generals’ Problem

State

Two generals must agree on a time to attack.

Page 82: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

82

Generals’ Problem

State

One sends a messenger.

Page 83: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

83

Generals’ Problem

State

The other acknowledges.

Page 84: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

84

Generals’ Problem

State

ACK the ACK. Etc.

Page 85: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

85

Generals’ Problem

State

The messenger may get lost.

Page 86: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

86

Byzantine Generals

State

The generals, actually, too.

Page 87: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

87

Lamport Clocks

Source: Lamport http://research.microsoft.com/users/lamport/pubs/time-clocks.pdf

Order matters more than time.

Page 88: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

88

Thinking Parallel

• Erlang makes it easy• Some things have no clean solution• Some things have complicated solutions

Page 89: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

89

Thinking Functional

Page 90: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

90

Thinking Functional

Small Functions

+ Immutable Variables

→ Don’t assign variables: return results!

Complete State in Plain Sight

→ Awful for updates in place.

→ Awsome for debugging & maintenance.

Page 91: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

91

Side Effects

Erlang is not side-effect free at all.

• Messages between Processes• Terminal Output• Logging• Global Registry• Database Access

Page 92: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

92

Let It Crash!

Page 93: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

93

Let It Crash!

• No Defense Code• On Error, restart Entire Process• Built-In Process Supervision & Restart• Missing Branches, Matches cause Crash

→ Shorter, Cleaner Code→ Faster Implementation→ More Robust: handles All Errors

Page 94: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

94

What Does That look Like?

Page 95: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

95

Hello, World!

io:format(“Hello, World!”).

Page 96: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

96

The Optics

• Alien 60ies-Looking Prolog Heir• Variables start on Capitals• Very Short Functions• No Type Declarations• Statements end on Commas, Semicolons,

Dots, Arrows, Nothing• Pattern Matched Function Heads• A Church of Short Variables Names exists

Page 97: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

97

Declarative

Fibonacci looks like a Math explanation of it.

fib(0) -> 0;

fib(1) -> 1;

fib(N) when N>1 -> fib(N-1) + fib(N-2).

Page 98: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

98

Pattern Matching

Function heads matching 0, 1 or anything.

fib(0) -> 0;

fib(1) -> 1;

fib(N) when N>1 -> fib(N-1) + fib(N-2).

Page 99: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

99

The Syntax

• Small• Easy• Stable

• Declarative• Started out as Prolog• Inspired by Prolog and ML• Obvious State, Implicit Thread

Page 100: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

100

Compiling & Executing

$ erlc hello.erl $ erl -s hello

Page 101: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

101

Hello, World! Full Module

-module(hello).

-export([start/0]).

start() -> io:format("Hello, World!~n").

Page 102: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

102

Creating a Process

Pid = spawn(mod, func, [A, B, C]).

Page 103: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

103

Creating a Process

Pid = spawn(mod, func, [A, B, C]).

Code Module Start Function Parameters to the function.New Process' ID

Page 104: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

104

Sending a Message

Pid ! Msg.

Page 105: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

105

Sending a Message

Pid ! Msg.

MessageProcess ID

Page 106: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

106

Receive a Message

receive

Msg -> Msg

end.

Page 107: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

107

Receive a Message

receive

Msg -> Msg

end.Assign Name Return Value of this block

Page 108: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

108

Hello, World! The Erlang Way

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 109: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

109

Start

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 110: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

110

Output

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 111: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

111

Process Spawning

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

New Process

Page 112: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

112

Blocking Receive

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 113: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

113

Message Passing

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 114: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

114

Pattern Matching

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 115: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

115

Atoms

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 116: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

116

Tail Recursion

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 117: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

117

Dots

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 118: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

118

Commas

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 119: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

119

End

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 120: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

120

Arrows

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 121: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

121

Arrows

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 122: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

122

Nothing

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Page 123: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

123

Modules mix Processes

-module(hello).-export([start/0, loop/0]).

start() -> Pid = spawn(hello, loop, []), Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Module's Own Process

Calling Processes

Page 124: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

124

Modules mix Processes-module(hello).-export([start/0, say/1, loop/0]).

start() -> spawn(hello, loop, []).

say(Pid) -> Pid ! hello.

loop() -> receive hello -> io:format("Hello, World!~n"), loop() end.

From Edward Garson's Blog at http://egarson.blogspot.de/2008/03/real-erlang-hello-world.html

Module's Own Process

Calling Processes

Page 125: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

125

Immutable Variables

Page 126: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

126

Immutable Variables

Can’t assign a second time:

A = A + 1.

A = 1, A = 2.

Page 127: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

127

Immutable Variables

It has to be:

B = A + 1.

A = 1, B = 2.

Page 128: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

128

Immutable Variables

• Prevent Coding Errors• Provide Transactional Semantic• Allow for Pattern Matching Syntax• Can be a Nuisance

S1 = dosomething(S),S2 = dosomemore(S1)...

Page 129: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

129

Pattern Matching

Page 130: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

130

Pattern Matching

This can mean two things:

A = func().

The meaning depends on wheterA is already assigned.

Page 131: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

131

Pattern Matching

The common, mixed case:

{ok, A} = func().

ok is an assertion AND

A is being assigned.

Page 132: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

132

Pattern Matching

The common, mixed case:

{ok, A} = func().

„This makes it hard to remodel Erlangsyntax into a more C-like syntax.“

Robert Virding

Page 133: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

133

Erlang Compared

Page 134: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

134

Erlang vs. Stackless Python

• Truly parallel VM• Stackless has a GIL

thus in reality works sequentialonly its paradigm is parallel

• Pattern Matching• Immutable Variables

Page 135: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

135

Erlang vs. C

• More productive• More concise• More reliable• Much slower for Number Crunching• Microprocesses• Pattern Matching• Immutable Variables

Page 136: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

136

Erlang vs. C++

• Virtual Machine• Actors Model• Less Magic• More Safety• Much Slower for Number Crunching• Microprocesses• Pattern Matching• Immutable Variables

Page 137: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

137

Erlang vs. Lua

• Made to Scale• Single Paradigm• Less Magic• Much Bigger Footprint• Microprocesses• Pattern Matching• Immutable Variables

Page 138: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

138

Great Matches

● C● Redis● MySQL● VoltDB● AWS S3● EC2● Ubuntu

Page 139: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

139

Productivity

Page 140: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

140

Productivity & Maintainability

“Erlang systems have4 – 10 x less code

than C / C++ / Java systems“

Ulf Wiger

Page 141: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

141

Productivity & Maintainability

Shorter programs:

● Faster to develop● Fewer errors● Easier to maintain

Erlang LOCs show the same error frequency as C / C++ / Java code.

Page 142: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

142

Scientific Proof

The Motorola Study of 2002 – 2006

• Motorala UK Labs• Heriot-Watt University• EPSRC UK Govt Project

http://www.slideshare.net/JanHenryNystrom/productivity-gains-in-erlang

Page 143: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

143

Scientific Proof

“High Level Techniques for Distributed Telecoms Software“

Looking at• Robustness• Configurability• Productivity• Maintainability

Page 144: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

144

Scientific Proof

“Erlang shows …

• 2x higher throughput• 3x better latency• 3 - 7x shorter code

… than the equivalent C++ implementation.”

Page 145: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

145

Scientific Proof

Reasons

● Lightweight process management● Code only the successful case – saves 27%● Automatic memory management – saves 11% ● High-level communications – saves 23% ● Telecom design pattern libraries (suit games)

Page 146: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

146

Scientific Proof

Overload & Hardware Failure

• C++ “fails catastrophically“

• Erlang – Never completely fails– Recovers automatically after load drops

Page 147: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

147

Challenges

Page 148: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

148

The Warts

• Untidy Standard Libs• Egregious String Handling• „Records Suck“• Cryptic Error Messages• Lack of Advanced Tutorials & Books• No-One Seems To Know All of OTP• Hard To Find Developers

Page 149: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

149

Strings

• Are* Lists. Or Binaries.• Slow*• Clumsy*• Error prone*• Cure announced for next release (R16)

Erlang was not built for text processing.

*according to Joe Armstrong these are myths. „Erlang has no strings. The only sane way to handle UTF-8 is lists of integers.“

Page 150: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

150

Records

• “Records Suck“• Verbose• Error Prone • Pure syntactic sugar over tupels.• Cure announced for next release (R16)

“Records were added as a hack.“

Page 151: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

151

Perceived reaction after asking about benchmarks on the Erlang mailing list.

Raw Number Crunching Speed

• Erlang is fast• Except at Shoot Outs• Benchmark your real problem• Use C NIFs to outsource crunching

Page 152: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

152

Hiring

• Can Be Difficult

• Roll Your Own Programmers– Good Programmers Are Interested– High Productivity Can Be Reached Fast– Excellent Workshops can be booked

Page 153: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

153

Getting Started!

Page 154: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

154

Learning Erlang

• Scour Post-Mortems• Download and Install from erlang.org• Fred’s site Learn You Some Erlang! • Joe’s book Programming Erlang• IRC #erlounge• Erlang Mailing List• Local Erlounge Meetings• Erlang Factories & User Conferences

Page 155: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

155

Expected Timeframe

Ballparks• Language – 2 Weeks• OTP – 3 Months• First Product – ½ Year• Thinking Erlang – 2 Years

Page 156: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

156

Business View

Makes Sense For • New Projects• Rewrites

Starting Out• Find a Senior Erlang Developer• Or Hire Erlang Solutions• You Will Train Your Own Developers

Page 157: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

157

Pitching It In-House

A Waste of TimeJoe Armstrong

Just tell your boss that Erlangis used for banking applications.

Mike Williams

• Most Often a Top-Down Thing • Demonstrate the Productivity:

prototype a demo solution to a real problem.• Cite Facebook, Zynga, Blizzard, Wooga

Page 158: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

158

ReferencesWebhttp://www.erlang.org/ http://learnyousomeerlang.com/http://www.erlang.org/static/getting_started_quickly.html

Listhttp://erlang.org/mailman/listinfo/erlang-questionshttp://groups.google.com/group/erlang-programming

Bookshttp://pragprog.com/book/jaerlang/programming-erlanghttp://shop.oreilly.com/product/9780596518189.do

Referenceshttp://erldocs.com/ http://www.erlang.org/doc/

Post Mortemshttp://www.facebook.com/note.php?note_id=14218138919 http://www.slideshare.net/wooga/erlang-the-big-switch-in-social-games

Page 159: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

159

Your Talk Evaluation

Please check your Email now and give your evaluation of this talk to the GDC.

Any questions, feedback now or later, please email me at hd*eonblast.com

Page 160: Why … Erlang?twvideo01.ubm-us.net/.../Presentations/Diedrich_Henning_WhyErlang.pdf · 3 Acknowledgements Thank You! Joe Armstrong Robert Virding Erlang Solutions Ulf Wiger Feuerland

160

Questions

• Email: hdiedrich*eonblast.com• Twitter: @hdiedrich• IRC: #erlounge• List: [email protected]