【问题标题】:Designing a service for scale. Number of servers needed为规模设计服务。需要的服务器数量
【发布时间】:2017-03-15 03:24:01
【问题描述】:

假设我需要设计一个 Web 服务。为简单起见,假设我使用LAMP (Linux-Apache-MySQL-PHP)。

我知道我每秒将准确地处理N 用户请求。请求基本上是对数据库的简单CRUD操作,没有文件上传或复杂的计算。

假设每个请求都执行M ms 并占用我服务器上K Mb 的内存,并拥有G Gb 的RAM。

我需要多少台这样的服务器?只是N * K / G吗?

M 的合理值是200msK 的合理值是多少?

我们需要在这个问题中考虑 CPU 功率吗?

还有其他注意事项吗?

【问题讨论】:

    标签: apache performance architecture lamp system-design


    【解决方案1】:

    您所做的是一个很好的信封近似值,但绝不应该将您的思维练习用作扩展服务的权威指南。

    这是因为没有服务会表现出您所描述的那种类型的持续行为(如果发生不可预测的外围 i/o、垃圾收集、外部因素、用户输入等)

    正确的方法是执行规模和负载测试。编写服务后,开始对服务进行负载测试并注意服务的性能特征。如果你做对了,你应该达到配置最大化的点:CPU、网络吞吐量、内存或磁盘 I/O。如果两者都没有达到极限并且您达到了限制,那么它就是您的上游依赖项之一(您的数据库等)

    一旦您达到峰值,它会告诉您在峰值时每秒可以处理多少个请求。

    您还会注意到,在大多数情况下,峰值性能是不可持续的:您的设置可能会在短时间内爆发,每秒处理比持续负载多得多的请求。

    获得单个服务器的数字后,您可以通过两种方式开始变化:

    1. 使用不同的硬件配置进行测试(如果内存受限,则添加更多 RAM,如果 CPU 受限,则添加更好的 CPU,等等)

    2. 测试多台服务器;开始添加服务器并查看您的服务如何横向扩展

    理想情况下,您的服务应该随着您添加服务器而线性扩展,但您可能会发现性能曲线不是线性的。

    获取您的数字,调整您的设计。冲洗。重复。

    没有替代品,神奇的公式。

    【讨论】:

    • 信封近似值正是我想要实现的 :) 我知道我永远不会看到像“每秒恰好 N 个用户请求”这样的东西。我只是想找到主要变量及其近似值。
    • @user1256821 然后为 K 插入任何合理的值,并为其他事物使用一些基线值。 Apache 在内存管理方面非常糟糕——根据我的经验,每个请求最多可以消耗 30-50MB。说40MB。使用 4GB 的可用 RAM,您将能够处理大约 100 个并发请求。在 200 毫秒的延迟下,这给您每秒大约 500 个来自一台服务器的请求。这是你要找的吗?
    • 是的,我想检查一下我是否走对了路。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多