why is ejabberd built on erlang?
TRANSCRIPT
![Page 1: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/1.jpg)
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?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/2.jpg)
Show of hands
http://funny.funnyoldplanet.com/funny/show-off-hands/
![Page 3: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/3.jpg)
OneTeam for desktop
Hosted.IM
Tsung
ejabberd
TextOne
OneTeam for iPhone
TeamLeader
And ...
![Page 4: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/4.jpg)
OpenPushWeb to Device Push
http://openpush.im/
![Page 5: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/5.jpg)
1. A personal journey
2. Erlang in ejabberd, the good parts
3. The other parts
![Page 6: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/6.jpg)
ejabberd
XMPP server
Popular
Scalable
Compliant
![Page 7: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/7.jpg)
A bit of backgroundabout the guy standing in front of you
![Page 8: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/8.jpg)
OpenFire ?I know my Java. I can do that.
![Page 9: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/9.jpg)
ejabberd?
![Page 10: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/10.jpg)
ejabberd!Clustering included.
LOC count way down.erlang not that weird and rather cool FANTASTIC!
![Page 11: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/11.jpg)
A: My previous company
B:
![Page 12: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/12.jpg)
The fantastic capabilities ejabberd has, just by being written with
erlang/OTP
![Page 13: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/13.jpg)
Cheap lightweight processes
![Page 14: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/14.jpg)
Under strict supervision
![Page 15: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/15.jpg)
mnesiaejabberd runs right out of the box.
![Page 16: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/16.jpg)
ejabberd_router.erl
![Page 17: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/17.jpg)
Clusteringmnesia + message passing across servers
![Page 18: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/18.jpg)
Pattern matchingBecause ejabberd is a big router.
![Page 19: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/19.jpg)
mod_muc_room.erl
![Page 20: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/20.jpg)
ejabberd.cfgPOET: plain old erlang terms
![Page 21: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/21.jpg)
ejabberdctl debugconnect to node, debug/redbug, done.
![Page 22: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/22.jpg)
The APIgen_mod, jlib module, register_route() and hooks
![Page 23: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/23.jpg)
gen_modejabberd module behaviourstart(Host, Opts)stop(Host)
![Page 24: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/24.jpg)
jlib.erlStanza manipulation
![Page 25: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/25.jpg)
Register routeejabberd_router:register_route(SubDomain, Pid)
![Page 26: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/26.jpg)
IQ Registration
no_queueone_queue{queues, N}parallel
IQDisc {
![Page 27: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/27.jpg)
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?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/28.jpg)
Code is readableAnd the API is very small.
![Page 29: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/29.jpg)
The not-so-good parts of ejabberd
Radical honesty
![Page 30: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/30.jpg)
It’s not an OTP appSo it can’t be managed as one.
![Page 31: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/31.jpg)
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?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/32.jpg)
<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?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/33.jpg)
Monolithic
![Page 34: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/34.jpg)
Archeology is funSome parts of the codebase are really old.
Autoconf in a rebar world.
![Page 35: Why is ejabberd built on erlang?](https://reader035.vdocuments.net/reader035/viewer/2022071602/613d5148736caf36b75be5bb/html5/thumbnails/35.jpg)
Aleksey Shchepin says:«Without Erlang/OTP, I would not start ejabberd.»
http://www.ejabberd.im/interview-aleksey