Erlang + EDTK + BDB: Disrupting the Web Margo Seltzer Architect
What kind  of talk is this? Evangelism FUD Fun
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
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
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
Disruptive Technology “ a technological innovation, product, or service that eventually overturns the existing dominant technology or status quo product in the market.” -- Wikipedia
Outline Interpreting the Title Disecting an Internet Service Erlang, it’s philosophy and runtime Putting it all together Q&A
An Internet Service Clients Load  Balancer .NET Java The Internet App Servers Database Servers
An Internet Service Clients Load  Balancer .NET Java CGI PHP LISP Perl The Internet Database Servers
An Internet Service Clients Load  Balancer BDB CGI Perl Application Code The Internet Servers
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
Outline Interpreting the Title Disecting an Internet Service Erlang, it’s philosophy and runtime Putting it all together Q&A
The Erlang Approach Don’t fight the problem Don’t fight the medium (the network) Don’t fight the medium (distributed software)
Don’t Fight the Problem 1:1 concurrency with the problem/solution domain Explicit lightweight stateful conversations (addressable processes) Arbitrarily rich messages
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)
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
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
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
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
Erlang Nuts and Bolts Hello World -module(hello). -export(hello_world/0). hello_world() -> io:format(“Hello world.~n”, []). Erlang (BEAM) emulator version 5.5.5 [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>
Spawning Processes Pid = spawn(module, function, args). For example: Erlang (BEAM) emulator version 5.5.5 [source] [async-threads:0] [kernel-poll:false] Eshell V5.5.5  (abort with ^G) 1> spawn(hello, hello_world, []). <0.32.0>Hello world. 2>
Message send and receive Send: Pid ! message. Receive: receive Pattern1 [when Guard1] -> Expression1; Pattern2 [when Guard2] -> Expression2; … end
Send/Receive Example -module(food). -export([dinner/0]). dinner() -> receive sunday -> io:format(&quot;Sunday is fish.~n&quot;, []), dinner(); monday -> io:format(&quot;Monday is chicken.~n&quot;, []), dinner(); tuesday -> io:format(&quot;Tuesday is beef.~n&quot;, []), dinner(); Other -> io:format(&quot;Time to go home.~n&quot;, []) end.
Send/Receive Execution Eshell V5.5.5  (abort with ^G) 1> Pid = spawn(food, dinner, []). <0.32.0> 2> Pid ! tuesday. tuesdayTuesday is beef. 3> Pid ! sunday. sundaySunday is fish. 4> Pid ! wednesday. wednesdayTime to go home. 5> Pid ! monday. monday 6>
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
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
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, []).
Outline Interpreting the Title Disecting an Internet Service Erlang, it’s philosophy and runtime Putting it all together Q&A
An Internet Service Clients Load  Balancer Servers The Internet
How does it Perform? From: http://www.sics.se/~joe/apachevsyaws.html
Acknowledgements Joe Armstrong (Erlang) Scott Lystig Fritchie (EDTK) Chris Newcombe (EDTK extensions for BDB)
A Q &
 

More Related Content

PDF
Intro to elixir and phoenix
PPTX
Repeating History...On Purpose...with Elixir
PPTX
The Actor Model - Towards Better Concurrency
PPT
ApacheCon NA 2011 report
PPTX
How to Write the Fastest JSON Parser/Writer in the World
PDF
Elixir intro
PDF
Rethinking the debugger
PDF
Process injection - Malware style
Intro to elixir and phoenix
Repeating History...On Purpose...with Elixir
The Actor Model - Towards Better Concurrency
ApacheCon NA 2011 report
How to Write the Fastest JSON Parser/Writer in the World
Elixir intro
Rethinking the debugger
Process injection - Malware style

What's hot (20)

PPTX
Steelcon 2014 - Process Injection with Python
PPTX
Building Your Own DSL with Xtext
PDF
Stackato v6
PDF
Perl-Critic
PDF
CNIT 126: 10: Kernel Debugging with WinDbg
PDF
Practical Malware Analysis Ch13
PDF
Phoenix for Rubyists
PDF
PDF
Microservices are ‘easy’ dependencies are hard
PDF
Reactive Web 101: WebFlux, WebClient, and Reactor Netty
PDF
Onion Architecture and the Blog
PDF
CNIT 126 7: Analyzing Malicious Windows Programs
ODP
rsyslog meets docker
PDF
Practical Malware Analysis: Ch 10: Kernel Debugging with WinDbg
PDF
Captain Hook: Pirating AVs to Bypass Exploit Mitigations
PDF
CNIT 126 12: Covert Malware Launching
PDF
Lock-free algorithms for Kotlin Coroutines
PDF
Reactive applications with Akka.Net - DDD East Anglia 2015
PPTX
Scripting robot
PPTX
What's the "right" PHP Framework?
Steelcon 2014 - Process Injection with Python
Building Your Own DSL with Xtext
Stackato v6
Perl-Critic
CNIT 126: 10: Kernel Debugging with WinDbg
Practical Malware Analysis Ch13
Phoenix for Rubyists
Microservices are ‘easy’ dependencies are hard
Reactive Web 101: WebFlux, WebClient, and Reactor Netty
Onion Architecture and the Blog
CNIT 126 7: Analyzing Malicious Windows Programs
rsyslog meets docker
Practical Malware Analysis: Ch 10: Kernel Debugging with WinDbg
Captain Hook: Pirating AVs to Bypass Exploit Mitigations
CNIT 126 12: Covert Malware Launching
Lock-free algorithms for Kotlin Coroutines
Reactive applications with Akka.Net - DDD East Anglia 2015
Scripting robot
What's the "right" PHP Framework?
Ad

