[erlang-questions] Microservices vs. Erlang processes
Miles Fidelman
mfidelman@REDACTED
Mon Jul 7 18:24:29 CEST 2014
Lloyd R. Prentice wrote:
> Hello,
>
> We're hearing much about "microservice architecture" in system design circles these days:
>
> http://martinfowler.com/articles/microservices.html
>
> Can anyone explain to me how this design practice differs from the Erlang practice of factoring a system into concurrent processes?
>
> I think I understand that they have different interfaces and that Erlang processes can be easily monitored and supervised but, beyond that...
>
> - Is this a case of another term for a functionally equivalent concept?
> - Is an Erlang process typically coarser or finer grained than a typical microservice?
> - What "itch" is being scratched by microservice design that can't be scratched by well designed Erlang?
>
>
Well... a few knee-jerk, opinionated comments - take them for what
they're worth:
- first off, it depends on how one defines "microservice architecture"
- the notion of building software and systems from re-usable components
is not new - it generally doesn't work well, though things like CPAN are
a notable exception
- the notion of services as components is not new - again, the devil is
in the details:
--- can you say objects-oriented?
--- E2EE and JavaBeans seems to have traction
--- SOAs and web services seem to generate a lot of papers on "SOA
governance" than real systems - IMHO because W3C web services are very
complicated and high-overhead
--- RESTful interfaces and mashups are another approach - again, with
some traction, particularly for building things on top of Google and
Amazon services
--- message oriented middleware (e.g., Mule) is yet another approach
--- overall, the questions always come down to: what are the services,
and how does when orchestrate/choreograph them
What differentiates microservices seems to be the notion of putting each
service on its own server - be it hardware, a VM, or a container (can
you say "Docker?"). The folks pushing the idea seem to be driven by
rapid deployment and management considerations - and seem to come out of
the DevOps and the cloud provisioning communities - i.e., folks who
focus on tooling and platforms.
(IMHO) The notion of services and composition of services is not a bad
design pattern, particularly with clean interfaces; which to me, means -
protocol oriented (messages or RESTful) rather than programmatic APIs.
But... the microservice implementation strikes me as basically
wrong-headed. The notion of a VM or container (i.e., a full o/s)
carries a LOT of baggage and overhead, if all one is doing is running a
single service on it. Running a micro-service on a heavyweight platform
seems fundamentally broken. Granted, something like LXC offers an
interim step for "containerizing" existing code bases (e.g., postfix in
one container, mysql in another, apache in another) - but for new code,
a much more lightweight platform seems in order - something like a very
stripped down microkernal.
To me, a serious "microservice platform" would look like Erlang on bare
metal - with "microservices" implemented as Erlang processes (a
gen-server seems like an awfully good start for a "microservice").
(Parenthetically - whatever happened to the Erlang on Bare Metal and
Erlang on Xen projects?).
Miles Fidelman
--
In theory, there is no difference between theory and practice.
In practice, there is. .... Yogi Berra
More information about the erlang-questions
mailing list