Any action you take causes some reaction somewhere out there, be it now, or later; sometimes you know but other times you have no idea where that somewhere is or will be. Whatever you decide think strategically and long term.
It's highly admirable to care about the world, but sometimes it turns out the world will not care about you.
Listen to all the opinions/advice you can get, adjust your beliefs in the light of this new information, then make a decision you'll be most conformable with.
Performance and simplicity would be two factors. Plus I think nanomsg doesn't play well with HTTP. And I'm saying this because I remember ZeroMQ didn't play well with HTTP also. nanomsg is a rewrite of ZeroMQ, so I might be wrong here.
Breaking down an application into micro services allows me to keep a clearer picture of the entire application and how it should work. Not to mention the advantage of evolving the services individually without affecting the entire system.
While I was going over some of their goals I immediately started thinking about erlang.
* Isolation and Redundancy: Processes are isolated. If some component crases it won't affect the rest of the system.
* Design for high modularity, measurability, and restartability: You write erlang otp apps which you then combine (modularity). You can easily get a live shell to any erlang system so you can measure various parameters (measurability). Using erlang/otp libraries you implement supervisors
such that when a component of your system crashes you can just restart it without any interference with the rest of the system. (restartability)
I'm not even close to being proficient in erlang but weren't these some of the issues erlang was designed to solve in the first place?
It's highly admirable to care about the world, but sometimes it turns out the world will not care about you.
Listen to all the opinions/advice you can get, adjust your beliefs in the light of this new information, then make a decision you'll be most conformable with.