如何最大化服务器性能?

5

我一直在努力理解性能和可扩展性,并想知道开发人员/系统管理员是如何优化他们的系统的。为了标准化答案,如果您能够尝试回答以下任何一个问题,将会有所帮助:

  1. Profile - Joomla杂志出版物;CodeIgniter + OpenId + AJAX招聘板块
    • 性能 - 每秒最大请求数每台服务器
    • 硬件 - 服务器、路由器、磁盘、局域网?
    • 软件 - Lighttpd、Memcache、Varnish、Nginx、Squid、Pound、LVS、eAccelerator等。
    • 服务 - Amazon S3、Akamai、Google compute等。
    • 配置 - 静态哈希、上游模块、n个请求后x分钟的Memcache、禁用图像请求日志记录等。
    • 其他 - 其他任何事情?(例如,规范化表对于具有大量读取的站点不利)

编辑:在关闭此问题之前,请重新考虑这些 问题 重要性,因为对于Web开发人员来说,寻找这些东西非常重要。程序员可以调整代码中的分号,但仍然可能输给一个写了memcached或通过Google App Engine组合CDN的糟糕的编码人员。


这是一篇论文,而不是一个问题。 - cletus
我觉得很好 - 我对这个话题非常感兴趣。 - Ross
3个回答

3
我们的系统:我不能告诉你太多,但它是一个大型的SaaS应用程序,为许多付费客户提供服务。
每个性能/容量方面的工作都要非常小心地进行 - 我们不能随便尝试看看是否有效。
首先需要分析当前性能和容量是否可继续工作。
如果可能的话,我们会在非生产系统上重现性能问题,以便我们可以对代码进行分析并进行实验性更改。我们不能总是使用与生产相同的硬件(生产有大量高规格的服务器;开发只有几个专门用于性能测试的生产规格的测试盒)。
如果无法在非生产环境中有意义地分析问题,我们将在生产中的代码上添加一些仪器(在经过仔细测试确保仪器不会影响系统本身后)。这些仪器将被“关闭”,并有选择地打开以收集足够的数据。
一旦我们准确地分析了问题,我们将考虑可能的解决方案,并可能开发原型 - 这些原型可以进行功能正确性测试。
如果有几个选项,我们通常会选择最不冒险的选项。
然后按照正常的发布流程进行 - 进行大量测试、代码审查等。
如果相关,则可能使用“还原开关”在生产中快速关闭更改,以防出现问题。
我们已经确定了许多潜在的性能改进措施,其中大多数在出现问题之前不会进一步开发(除非我们正在进行与该软件部分无关的重构)。

3

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

通用方法:

  1. 通过改进/投入时间来确定(测量!)您最需要改善的实体
  2. 进行优化
  3. 重复

2

我没有时间逐条回答你的问题。但是我可以推荐一个通用的策略,即在没有立即需要时分离关注点并不将服务器资源耦合。mod_proxy(以及任何等效物)是你的朋友。它使得很容易解决性能问题。当然,你不必从一开始就完美地设计系统(因为很难预测真正的瓶颈会出现在哪里)。但是当你遇到问题时,请记住你的朋友。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接