Java 设计基于web的可扩展应用程序的关键因素

Java 设计基于web的可扩展应用程序的关键因素,java,scalability,web-applications,Java,Scalability,Web Applications,目前我正在开发基于web的应用程序。我想知道设计师在设计可伸缩的基于web的应用程序时应该注意哪些关键因素?每个应用程序都是不同的。您必须分析您的应用程序,以确定您应该将优化工作集中在哪里。一些web应用程序可能需要数据库访问优化,而另一些web应用程序具有复杂的业务逻辑,从而导致瓶颈 在没有首先进行分析的情况下,不要尝试优化应用程序的随机任意部分。您可能最终不得不支持复杂的优化代码,而这些代码实际上并不能使您的应用程序更加快速。仔细阅读这些代码应该会给您一些想法。我强烈推荐亚马逊的文章。这是一

目前我正在开发基于web的应用程序。我想知道设计师在设计可伸缩的基于web的应用程序时应该注意哪些关键因素?

每个应用程序都是不同的。您必须分析您的应用程序,以确定您应该将优化工作集中在哪里。一些web应用程序可能需要数据库访问优化,而另一些web应用程序具有复杂的业务逻辑,从而导致瓶颈


在没有首先进行分析的情况下,不要尝试优化应用程序的随机任意部分。您可能最终不得不支持复杂的优化代码,而这些代码实际上并不能使您的应用程序更加快速。

仔细阅读这些代码应该会给您一些想法。我强烈推荐亚马逊的文章。

这是一个相当模糊和宽泛的问题,你可以写一些书。你要走多远?在某个时刻,SQL连接的性能会崩溃,您必须实现一些切分/分区策略。这就是你的意思吗

一般原则是:

  • 缓存和版本所有静态内容(图像、CSS、Javascript)
  • 将这些内容放到另一个域上,以阻止不必要的cookie流量
  • GZip/将所有内容放气
  • 只执行所需的Javascript
  • 永远不要使用Javascript做你在服务器端可以做的事情(例如使用CSS样式表行,而不是使用奇特的jQuery奇偶技巧,这可能是一个实时杀手)
  • 尽量减少外部HTTP请求。这意味着很少有CSS、Javascript和图像文件。这可能意味着实现某种形式的CSS spring和/或组合CSS或JS文件
  • 必要时使用服务器端缓存,但仅在发现问题后使用。为了获得更高的性能,内存是一个昂贵但通常有效的折衷方案
  • 测试和优化所有数据库查询
  • 最小化重定向

    • 无。只需使用适当的设计技术(分离关注点等)编写应用程序,然后在应用程序完成或即将完成时,进行性能测试。然后你会发现真正的瓶颈——它们不是你一开始可能猜到的。这就是你从一开始就进行正确设计的地方——它使你可以轻松地进行更改以修复瓶颈。

      有时候,特定的答案比一般的提示更有用

      如果你想扩展,唯一的目标就是速度(硬件和软件)和资源(硬件)

      硬件,后者是昂贵的(更多的服务器、负载平衡器等)

      因此,通过仔细选择初始开发框架,您将节省大量的时间和资源,最多可以节省几个数量级

      例如,nginx比Apache快(很多)

      其他解决方案比nginx(静态和动态内容)更快,但我无法在没有StackOverflow审查的情况下披露它们(尽管这是一个免费的解决方案,但它被评为垃圾邮件和广告)

      这就是“共享”的局限性:我们必须只共享“可接受”的解决方案,而不是高效的解决方案

      干杯


      Pierre。

      我从这里的其他答案中感觉到,在可伸缩性和性能之间存在着普遍的混淆。高性能意味着响应速度快。高可扩展性意味着,无论有多少其他用户同时使用该站点,您都能得到响应。这有很大的区别

      实际上,为了获得良好的可扩展性,您实际上必须牺牲一点性能。可伸缩性的一般模式是分布式计算。将功能分解到单独的集群服务器层(web、业务规则、数据库)是实现可伸缩性的常用方法。额外的往返将稍微降低页面加载速度


      每个人都希望关注高可扩展性,但也不要忘记,对于向自行托管应用程序的客户销售许可证的软件供应商来说,缩小规模与扩大规模同样重要。一个应用程序可以在一台服务器上运行10个用户,但也可以配置为在一个10个服务器的web群集、一个3个服务器的中间层和一个4个服务器的数据库群集上运行10000个用户,这将是一个为可伸缩性而精心设计的系统。

      但是,在需要之前,我不会实际实施这些策略中的任何一个。在设计时考虑到它们,但根据需要实施优化。+1。但是,您能解释一下“使用奇特的jQuery奇偶技巧……可以成为实时杀手”是什么意思吗?可以说,这会使客户端的页面呈现速度变慢,但这会对web应用程序的可伸缩性产生怎样的负面影响?@ChssPly76 web应用程序是否能够按照我们可以看到的某个指标进行伸缩并不重要。重要的是对最终用户的缩放感知。@Rex M-虽然这是真的,但与手头的主题无关。除非您的页面有很多表,每个表都有很多行,否则jQuery修饰这些表的时间可以忽略不计。如果确实有那么多的表/行,那么生成/下载/呈现包含所有附加属性的页面很可能需要更长的时间,即使是gzip和所有属性。@cletus很好地推荐了一年后的“经验教训”,对吗?;)+1@RexM:我同意你的看法。但是,我只是想知道,在设计时,为了提高可伸缩性,我应该注意哪些关键因素?