2012-03-13 86 views
9

我的生活中第一次(希望不是最后一次)我将开发一个应用程序,它必须处理大量用户(大约5000个)并管理大量数据。我开发了一个管理大量数据的应用程序(大约100GB的数据,而不是很多标准),但用户数量很低(约50)。Java Web应用程序5000〜用户

这里是我想我会使用的工具/框架列表:

  • Vaadin UI框架
  • 休眠
  • PostgreSQL的
  • 的Apache Tomcat
  • 的Memcached(会话处理)

该应用程序将主要b在公司网络中运行。它可能运行在一组服务器上或者不运行,取决于公司想花多少钱来使其生活更轻松。

那么,您如何看待我的选择,我应该注意什么?

干杯

+3

您是否在谈论总共5000个用户,5000个并发用户或5000个并发请求? – beny23 2012-03-13 12:31:29

+0

总共有5000个用户,他们都在同一个时区,所以我想他们中的大多数人会同时使用这个应用程序 – 2012-03-13 12:32:29

回答

9

答案与所有​​性能/缩放相关的问题一样,具体取决于:

您的选择框架中没有任何东西会导致我认为它无法处理大量的用户。但是,如果不知道你想要做什么或者你的预算是多少,就不可能选择一项技术。

为了确保您的应用程序扩展/表演,我会考虑以下几点:

  • 保持每个会话低的内存占用。例如,当您有50个时,缓存HttpSession中的内容可能会有效,但当您拥有5000个时段时,则不是一个好主意。
  • 尽你所能在数据库中完成尽可能多的工作来减少正在移动的数据量(例如,当查看包含大量行的表时,请确保您已完成数据库中的分页工作(而不是比获得10,000行背到Tomcat,然后采摘前10 ...)
  • 尝试最大限度地减少必须保持在HttpSession内的状态,这使得它更容易集群。

也许最重要推荐:

  • 使用load testi ng工具来模拟您的峰值负载并超越并测试。 JMeter是我用于性能/负载测试的工具。

当负载测试,确保:

  • 你实际使用的5000个用户(使5000个HttpSession s的创建),并使用大量的数据(以避免总是击中高速缓存)。

编辑:

我不认为5000级的用户并不多,你可能会发现(性能明智),你只需要一台服务器(取决于服务器的大小,并将结果的负载测试,当然,您也可以考虑集群解决方案进行故障转移......)来处理负载(也就是说,不是每个5000用户都会同时按下一个按钮,您会发现负载正在增加在早上(即每个人都登录)

0

我推荐的Glassfish应用服务器,因为Apache Tomcat上可以起到简单的内容。 Glassfish完全实现了Java EE规范。

+3

我不认为这样的广义陈述是有效的,不知道需求。事实上,如果Tomcat足够了,保持最简单的解决方案可能是一件好事,因为它不包含完整的JEE堆栈。 – beny23 2012-03-13 12:33:39

+0

Glassfish带有内置的静态内容服务器(Grizzly)。因此,为了有一个诚实的比较,我们必须将Glassfish与整个绑定,即Apache HTTP Server和它背后的Tomcat进行比较。 – Rekin 2012-03-13 12:47:52

5

您可能想要考虑在Tomcat服务器前面的Apache HTTP服务器Apache将提供:压缩,静态缓存,负载平衡和SSL。

+2

我建议一些更轻量级的东西,比如Nginx,他已经拥有了Tomcat的力量。 – 2012-03-13 14:36:38

1

既然你让人们称重,我不会拒绝我的意见。一般的ORM,特别是Hibernate,都是反模式。我知道,我在过去的9年里一直在使用Hibernate的商店工作。知道我现在知道的,我永远不会再使用它。

我强烈推荐这个博客帖子,因为它把它更简洁比我:

ORM is an anti-pattern

但是,原谅我,如果我引述该博客关于奥姆斯和反模式的位:

我之所以称之为ORM反模式,是因为它在两个 标准反模式的作者用来从单纯的坏习惯区分反模式 匹配,具体为:

  • 它最初似乎是有利的,但长期来看具有比好的多 不好的后果
  • 替代的解决方案存在被证明的,可重复

你其他的技术选择似乎精细。就我个人而言,我更倾向于Jetty而不是Tomcat。有一个原因,谷歌嵌入到他们的很多项目(认为GWT和PlayN);这是一个年轻的代码库,我认为现在Eclipse已经接受了它的更积极的发展。只是我的愚见。

[更新]另一个链接,很长的阅读,但是当做出架构决策时,阅读是好的。

Object/Relational Mapping: The Vietnam of Computer Science

+0

当你使用它时,Hibernate不好,完全不了解它!请记住**代码的可维护性和变更管理**也是现代人关注的主要问题,也就是为什么没有人愿意回到** JDBC **。 – ManuPK 2012-03-13 13:14:10

3

任何理由不使用Spring它已经真正成为企业Java应用程序中的事实标准。

Spring提供了一个非常强大和灵活的技术集合,用于改善数百万开发人员使用的企业Java应用程序开发。

弹簧是轻质的,并且可以通过创建层的干净的分离留下作为中间层,连接vaadin和休眠,在那里。春季交易管理也优于冬眠交易管理。 我会建议你去找它,直到你有一个强有力的理由阻止你。

0

根据你的规范和未来的目标,我可能会离开正常版本的tomcat,去Apache TomEE或我个人偏好的jBoss。据我了解,EJB在普通的tomcat版本中得不到很好的支持,而当你想创建几个服务,一些集群单例服务和其他东西时,这是一种很棒的东西。但是这当然只是我个人的先决条件,如果你的规范不允许更高级的EE服务器,那么你应该坚持使用光滑的tomcat。