[erlang-questions] Microservices vs. Erlang processes

Mark Allen mallen@REDACTED
Mon Jul 7 18:05:10 CEST 2014

(trigger warning: top posting; Garret may want to stop here.)

The biggest proponent of "microservices" I've read/listened to a lot is
Adrian Cockcroft recently with Netflix, now with a VC firm.  Reading the
Martin Fowler article (lovely article, by the way, thanks for link) it
seems like they're talking about the same ideas.

If I understand the talks/writings correctly, the ideas are that you want
small services that handle a single resource per service, each service is
loosely coupled to the others, offer a strong quote contract unquote
through the API layer and are able to scale horizontally and vertically
without complexity.

So I took this to mean-

1. A web service which implies some kind of HTTP server semantics for IO
2. Managing some kind of resource where the resource state is mutated by
that one service.

So given that understanding, I think the abstraction for Erlang is more
akin to a single Erlang VM running multiple (possibly unrelated)
applications, rather than Erlang processes which may compose an
application and an application.

If I may soapbox for a moment, I think that while microservices are a
great way to design a system in some kind of greenfield environment, there
has been too little discussion by the proponents of microservices on how
to deal with the inherent complexities of distributed systems in that type
of approach.  At best they're mentioned in passing, and at worst,
hand-waved away.

If nothing else, a giant monolithic application helps to avoid those
problems to some extent. (Not that it's necessarily the *right* design for
a given problem, but doing the monkey-see-monkey-do rip'n'replace of a
monolith (1:4:9) with microservices is trading the devil you know for a
whole different set of concerns/problems.)



On 7/7/14 10:45 AM, "Lloyd R. Prentice" <lloyd@REDACTED> wrote:

>We're hearing much about "microservice architecture" in system design
>circles these days:
>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
>- What "itch" is being scratched by microservice design that can't be
>scratched by well designed Erlang?
>Sent from my iPad
>erlang-questions mailing list

More information about the erlang-questions mailing list