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

Why is ejabberd built on erlang?

  • Upload
    others

  • View
    5

  • Download
    1

Embed Size (px)

Citation preview

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]