I'm in a startup and we're looking for the right language to build our micro services. Our Android/iOs mobile apps and our website are accessing our database using their own respective PHP backends. We're working on building a set of services which'll serve as a common backend for all these. Our team has 15 odd developers ranging from newbies to people with 7 years of experience. Look at the linked google spreadsheet where I've jotted down certain options that I could. What's your suggestion?<p>https://docs.google.com/spreadsheets/d/1vfP9lF5Xeeov6_aRriDW2IyNZMcUKqQGxgqu5sn0Rks/edit#gid=0
Elixir (or plain Erlang) by far. <a href="http://blog.plataformatec.com.br/2015/06/elixir-in-times-of-microservices/" rel="nofollow">http://blog.plataformatec.com.br/2015/06/elixir-in-times-of-...</a><p><i>Edit</i><p>A few more reasons:<p>- Elixir/Phoenix outperforms quite everything for some usecases <a href="https://twitter.com/julianobs/status/614416512825323520" rel="nofollow">https://twitter.com/julianobs/status/614416512825323520</a><p>- Elixir Code is well suited for longer maintenance modes <a href="http://blog.plague-dev.de/posts/Maintainable-Code-in-Elixir" rel="nofollow">http://blog.plague-dev.de/posts/Maintainable-Code-in-Elixir</a><p>- Elixir unions the advantages of monolithic apps and microservices and is <i>very</i> easy to scale <a href="http://blog.erlware.org/monolith-vs-microservices-where-to-start/" rel="nofollow">http://blog.erlware.org/monolith-vs-microservices-where-to-s...</a>
IMHO: Scala by far<p>- You can use pretty much any JVM library<p>- You can execute Scala applications in a JVM which is a pretty common platform for other tools. Think CI, deployment on servers, etc.<p>- Akka Cluster out of the box. On other systems you have to build your custom communication pipelines for messaging between your multiple instances of the services
Every single thing in your spreadsheet is impossible to objectively measure (I'd argue your Java row is laughably incorrect for instance).<p>From a business perspective picking a language just isn't that important, it will <i>NOT</i> be the thing that makes you (un)successful.<p>So I'd go the other way, what language do the most people want to work on and has the least "I'll quit if we pick that" factor? Just use that.
One of the big advantages of "micro-services" is that for each individual service, you can pick the best language suited for that service. If you're going to pick a single language (and I agree with kasey_junk on which to pick), then just make a single service, in one language, and split it when you need the isolation or differences in scaling each piece.