首页 > 应用开发 > > 应用程序可伸缩性如何进行高效扩展
当你构建一个出色的产品或应用程序时,它会吸引越来越多的用户,他们会期望一个完美无缺的完美应用程序随着需求的增长而处理越来越多的每分钟请求。如果我们没有为此做好准备,应用程序性能将开始降低,您将失去您的受众和业务。在本文中,我们将解释在构建可伸缩应用程序时应注意的原因。
什么是应用程序可伸缩性?
应用程序可伸缩性是应用程序及时增长的潜力,能够有效地处理每分钟(RPM)的越来越多的请求。这不仅仅是一个简单的调整,你可以打开/关闭; 这是一个长时间的过程,几乎触及堆栈中的每一个项目,包括系统的硬件和软件两个方面。
如果出现问题,您可以继续添加新的CPU或增加内存限制,但这样做只会增加吞吐量,而不是应用程序性能。当您发现应用程序开始出现效率问题时,这不是您应该坚持的方式。扩展应用程序并不是一件容易的事情,因此在开始考虑如何以及何时扩展应用程序之前,您应该非常了解应用程序。
应用程序扩展的问题
通常,当您的应用程序变得过大时,您会看到许多可伸缩性问题,但是扩展的应用程序容量更多地涉及整个系统体系结构。当您的应用程序快速发展时,使用The Rails Way构建项目当然不是最好的方法,但这并不意味着扩展Rails应用程序总是很痛苦。当然,Twitter从Rails迁移到Scala,但另一方面,Shopify在后端持续增长Rails大约十年,每分钟超过50,000个请求,响应时间为45ms。同样,许多框架都是高度专业化的,但选择框架取决于应用程序需求,框架流行度,成本,支持和其他因素等。
即使您没有Twitter或Shopify等性能或可伸缩性问题,以适当的方式规划和开发应用程序也是无价的。在扩展方面,您可能会面临许多不同的问题。您的问题的一些一般来源可能与以下内容有关:
有限的物理资源,如内存,CPU等,
错误的内存管理
效率低下的数据库引擎
复杂的数据库架构,索引错误
执行不佳的数据库查询
服务器配置错误
App服务器限制
整体意大利面条代码
效率低下的缓存
缺乏监控工具
外部依赖性太多
背景作业设计不当
更多,更多,更多。
无论所有的信念如何,Rails都是一个伟大的框架,拥有令人难以置信的巨大社区,以及数百万已经在线回答的问题。它有数百种优秀的开源工具,您可以立即构建到堆栈中,还有大量的分析和分析工具,可帮助您识别系统的瓶颈。
如何进行有效的扩展?
保持代码清洁
这似乎是显而易见的,但我们不能忽视在这里指出它。编写正确且高效的代码是应用程序可伸缩性的关键。当你的应用程序充满了意大利面条代码时,它就变成了泥泞的大球,并且很难维护和扩展它。
这是一种优秀的方法,专注于开发可伸缩应用程序的最佳实践。它与语言无关,因此实现这12个因素中的每一个都取决于开发人员。如果您希望您的应用程序随着时间的推移灵活扩展,您真的应该遵循这些规则。
照顾好你的数据库
要让系统顺利发展,您必须处理数据库。选择合适的数据库引擎并设计可靠的架构,您可以有效地处理每秒增加的事务。
防止查询问题
每个单独的Web应用程序都执行大量的数据库查询,即使您已经设计了与正确索引的关系,在市场上最好的引擎上运行,记得有效地向数据库询问信息,避免N + 1查询,不必要的热切加载等等,
选择正确的主机
我们必须记住,可扩展性不仅仅与您的代码有关。拥有适当的服务器基础架构和配置至关重要。只需选择合适的工具和提供程序,即可节省大量时间。例如,Amazon EC2提供自动缩放功能,Docker提供docker-compose缩放等。
跟踪缓存
当您启动项目时,我们不需要专用的机器来处理您的缓存,但随着时间的推移,实施,跟踪和修改缓存需求绝对是一种很好的做法。
准备负载平衡
如果我们不使用像AWS这样的“准备就绪”基础架构,请记住,有一天您必须准备好从单服务器架构切换到具有负载平衡和反向代理的多服务器架构。
解除后端
如果我们有机会将一些代码移到前端,那就去做吧。随着越来越多的事情将在客户端计算,您的后端将变得不那么过载。
测试和监控
即使我们的代码库干净且完全可维护,我们也需要一些工具来监控它并尽快识别问题。
优化
识别问题是一回事,但我们必须利用我们拥有的工具并优化我们的代码和配置,以最大限度地减少应用程序的瓶颈。
单独的代码
它也是代码清洁度的一部分 - 尽量不要在一个地方混合太多的系统部分。单独的前端和后端层,从主系统分离后台作业,明智地使用设计模式。
定期更新
保持所有的东西是最新的,以避免由于系统过时的部分(例如旧的红宝石版本)阻塞时刻。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4662/viewspace-3147431/ ,如需转载,请注明出处,否则将追究法律责任。