同时为很多用户提供更好的性能

时间:2011-02-11 11:21:45

标签: java sql-server-2005 hibernate jsf tomcat

我正在开发一个网站,希望这个网站可以同时被超过一百万人访问。它仍然只有70k用户,并且在上传文件或打开页面和内容时已经落后了..

我使用SQLServer,tomcat和apache http服务器。

我尝试使用另一个tomcat来管理对数据库的访问,但是我面临另一个问题,它必须共享另一个tomcat的相同空间来保存上传的文件。它会导致上传延迟..

如何才能让我的网站更快?

该网站采用JSF开发,具有丰富的表面和Java和Hibernate。

2 个答案:

答案 0 :(得分:1)

  1. 缩放很难。

  2. 对于某些操作,缩放是不可能的。即使是最伟大的(谷歌,Facebook,亚马逊)也不能自由选择他们的功能;所提供的通常是“什么会很酷”和“什么会扩展”之间的妥协。

  3. 在不对您的应用进行概要分析的情况下,“如何使其更快”的问题无法解决。

  4. 在不考虑前一点的情况下做出任何决定都是愚蠢的,而且可能会让你处于悲惨的境地。

  5. 识别瓶颈的传统方法是分别考虑:

    a)内存(系统是否交换?)

    b)cpu(cpus真的很忙,还是只是等待数据库?)

    c)IO(通常包括数据库和带宽)

  6. 根据您的问题所在,完全矛盾的事情会有所帮助。例如,如果你有足够的内存和低带宽,请切换JSF以保存服务器上的状态。这将使用更多内存,但会缩短请求。另一方面,如果bandwitdth不是问题而内存是,那么反过来:切换JSF以保持客户端上的状态。这将有助于节省内存(尽管在这种情况下问题更复杂:如果群集中的tomcats尝试共享会话数据,则在服务器上保存状态会成为IO问题)。

    你说问题出在上传文件上。为了帮助,我们需要知道:你在哪里保存它们?到DB?到文件系统?他们是短期还是长期?它们是如何处理的?上传文件的使用是否有任何模式(例如:“大部分时间都使用新文件”)?在这些问题得到解答后,可能还会出现更多问题。

    为了你自己:关闭这个问题。您将获得大量善意但又错误的答案,如“放弃JSF”,“集群一切”,“添加内存”,“迁移到GAE或Amazon EC”,“使用NoSQL数据库”,“异步执行所有操作” ,使用消息队列','用ajax做客户端上的所有事情','删除ajax,它会产生太多请求并杀死服务器'。除非您对配置文件,配置文件,配置文件,度量,度量,度量进行分析,否则所有这些都是毫无意义的。然后给出一个更好定义的问题。

答案 1 :(得分:0)

如果访问数据库,请考虑使用EJB + CMP。然后按照以下模型:

  • 群集您的应用程序服务器(例如GlassFish)以实现负载平衡
  • 将一个请求的所有服务调用保留在一个节点中(仅通过调用本地服务)