【发布时间】:2010-11-20 01:29:21
【问题描述】:
目前我正在开发基于 Web 的应用程序。我想知道设计师在设计可扩展的基于 Web 的应用程序时应该注意哪些关键因素?
【问题讨论】:
标签: java scalability web-applications
目前我正在开发基于 Web 的应用程序。我想知道设计师在设计可扩展的基于 Web 的应用程序时应该注意哪些关键因素?
【问题讨论】:
标签: java scalability web-applications
每个应用程序都是不同的。您必须分析您的应用程序,以查看您应该将优化工作集中在哪里。一些 Web 应用程序可能需要数据库访问优化,而另一些则具有导致瓶颈的复杂业务逻辑。
在未进行分析之前,请勿尝试优化应用程序的任意部分。您最终可能不得不支持复杂的优化代码,而这实际上并不能让您的应用程序更快捷。
【讨论】:
好好阅读highscalability.com 应该会给你一些想法。我强烈推荐亚马逊文章。
【讨论】:
这是一个相当模糊和广泛的问题,你可以写书。你能走多远?在某些时候,SQL JOIN 的性能会崩溃,您必须实施一些分片/分区策略。你说的是这个级别吗?
一般原则是:
【讨论】:
class="odd" 属性的页面,即使使用 gzip 和所有属性也是如此。
没有。只需使用适当的设计技术(关注点分离等)对应用程序进行编码,然后在应用程序完成或即将完成时,进行性能测试。然后你会发现真正的瓶颈——它们不会是你一开始可能猜到的。这就是您从一开始就进行适当设计的地方 - 它可以轻松进行更改以解决瓶颈。
【讨论】:
有时,一个具体的答案比一般的提示更有帮助。
如果您想扩展,唯一的目标是速度(硬件和软件)和资源(硬件)。
硬件,后者很昂贵(更多的服务器、负载平衡器等)。
因此,通过仔细选择您的初始开发框架,您将节省大量时间和资源 - 多达几个数量级。
例如,nginx 比 Apache 快(很多)。
其他解决方案比 nginx 更快(对于静态和动态内容),但我无法在不被 StackOverflow 审查的情况下披露它们(尽管这是一个免费的解决方案,但它被评为垃圾邮件和广告)。
这就是“分享”的局限:我们必须只分享“可接受”的解决方案,而不是有效的解决方案。
干杯,
皮埃尔。
【讨论】:
我从这里的其他答案中了解到,可扩展性和性能之间普遍存在混淆。高性能意味着响应速度快。高可扩展性意味着无论有多少其他人同时使用该站点,您都能得到响应。有很大的不同。
事实上,您实际上必须牺牲一点性能才能获得良好的可扩展性。可扩展性的一般模式是分布式计算。将功能分解到不同的集群服务器层(Web、业务规则、数据库)是实现可扩展性的常用方法。额外的往返会稍微减慢页面加载速度。
每个人都希望专注于高可扩展性,但也不要忘记,对于向自行托管应用程序的客户出售许可证的软件供应商而言,缩小规模与扩大规模同样重要。一个可以为 10 个用户在单个服务器上运行但也可以配置为在 10 个服务器 Web 集群、3 个服务器中间层和 10,000 个用户的 4 个服务器数据库集群上运行的应用程序将是一个为可扩展性而设计的系统。
【讨论】: