[erlang-questions] [ANN] Iris v0.3.0 and Erlang binding v1.0.0

Péter Szilágyi <>
Mon Aug 11 15:13:41 CEST 2014


Hi all,

  For a few years now I've been researching and working on a decentralized
cloud messaging system called Iris. My goal with it was to bring the
simplicity of cloud computing to the application layer, with the motto that
if renting a batch of VMs can be done in one line of code, then assembling
them into a communicating distributed system should be doable with another
line. I'm proud to say, that Iris was voted as one of the most innovative
open source projects related to scalability and devops, being nominated as
a finalist for the dotScale prize <http://www.dotscale.eu/prize>.

  If I had to summarize the project in one sentence, it would be: "A
completely decentralized messaging solution for simplifying the design and
implementation of cloud services, featuring zero-configuration (i.e. start
it up and it will do its magic), semantic addressing (i.e. application use
textual names to address each other), clusters as units (i.e. automatic
load balancing between apps of the same name) and perfect secrecy (i.e. all
network traffic is encrypted)". And just to complete the above description,
it is fast and language agnostic ;)

  Today marked the release of version v0.3.0 of the Iris core, and with it
I'm very proud to release the first stable version of the Erlang API too,
v1.0.0! The API follows the OTP design patterns, and specifically that of
the gen_server, but takes it way beyond in capabilities :D Just as a
teaser, this is how you can attach a micro-service instance to Iris through
Erlang, which will then completely automatically integrate with other nodes
and services written it arbitrary languages, and be able to communicate
with them completely decentralized and completely secure!

-behaviour(iris_server).
-export([init/2, handle_broadcast/2, handle_request/3, handle_tunnel/2,
    handle_drop/2, terminate/2]).

% Implement all the methods defined by iris_server.
init(Conn, your_init_args) -> {ok, your_state}.
terminate(Reason, State)   -> ok.

handle_broadcast(Message, State)     -> {noreply, State}.
handle_request(Request, From, State) -> {reply, Request, State}.
handle_tunnel(Tunnel, State)         -> {noreply, State}.
handle_drop(Reason, State)           -> {stop, Reason, State}.

main() ->
    % Register a new service to the relay
    {ok, Server} = iris_server:start(55555, "cluster name", ?MODULE,
your_init_args),

    % Unregister the service
    ok = iris_server:stop(Server).

  As you can see above, you can have broadcasts (received by *all* members
of a particular micro-service cluster (the name specified during
registration above), requests (load balanced between *all* members of a
particular cluster), tunnels for ordered and throttled stream oriented
communication between two nodes, and pub/sub (API through a different
module). No networking code involved, period.

  Since seeing is believing, I invite anyone interested to look at the online
Erlang playground
<http://play.iris.karalabe.com/talks/binds/erlang.v1.slide>, which is a
short introductory presentation of Iris and its Erlang binding, walking
over each communication primitive with modifiable and executable code
segments. Should it wet your appetites, further infos can be found in
the Erlang
quick-start guide
<https://github.com/project-iris/iris-erl/blob/master/README.md>. Of
course, the most valuable source of information is the Iris website itself
<http://iris.karalabe.com/>, containing pre-built binaries and other
language bindings on the downloads section
<http://iris.karalabe.com/downloads>, recordings from live presentations on
the talks section <http://iris.karalabe.com/talks> (FOSDEM, dotScale), a
work-in-progress guide called The book of Iris
<http://iris.karalabe.com/book> and last but not least, some research papers
<http://iris.karalabe.com/papers> for the academically inclined. And if you
really want to dive deep, all source code is available on GitHub
<https://github.com/project-iris> (dev docs at edoc
<http://iris.karalabe.com/docs/iris-erl.v1/index.html>).

  Hope you like it, and if you have any questions or feedback, I'm more
than happy to answer/react :)

Cheers,
  Peter

PS: If you're interested enough, you are welcome into the Iris community at
the project-iris <https://groups.google.com/group/project-iris> mailing
list or @iriscmf <https://twitter.com/iriscmf> on Twitter.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140811/5fe468fe/attachment.html>


More information about the erlang-questions mailing list