building a high scale java app, what stack would you use?

if you needed to build a highly scalable web application using java, what framework would you use and why?

I'm just reading thinking-in-java, head first servlets and manning's spring framework boo, but really I want to focus on highly scalable architectures etc.

would you use tomcat, hibernate, ehcache?

(just assume you have to design for scale, not looking for the 'worry about it when you get traffic type responses)


The answer depends on what we mean by "scalable". A lot depends on your application, not on the framework you choose to implement it with.

No matter what framework you choose, the fact is that the hardware you deploy it on will have an upper limit on the number of simultaneous requests it'll be able to handle. If you want to handle more traffic, you'll have to throw more hardware at it and include load balancing, etc.

The part that's pertinent in that case has to do with shared state. If you have a lot of shared state, you'll have to make sure that it's thread safe, "sticky" when it needs to be, replicated throughout a cluster, etc. All that has to do with the app server you deploy it to and the way you design your app, not the framework.

Tomcat's not a "framework", it's a servlet/JSP engine. It's got clustering capabilities, but so do most other Java EE app servers. You can use Tomcat if you've already chosen Spring, because it implies that you don't have EJBs. Jetty, Resin, WebLogic, JBOSS, Glassfish - any of them will do.

Spring is a good choice if you already know it well. I think following the Spring idiom will make it more likely that your app is layered and architecturally sound, but that's not the deciding factor when it comes to scalability.

Hibernate will make your development life easier, but the scalability of your database depends a great deal on the schema, indexes, etc. Hibernate isn't a guarantee.

"Scalable" is one of those catch-all terms (like "lightweight") that is easy to toss off but encompasses many considerations. I'm not sure that a simple choice of framework will solve the issue once and for all.


I would check out Apache Mina. From the home page:

Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily. It provides an abstract · event-driven · asynchronous API over various transports such as TCP/IP and UDP/IP via Java NIO.

It has an HTTP engine AsyncWeb built on top of it.

A less radical suggestion (!) is Jetty - a servlet container geared towards performance and a small footprint.


The two keywords I would mainly focus on are Asynchronous and Stateless . Or at least "as stateless as possible: Of course you need state but maybe, instead of going for a full fledged RDBMS, have a look at document centered datastores.

Have a look at AKKA concerning async and CouchDB or MongoDB as datastores...

链接地址: http://www.djcxy.com/p/7662.html

上一篇: 如何使用Java逐行读取大型文本文件?

下一篇: 构建一个高规模的Java应用程序,你会使用什么栈?