【问题标题】:scalability and performance in java web applicationsJava Web 应用程序的可扩展性和性能
【发布时间】:2011-07-09 21:55:05
【问题描述】:

假设您要构建一个具有高可扩展性的 Web 应用程序(超过 10,000 个同时用户)。您如何保证良好和稳定的性能?哪些设计模式值得推荐?最常见的错误是什么?

是否有框架强迫自己编写可扩展的代码?您是否会考虑将 php 作为前端而将 Java 作为后端技术?或者让我们说 JSF 也是合理的,而这一切都与您的架构有关?在这种情况下,使用 Grails 进行开发有多好?

希望这个帖子不要太主观,但我想收集一些你的经验:-)

【问题讨论】:

  • 您确实想在 Google 上搜索 "C10K" 和 Java。引人入胜的读物。现在当然有几种语言/操作系统可以在不太强大的硬件上处理 C100K(比您要求的连接数多 10 倍);)
  • 您的意思是同时有 10,000 个用户,例如:1) 每秒 10,000+ HTTP 次点击或 2) 10,000 个同时登录的用户。对于#1,见 C10K;对于 #2,对于任何常用框架来说,这可能都不是问题,假设您还没有尝试在不到几分钟的时间内登录所有这些用户。
  • 我在想第二点:-)
  • 您可能想要实现一个线程池或连接池系统,这样您就可以配置每秒的最大线程数/连接数(基于 CPU 和内存容量)。这是为了保持延迟,并确保在有大量请求进入时服务器不会崩溃。

标签: java performance scalability


【解决方案1】:

如果您想构建一个高度可扩展的应用程序,那么它应该是无状态的,并尽可能使用无共享架构。如果您在节点之间不共享任何内容并且节点没有状态,那么同步是最小的。有几个很好的 Web 框架适合您的需求(Java 的 Play Framework 和 Lift、Python 的 Django、Ruby 的 Ruby on Rails)。

至于 JSF 和相关技术,我认为在你的情况下使用它们是不明智的。一个好的旧请求响应更好。

【讨论】:

    【解决方案2】:

    如果您希望您的应用程序能够很好地扩展并表现良好,那么您需要一个分布式缓存。分布式缓存可以极大地提高应用程序的性能,为此您可以使用任何第三方分布式缓存,例如 NCache。

    【讨论】:

      【解决方案3】:

      有这么多同时用户(我承认我自己从未遇到过这种情况),我认为最重要的是能够在多个 Web 服务器之间实现负载平衡。

      如果您想要故障转移(这可能是必须具备的),这意味着您必须非常小心状态:您拥有的状态越多,您需要的内存就越多,处理之间的故障转移就越困难服务器:要么您需要将会话状态保存在所有服务器共有的位置,要么您需要跨服务器复制状态。

      所以,我会选择一种不需要服务器上太多状态的架构。恕我直言,基于动作的框架比基于组件的框架更适合这种架构,除非状态是在客户端处理的,并带有丰富的 JavaScript 组件。

      【讨论】:

        猜你喜欢
        • 2014-09-13
        • 2010-09-30
        • 2017-07-24
        • 2011-02-10
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 2012-07-30
        • 2013-12-09
        相关资源
        最近更新 更多