Why is ejabberd built on erlang?

36
Why is ejabberd built on erlang? Erlang Factory 2011 (because the name «jabberd» was already taken) Eric Cestari

Transcript of Why is ejabberd built on erlang?

Page 1: Why is ejabberd built on erlang?

Why is ejabberd built on erlang?

Erlang Factory 2011

(because the name «jabberd» was already taken)

Eric Cestari

Page 2: Why is ejabberd built on erlang?

Show of hands

http://funny.funnyoldplanet.com/funny/show-off-hands/

Page 3: Why is ejabberd built on erlang?

OneTeam for desktop

Hosted.IM

Tsung

ejabberd

TextOne

OneTeam for iPhone

TeamLeader

And ...

Page 4: Why is ejabberd built on erlang?

OpenPushWeb to Device Push

http://openpush.im/

Page 5: Why is ejabberd built on erlang?

1. A personal journey

2. Erlang in ejabberd, the good parts

3. The other parts

Page 6: Why is ejabberd built on erlang?

ejabberd

XMPP server

Popular

Scalable

Compliant

Page 7: Why is ejabberd built on erlang?

A bit of backgroundabout the guy standing in front of you

Page 8: Why is ejabberd built on erlang?

OpenFire ?I know my Java. I can do that.

Page 9: Why is ejabberd built on erlang?

ejabberd?

Page 10: Why is ejabberd built on erlang?

ejabberd!Clustering included.

LOC count way down.erlang not that weird and rather cool FANTASTIC!

Page 11: Why is ejabberd built on erlang?

A: My previous company

B:

Page 12: Why is ejabberd built on erlang?

The fantastic capabilities ejabberd has, just by being written with

erlang/OTP

Page 13: Why is ejabberd built on erlang?

Cheap lightweight processes

Page 14: Why is ejabberd built on erlang?

Under strict supervision

Page 15: Why is ejabberd built on erlang?

mnesiaejabberd runs right out of the box.

Page 16: Why is ejabberd built on erlang?

ejabberd_router.erl

Page 17: Why is ejabberd built on erlang?

Clusteringmnesia + message passing across servers

Page 18: Why is ejabberd built on erlang?

Pattern matchingBecause ejabberd is a big router.

Page 19: Why is ejabberd built on erlang?

mod_muc_room.erl

Page 20: Why is ejabberd built on erlang?

ejabberd.cfgPOET: plain old erlang terms

Page 21: Why is ejabberd built on erlang?

ejabberdctl debugconnect to node, debug/redbug, done.

Page 22: Why is ejabberd built on erlang?

The APIgen_mod, jlib module, register_route() and hooks

Page 23: Why is ejabberd built on erlang?

gen_modejabberd module behaviourstart(Host, Opts)stop(Host)

Page 24: Why is ejabberd built on erlang?

jlib.erlStanza manipulation

Page 25: Why is ejabberd built on erlang?

Register routeejabberd_router:register_route(SubDomain, Pid)

Page 26: Why is ejabberd built on erlang?

IQ Registration

no_queueone_queue{queues, N}parallel

IQDisc {

Page 27: Why is ejabberd built on erlang?

HooksCustomize or replace ejabberd behaviourHooks can be located on another node

User onlineUser offlineRoster changedMessage filtering

https://support.process-one.net/doc/display/MESSENGER/Events+and+hooks

Page 28: Why is ejabberd built on erlang?

Code is readableAnd the API is very small.

Page 29: Why is ejabberd built on erlang?

The not-so-good parts of ejabberd

Radical honesty

Page 30: Why is ejabberd built on erlang?

It’s not an OTP appSo it can’t be managed as one.

Page 31: Why is ejabberd built on erlang?

Too many lists!Memory usage not as low as it could.

exmpp and ejabberd 3 use binaries and atoms.

Page 32: Why is ejabberd built on erlang?

<message to='[email protected]' type='groupchat'> <body>test</body></message> XML

[{xmlel,undefined,[],message, [{xmlattr,undefined,to,<<"[email protected]">>}, {xmlattr,undefined,type,<<"groupchat">>}], [{xmlel,undefined,[],body,[], [{xmlcdata,<<"test">>}]}]}]

exmpp

{xmlelement,"message",[{"to","[email protected]"},{"type","groupchat"}],

[{xmlcdata,<<"\n">>}, {xmlcdata,<<" ">>}, {xmlelement,"body",[],[{xmlcdata,<<"test">>}]}, {xmlcdata,<<"\n">>}]} jlib

Page 33: Why is ejabberd built on erlang?

Monolithic

Page 34: Why is ejabberd built on erlang?

Archeology is funSome parts of the codebase are really old.

Autoconf in a rebar world.

Page 35: Why is ejabberd built on erlang?

Aleksey Shchepin says:«Without Erlang/OTP, I would not start ejabberd.»

http://www.ejabberd.im/interview-aleksey

Page 36: Why is ejabberd built on erlang?

Questions ?

• http://twitter.com/cstar

• {mailto,xmpp}: [email protected]