Viewers also liked (9)

PDF
Sentencia TS Asturias EpC
PPT
Kynning 1.Stig 21.02
PPS
Escocia
PPT
香港六合彩让赚钱更容易
PPT
Kynning 1
PDF
PPT
Het Rijke Verleden Van Turkije Ppt[1]
PPT
Web 2.0 for Educators
PDF
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
Sentencia TS Asturias EpC
Kynning 1.Stig 21.02
Escocia
香港六合彩让赚钱更容易
Kynning 1
Het Rijke Verleden Van Turkije Ppt[1]
Web 2.0 for Educators
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
Ad

Similar to Disrupt (20)

PDF
Erlang
PDF
linux_internals_2.3 (1).pdf àaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
PPT
Purdue CS354 Operating Systems 2008
PDF
Elixir
PPTX
X page developer
PDF
DEF CON 23 - Saif el-sherei and etienne stalmans - fuzzing
PDF
Simon Peyton Jones: Managing parallelism
PDF
Peyton jones-2011-parallel haskell-the_future
PDF
Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...
PDF
Unmanaged Parallelization via P/Invoke
PDF
Software and the Concurrency Revolution : Notes
PPT
PPT
Os Worthington
PDF
Git Ready! Workflows
PDF
Keynote joearmstrong
PDF
Concurrent programming1
PDF
The Future of Computing is Distributed
ODP
Some wonderful Linux softwares for daily use
PDF
Elixir Into Production
ODP
Low level java programming
Erlang
linux_internals_2.3 (1).pdf àaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Purdue CS354 Operating Systems 2008
Elixir
X page developer
DEF CON 23 - Saif el-sherei and etienne stalmans - fuzzing
Simon Peyton Jones: Managing parallelism
Peyton jones-2011-parallel haskell-the_future
Sioux Hot-or-Not: Functional programming: unlocking the real power of multi-c...
Unmanaged Parallelization via P/Invoke
Software and the Concurrency Revolution : Notes
Os Worthington
Git Ready! Workflows
Keynote joearmstrong
Concurrent programming1
The Future of Computing is Distributed
Some wonderful Linux softwares for daily use
Elixir Into Production
Low level java programming

Recently uploaded (20)

PDF
Abstractive summarization using multilingual text-to-text transfer transforme...
PPTX
Benefits of Physical activity for teenagers.pptx
PDF
sbt 2.0: go big (Scala Days 2025 edition)
PPT
Geologic Time for studying geology for geologist
PDF
1 - Historical Antecedents, Social Consideration.pdf
PDF
STKI Israel Market Study 2025 version august
PDF
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
PDF
Consumable AI The What, Why & How for Small Teams.pdf
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PDF
The influence of sentiment analysis in enhancing early warning system model f...
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PPTX
The various Industrial Revolutions .pptx
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
Two-dimensional Klein-Gordon and Sine-Gordon numerical solutions based on dee...
DOCX
search engine optimization ppt fir known well about this
PDF
A proposed approach for plagiarism detection in Myanmar Unicode text
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PPTX
Chapter 5: Probability Theory and Statistics
PDF
Getting started with AI Agents and Multi-Agent Systems
Abstractive summarization using multilingual text-to-text transfer transforme...
Benefits of Physical activity for teenagers.pptx
sbt 2.0: go big (Scala Days 2025 edition)
Geologic Time for studying geology for geologist
1 - Historical Antecedents, Social Consideration.pdf
STKI Israel Market Study 2025 version august
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
Custom Battery Pack Design Considerations for Performance and Safety
Consumable AI The What, Why & How for Small Teams.pdf
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
The influence of sentiment analysis in enhancing early warning system model f...
Final SEM Unit 1 for mit wpu at pune .pptx
The various Industrial Revolutions .pptx
Hindi spoken digit analysis for native and non-native speakers
Two-dimensional Klein-Gordon and Sine-Gordon numerical solutions based on dee...
search engine optimization ppt fir known well about this
A proposed approach for plagiarism detection in Myanmar Unicode text
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
Chapter 5: Probability Theory and Statistics
Getting started with AI Agents and Multi-Agent Systems

Disrupt

  • 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 Load Balancer .NET Java The Internet App Servers Database Servers
  • 11. An Internet Service Clients Load Balancer .NET Java CGI PHP LISP Perl The Internet Database Servers
  • 12. An Internet Service Clients Load Balancer BDB CGI Perl Application Code The Internet Servers
  • 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 5.5.5 [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 5.5.5 [source] [async-threads:0] [kernel-poll:false] Eshell V5.5.5 (abort with ^G) 1> spawn(hello, hello_world, []). <0.32.0>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(&quot;Sunday is fish.~n&quot;, []), dinner(); monday -> io:format(&quot;Monday is chicken.~n&quot;, []), dinner(); tuesday -> io:format(&quot;Tuesday is beef.~n&quot;, []), dinner(); Other -> io:format(&quot;Time to go home.~n&quot;, []) end.
  • 26. Send/Receive Execution Eshell V5.5.5 (abort with ^G) 1> Pid = spawn(food, dinner, []). <0.32.0> 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 Load Balancer Servers The Internet
  • 32. How does it Perform? From: http://www.sics.se/~joe/apachevsyaws.html
  • 33. Acknowledgements Joe Armstrong (Erlang) Scott Lystig Fritchie (EDTK) Chris Newcombe (EDTK extensions for BDB)
  • 34. A Q &
  • 35.