如何最大化服务器性能?

时间:2009-01-11 10:51:52

标签: web-applications performance sysadmin

我一直在努力了解性能和可扩展性,并且想知道开发人员/系统管理员正在做些什么来为他们的系统做好准备。为了使答案标准化,如果您能够尽最大努力回应以下任何一项,将会有所帮助:

  1. 个人资料 - 关于Joomla的杂志刊物; JobIgniter + OpenId + AJAX上的Jobs板
    • 效果 - 每秒最高请求数每台服务器
    • 硬件 - 服务器,路由器,磁盘,LAN?
    • 软件 - Lighttpd,Memcache,Varnish,Nginx,Squid,Pound,LVS,eAccelerator等。
    • 服务 - Amazon S3,Akamai,Google计算等
    • 配置 - 静态散列,上游模块,n次请求后x分钟内的Memcache,禁用日志记录图像请求等。
    • 其他 - 还有别的吗? (例如,规范化表对于具有大量读取的站点不利)
  2. 修改:在关闭此问题之前请重新考虑as it is important给网络开发人员以寻找这些内容。程序员可以从他/她的代码中调整分号,但仍然输给编写memcached的编码器,或者通过Google App Engine将CDN组合在一起。

3 个答案:

答案 0 :(得分:3)

我们的系统:我不能告诉你太多,但它是一个大型SaaS应用程序,为许多付费客户提供服务。


我们所做的每一项表现/能力工作都是非常谨慎的 - 我们不能只是尝试看看它们是否有效。

最初会对当前的性能和容量进行一些分析,无论我们是否能够继续工作。

如果可能,我们会在非生产系统上重现性能问题,我们可以在其中分析代码并进行实验性更改。我们不能总是使用与生产完全相同的硬件(生产具有大量非常高规格的服务器; dev只有少量生产规格的专用性能测试盒)。

如果无法在非生产环境中对问题进行有意义的分析,我们会在生产中为我们的代码提供一些检测(经过仔细测试以确保检测不会影响系统本身)。该仪器将“关闭”并有选择地打开以收集足够的数据。

一旦我们对问题进行了准确的分析,我们就会研究可能的解决方案,并开发原型 - 可以对这些问题进行功能正确性测试。

如果有几个选项,我们通常选择风险最小的选项。

然后会遵循正常发布流程 - 大量测试,代码审查等。

如果相关,更改可能附带“恢复开关”,如果出现问题,可以快速关闭生产。

我们已经确定了许多潜在的性能改进,其中大部分在发生问题之前我们不会进一步发展(除非我们无论如何都要对该软件进行无关的重构)。

答案 1 :(得分:3)

没有针对性能优化的具体总体规划(例如首先从软件“xyz”开始)。

一般方法:

  1. 通过改进/投入时间确定(衡量!)您最可改进的实体
  2. 优化它
  3. 重复

答案 2 :(得分:2)

我没有时间用子弹回答你的问题。但是我可以推荐一种分离关注点的一般策略,而不是在没有立即需要的情况下将服务器资源耦合在一起。 mod_proxy(和任何等价物)是你的朋友。它可以很容易地将硬件抛到出现的性能问题上。当然,您不必从一开始就完美地考虑系统(因为很难预测真正的瓶颈会出现在哪里)。但是当你遇到问题时。记住你的朋友。