I'm building a reverse proxy from scratch. The requirements are:
1) Super scalable. It must handle a lot of concurrent requests (also streaming, 1000 request/second would be a good performance in my case)
2) Super fast (non blocking). 3) No C/C++ or Erlang 4) Easy to mantain - even if it was, Assembly is not an option :)After some research, most of people suggests using node.js
or Scala
- what do you think is the best solution for this kind of job? Which technologies wo开发者_开发技巧uld you use to build this kind of proxy?
Thanks
Personally I'd try out this guy first.
Just to expound a bit, people who said "try node.js or Scala" are slightly misguided in that Scala—like Java—is just a programming language, whereas node.js is most of a platform. Apart from its general advantages, the main things Scala brings to the table for this kind of project are:
A juicy bit of syntax that makes it easier to write actor systems as libraries, namely PartialFunction "literals":
trait NeedsAPF { def pf: PartialFunction[Any,Unit] } object PFHaver extends NeedsAPF { def pf = { case i: Int => println("I got an int and it was " + i) } }
When you're ready for it, a continuations plugin, which lets you write code that looks synchronous, but can be asynchronous under the covers.
I'd take a look at: https://github.com/nodejitsu/node-http-proxy as it satisfies all of your requirements. I'm not sure why there's a need to build it from scratch, but I suppose if you decide to build it in node, you can certainly at least take inspiration from this.
Scala should be good enough, but you'll need to use NIO a lot, which means you'll probably be in close contact with Java's NIO library. I don't know if any of the libraries available in Scala will help you in this, but, then again, it's your job to look it up, not mine. :-)
精彩评论