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

时间:2009-08-16 16:47:01

标签: java scalability web-applications

目前我正在开发基于Web的应用程序。我想知道设计人员在设计可扩展的基于Web的应用程序时应该注意哪些关键因素?

6 个答案:

答案 0 :(得分:5)

这是一个相当模糊和广泛的问题,你可以写一些书。你走多远了?在某些时候,SQL JOIN的性能会崩溃,您必须实现一些分片/分区策略。这是你的意思吗?

一般原则是:

  • 缓存并版本化所有静态内容(图像,CSS,Javascript);
  • 将此类内容放在另一个域上以阻止不必要的Cookie流量;
  • GZip / deflate everything;
  • 仅执行必需的Javascript;
  • 永远不要使用Javascript在服务器端可以做什么(例如使用CSS的样式表行,而不是使用花哨的jQuery奇/偶技巧,这可能是实时杀手);
  • 将外部HTTP请求保持在最低限度。这意味着很少有CSS,Javascript和图像文件。这可能意味着实现某种形式的CSS spriting和/或组合CSS或JS文件;
  • 必要时使用服务器端缓存,但只有在发现问题后才能使用。记忆是一种昂贵但通常有效的权衡,以获得更高的性能;
  • 测试并调整所有数据库查询;
  • 尽量减少重定向。

答案 1 :(得分:2)

好好阅读highscalability.com应该会给你一些想法。我强烈推荐亚马逊的文章。

答案 2 :(得分:1)

每个应用程序都不同。您必须分析您的应用程序,以了解您应该将优化工作集中在哪里。某些Web应用程序可能需要数据库访问优化,而其他Web应用程序则具有导致瓶颈的复杂业务逻辑。

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

答案 3 :(得分:1)

我从其他答案中得到的结论是,可扩展性和性能之间存在普遍的混淆。高性能意味着响应迅速。高可扩展性意味着无论有多少人同时使用该网站,您都会得到响应。这有很大的不同。

事实上,为了获得良好的可扩展性,您实际上必须牺牲一点性能。可伸缩性的一般模式是分布式计算。将功能分解到不同的集群服务器层(Web,业务规则,数据库)是可扩展性的常用方法。额外的往返行程会减慢页面加载速度。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

有时,特定答案比通用提示更有帮助。

如果你想扩展,唯一要定位的是SPEED(在硬件和软件中)和RESOURCES(在硬件中)。

硬件,后者价格昂贵(更多服务器,负载平衡器等)。

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

例如,nginx比Apache快得多。

其他解决方案比nginx更快(对于静态和动态内容)但我没有在StackOverflow上进行审查而无法透露它们(尽管这是一个免费的解决方案,但它被评为SPAM和广告)。

这是“共享”的限制:我们必须只分享“可接受的”解决方案,而不是有效的解决方案。

干杯,

皮尔。