Presentation is loading. Please wait.

Presentation is loading. Please wait.

Erlang + EDTK + BDB: Disrupting the Web Margo Seltzer Architect.

Similar presentations


Presentation on theme: "Erlang + EDTK + BDB: Disrupting the Web Margo Seltzer Architect."— Presentation transcript:

1

2

3 Erlang + EDTK + BDB: Disrupting the Web Margo Seltzer Architect

4 What kind of talk is this? Evangelism FUD Fun

5 Erlang + EDTK + BDB: Huh? General purpose programming language Runtime system Developed by Ericsson Open source Key feature: designed for ease of developing highly- reliable, highly-concurrent systems Enables highly robust applications: The AXD 301 includes 2 million lines of Erlang Reliability: NINE 9’s

6 Erlang + EDTK + BDB: Huh? Erlang Driver Toolkit Declarative APIs to external library Automatic wrapper generation Tracks library resources and cleans up Enhanced for BDB support: Supports Erlang’s “crash early” error-handling model (supervisors) Meshes Erlang-style concurrency with BDB concurrency (private thread pools) Adds significant convenience layers for configration and replication Minimal overhead

7 Erlang + EDTK + BDB: Huh? Berkeley Database Database functionality … Transactions Recovery Replication … in a different package Library linked directly into an application Programmatic APIs Schemaless: key/data pairs

8 Disruptive Technology “a technological innovation, product, or service that eventually overturns the existing dominant technology or status quo product in the market.” -- Wikipedia

9 Outline Interpreting the Title Disecting an Internet Service Erlang, it’s philosophy and runtime Putting it all together Q&A

10 An Internet Service Clients The Internet Load Balancer App Servers Database Servers.NETJava

11 An Internet Service Clients The Internet Load Balancer Database Servers.NETJava CGI PHP LISP Perl

12 An Internet Service Clients The Internet Load Balancer Servers BDB CGI Perl Application Code

13 The Software Architecture In any case, your software is a mess Gazillion Active Ports Fraction of a gazillion threads A relatively small number of disks

14 Outline Interpreting the Title Disecting an Internet Service Erlang, it’s philosophy and runtime Putting it all together Q&A

15 The Erlang Approach Don’t fight the problem Don’t fight the medium (the network) Don’t fight the medium (distributed software)

16 Don’t Fight the Problem 1:1 concurrency with the problem/solution domain Explicit lightweight stateful conversations (addressable processes) Arbitrarily rich messages

17 Don’t Fight the the Network Asynchronous send (location-agnostic send and pray) Ordered inbox per process Blocking receive with timeout (message- selection via pattern-matching)

18 Don’t Fight Distributed Software No shared memory: no mutexes, no mutation True loose-coupling: processes are free to migrate Safe to kill any process any time Recovery-oriented computing (before it was fashionable) Let it crash Propagate exceptions Know how to recover

19 Erlang Tricks: Processes Belong to the language (runtime), not OS Very lightweight Immutable data Asynchronous message passing Upgrade application on live, running system Implication: No big deal if a process dies

20 Erlang Tricks: Links Links connect processes On process crash, all linked processes get message. Notified processes can clean up, takeover, do whatever is necessary. Easy to create supervisors No recovery: just crash, cleanup and restart

21 Erlang Tricks: Concurrency Use concurrency to structure the application “My first message is that concurrency is best regarded as a program structuring principle”  Tony Hoare, 2001 Concurrency-oriented programming Share nothing Pure message passing Let it crash

22 Erlang Nuts and Bolts Hello World -module(hello). -export(hello_world/0). hello_world() -> io:format(“Hello world.~n”, []). Erlang (BEAM) emulator version [source] [async-threads:0] [kernel- poll:false] Eshell V5.5.5 (abort with ^G) 1> c(hello). {ok,hello} 2> hello:hello_world(). Hello world. ok 3>

23 Spawning Processes Pid = spawn(module, function, args). For example: Erlang (BEAM) emulator version [source] [async- threads:0] [kernel-poll:false] Eshell V5.5.5 (abort with ^G) 1> spawn(hello, hello_world, []). Hello world. 2>

24 Message send and receive Send: Pid ! message. Receive: receive Pattern1 [when Guard1] -> Expression1; Pattern2 [when Guard2] -> Expression2; … end

25 Send/Receive Example -module(food). -export([dinner/0]). dinner() -> receive sunday -> io:format("Sunday is fish.~n", []), dinner(); monday -> io:format("Monday is chicken.~n", []), dinner(); tuesday -> io:format("Tuesday is beef.~n", []), dinner(); Other -> io:format("Time to go home.~n", []) end.

26 Send/Receive Execution Eshell V5.5.5 (abort with ^G) 1> Pid = spawn(food, dinner, []). 2> Pid ! tuesday. tuesdayTuesday is beef. 3> Pid ! sunday. sundaySunday is fish. 4> Pid ! wednesday. wednesdayTime to go home. 5> Pid ! monday. monday 6>

27 BDB in Erlang Erlang: Is Functional (not procedural) Communicates via messages Communicates asynchronously BDB: Is Procedural Communicates via shared memory Blocks on locks/IO/etc

28 EDTK fixes mismatch Erlang interfaces to outside world via ports. EDTK automatically generates code that wraps library API, making library look like Erlang process(es). Provides framework to: Clean up BDB resources after a crash Manage threadpools to deal with BDB blocking Manage administrative processes Manage replication groups

29 And the code looks like BDB DB = ?BDB:db_create(Port, []). ?BDB:db_open(Port, DB, void, “database”, “”, bdb_DB_BTREE, [bdb_DB_CREATE, 8#644). ?BDB:db_put(Port, DB, void “foo”, “foodata”, []). {Key, Data} = ?BDB:db_get(Port, DB, void, “foo”, >, []). ?BDB:db_close(Port, DB, []).

30 Outline Interpreting the Title Disecting an Internet Service Erlang, it’s philosophy and runtime Putting it all together Q&A

31 An Internet Service Clients The Internet Load Balancer Servers

32 How does it Perform? From:

33 Acknowledgements Joe Armstrong (Erlang) Scott Lystig Fritchie (EDTK) Chris Newcombe (EDTK extensions for BDB)

34 A Q &

35


Download ppt "Erlang + EDTK + BDB: Disrupting the Web Margo Seltzer Architect."

Similar presentations


Ads by Google