我一直在努力了解性能和可扩展性,并且想知道开发人员/系统管理员正在做些什么来为他们的系统做好准备。为了使答案标准化,如果您能够尽最大努力回应以下任何一项,将会有所帮助:
修改:在关闭此问题之前请重新考虑as it is important给网络开发人员以寻找这些内容。程序员可以从他/她的代码中调整分号,但仍然输给编写memcached的编码器,或者通过Google App Engine将CDN组合在一起。
答案 0 :(得分:3)
我们的系统:我不能告诉你太多,但它是一个大型SaaS应用程序,为许多付费客户提供服务。
我们所做的每一项表现/能力工作都是非常谨慎的 - 我们不能只是尝试看看它们是否有效。
最初会对当前的性能和容量进行一些分析,无论我们是否能够继续工作。
如果可能,我们会在非生产系统上重现性能问题,我们可以在其中分析代码并进行实验性更改。我们不能总是使用与生产完全相同的硬件(生产具有大量非常高规格的服务器; dev只有少量生产规格的专用性能测试盒)。
如果无法在非生产环境中对问题进行有意义的分析,我们会在生产中为我们的代码提供一些检测(经过仔细测试以确保检测不会影响系统本身)。该仪器将“关闭”并有选择地打开以收集足够的数据。
一旦我们对问题进行了准确的分析,我们就会研究可能的解决方案,并开发原型 - 可以对这些问题进行功能正确性测试。
如果有几个选项,我们通常选择风险最小的选项。
然后会遵循正常发布流程 - 大量测试,代码审查等。
如果相关,更改可能附带“恢复开关”,如果出现问题,可以快速关闭生产。
我们已经确定了许多潜在的性能改进,其中大部分在发生问题之前我们不会进一步发展(除非我们无论如何都要对该软件进行无关的重构)。
答案 1 :(得分:3)
没有针对性能优化的具体总体规划(例如首先从软件“xyz”开始)。
一般方法:
答案 2 :(得分:2)
我没有时间用子弹回答你的问题。但是我可以推荐一种分离关注点的一般策略,而不是在没有立即需要的情况下将服务器资源耦合在一起。 mod_proxy(和任何等价物)是你的朋友。它可以很容易地将硬件抛到出现的性能问题上。当然,您不必从一开始就完美地考虑系统(因为很难预测真正的瓶颈会出现在哪里)。但是当你遇到问题时。记住你的朋友。