目前我正在开发基于Web的应用程序。我想知道设计人员在设计可扩展的基于Web的应用程序时应该注意哪些关键因素?
答案 0 :(得分:5)
这是一个相当模糊和广泛的问题,你可以写一些书。你走多远了?在某些时候,SQL JOIN的性能会崩溃,您必须实现一些分片/分区策略。这是你的意思吗?
一般原则是:
答案 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和广告)。
这是“共享”的限制:我们必须只分享“可接受的”解决方案,而不是有效的解决方案。
干杯,
皮尔。