5 ms·
Elixir is usually the best bet for high throughput with low memory requirements. But I think you should read some presentations about microservices before you
by switch33 12y ago
Elixir is usually the best bet for high throughput with low memory requirements.
But I think you should read some presentations about microservices before you decide to code a giant new architecture. There are other solutions already developed. A guide on the mindset of microservices that is useful is well written in these two articles: http://www.pwc.com/us/en/technology-forecast/2014/cloud-computing/features/microservices.jhtml http://www.pwc.com/us/en/technology-forecast/2014/cloud-comp... and http://www.tigerteam.dk/2014/micro-services-its-not-only-the-size-that-matters-its-also-how-you-use-them-part-1/ http://www.tigerteam.dk/2014/micro-services-its-not-only-the...
Xing used elixir/erlang built an rabbit mq, riak, and redis based service that seemed like a good build for scaling a large system with minimal memory and latency. You can watch that video here: https://www.youtube.com/watch?v=38yKu5HR-tM https://www.youtube.com/watch?v=38yKu5HR-tM
For scaling microservices you generally want to use http and queueing services for distributing the messages. There are many options in this retrospect. Redis and RabbitMQ are some of the better ones. Something newly being developed but could be of interest is syncfree: https://github.com/SyncFree https://github.com/SyncFree . The reason syncfree is a good fit for a distirbuted service is it will not get bulky from updates based on timed services. For the rabbitmq version of riak: https://github.com/jbrisbin/riak-exchange https://github.com/jbrisbin/riak-exchange
An alternatives to riak is hibaridb, but may take a bit more work to get functional with other stuff: https://github.com/hibari/ https://github.com/hibari/
With http APIs you can just curl into your APIs. Or load balance and proxy them with HAProxy, Nginx, Varnish etc. Amazon has route53 for managing it by dns. There is also zonify: https://github.com/airbnb/zonify https://github.com/airbnb/zonify
Microservices are also usually built on some form of actor framework. Akka is what Gilt used. You can watch a video on Gilt's microservices: http://tech.gilt.com/post/65070094551/gilts-kevin-scaldeferri-on-enabling-micro-service http://tech.gilt.com/post/65070094551/gilts-kevin-scaldeferr... .
Serialization is just as important in microservices for scaling up small microservices to handle larger loads. For example, when Gilt wanted to scale they used Jackson json serialization. Jackson (www.github.com/fastxml/) is fairly scalable because it is as fast as protocolbuff and has support for hierarchies. They also used the sbt runtime packaging for automatically re-creating and re-compiling their components. They built components using ClusterMate (https://github.com/cowtowncoder/ClusterMate https://github.com/cowtowncoder/ClusterMate) I think.
You might be interested in a startup that hook's github gists for microservices at hook.io .
As for updates they often use pubsub architectures. I think Gilt used one as well. You can infer a lot of what they did from their released github code at www.github.com/gilt/ .
Other resources to read about microservices: https://news.ycombinator.com/item?id=7994540 https://news.ycombinator.com/item?id=7994540
Disclaimer: I do a lot of reading, not a lot of building. Though sometimes a lot of reading means reading research papers, and whitepapers from companies to get an idea of what works or not.
- themartorana 12y agoAwesome links - thank you!
- switch33 12y agoNo problem. I also post stuff so I can refer to stuff later as well. : ) If you have any other questions feel free to ask. In addition thought I'd mention theres a few good resources as well listed from this github account based on java actors/microservices: https://github.com/puniverse https://github.com/puniverse