Erlang: Bult for concurrent, distributed systems

14
Erlang July 27, 2011 Ken Pratt http://kenpratt.net / Built for concurrent, distributed systems Wednesday, July 27, 2011

description

Quick overview of Erlang presented to the Vancouver Graph Database meetup on July 27, 2011.

Transcript of Erlang: Bult for concurrent, distributed systems

Page 1: Erlang: Bult for concurrent, distributed systems

Erlang

July 27, 2011

Ken Pratt

http://kenpratt.net/

Built for concurrent, distributed systems

Wednesday, July 27, 2011

Page 2: Erlang: Bult for concurrent, distributed systems

The philosophy

"Erlang was designed for writingconcurrent programs that "run forever""

- Joe Armstrong

Wednesday, July 27, 2011

Page 3: Erlang: Bult for concurrent, distributed systems

The philosophy

Simple language

Ultra-lightweight concurrency

No shared state

Local & remote communication via messaging

Wednesday, July 27, 2011

Page 4: Erlang: Bult for concurrent, distributed systems

The language

Functional

Pattern matching

No variables! (well, they don’t vary, anyway)

Compiled to bytecode, runs on VM

Wednesday, July 27, 2011

Page 5: Erlang: Bult for concurrent, distributed systems

The VM

Processes

Pre-emptive scheduler

Memory manager

Mesh networking

Wednesday, July 27, 2011

Page 6: Erlang: Bult for concurrent, distributed systems

Erlang == distributed OS?

Erlang is not so much a programming language as it is a distributed Operating System.

It’s like an ant colony with thousands of ants performing all sorts of different tasks.

Erlang is to threads what garbage collection is to manual memory management -- it brings concurrent programming into the 21st century.

Wednesday, July 27, 2011

Page 7: Erlang: Bult for concurrent, distributed systems

Local architecture

= light-weight process with a built-in mailbox

Wednesday, July 27, 2011

Page 8: Erlang: Bult for concurrent, distributed systems

Distributed architecture

= light-weight process with a built-in mailbox

Wednesday, July 27, 2011

Page 9: Erlang: Bult for concurrent, distributed systems

Interesting architectures

Having thousands of lightweight “threads” really opens up the architecture options.

The main example application on the “Erlang and OTP in Action” book is a cache using one process per cache entry!

Wednesday, July 27, 2011

Page 10: Erlang: Bult for concurrent, distributed systems

Standard library

Common patterns do all the concurrency heavy lifting for you (gen_server, rpc)

Supervision trees

Hot code deployment

Wednesday, July 27, 2011

Page 11: Erlang: Bult for concurrent, distributed systems

In production

Chat backend SimpleDB Orchestration ofRuby services

Routing mesh,logging system

Wednesday, July 27, 2011

Page 12: Erlang: Bult for concurrent, distributed systems

Erlang + Neo4j

Erlang has graphs: http://www.erlang.org/doc/man/digraph.html

BUT, it’s no Graph DB

Wednesday, July 27, 2011

Page 13: Erlang: Bult for concurrent, distributed systems

Erlang + Neo4j

Nerlo: http://github.com/nerlo/nerlo (Jinterface-based)

Cali: http://github.com/dmitriid/cali (Jinterface-based)

Both look pretty dead-in-the-water (no commits on either project in ~1 yr)

BUT, Jinterface works well, so does Mule ESB. So in the worst case you could write your Neo4j adapters in the JVM and bridge to Erlang with a biz-logic-level API.

Wednesday, July 27, 2011

Page 14: Erlang: Bult for concurrent, distributed systems

Resources

Wednesday, July 27, 2011