选择具有水平扩展的集群中节点的计算资源
Choosing the compute resources of the nodes in the cluster with horizontal scaling
水平扩展意味着我们通过向资源池中添加更多机器来进行扩展。尽管如此,集群中的每个节点将拥有多少功率(CPU,RAM)是可以选择的。
当使用 Kubernetes 管理集群时,设置 CPU 和 Pods 的内存限制非常容易。如何为集群节点(或 Kubernetes 中的 Pods)选择最佳 CPU 和内存大小?
例如,集群中有 3 个节点,每个节点有 1 个 vCPU 和 1GB RAM。要处理更多负载,有 2 个选项:
- 添加具有 1 个 vCPU 和 1GB RAM
的第 4 个节点
- 为 3 个节点中的每一个添加更多功率(例如 2 vCPU 和 2GB RAM)
一个直接的解决方案是计算每个选项的吞吐量和成本,然后选择更便宜的一个。是否有更高级的方法来选择具有水平可伸缩性的集群中节点的计算资源?
对于这个特定的示例,我会选择 2x vCPU 而不是另一个 1vCPU 节点,但这主要是因为我认为 运行ning OS 对于单个 vCPU 上的任何严重问题都是错误的。系统表现得体需要 2+ 个可用内核,否则很容易压垮一个 vCPU 并将节点送入尘埃。但是,没有理想的算法。这将取决于您的预算、工作负载的特征等。
根据经验,不要拘泥于太小的实例,因为您有一堆东西必须始终 运行 在它们上面,无论它们的大小如何,节点越多,开销就越大. 3x 4vCpu+16/32GB RAM 听起来对初学者来说是个不错的计划,但同样……这取决于您想要什么、需要什么并且负担得起。
答案与延迟和吞吐量等性能指标有关:
- 延迟是发送请求和接收响应之间的时间间隔。
- 吞吐量是请求处理速率(每秒请求数)。
延迟对吞吐量有影响:延迟越大 = 吞吐量越小。
如果业务事务由多个无法并行的服务顺序调用组成,则必须根据所需的延迟值选择计算资源(CPU 和内存)。在这种情况下,添加更多服务实例(水平扩展)不会对延迟产生任何积极影响。
添加更多服务实例会增加吞吐量,从而允许并行处理更多请求(如果没有瓶颈)。
换句话说,分配 CPU 和内存资源以使服务具有所需的响应时间,并添加更多服务实例(水平扩展)以并行处理更多请求。
水平扩展意味着我们通过向资源池中添加更多机器来进行扩展。尽管如此,集群中的每个节点将拥有多少功率(CPU,RAM)是可以选择的。
当使用 Kubernetes 管理集群时,设置 CPU 和 Pods 的内存限制非常容易。如何为集群节点(或 Kubernetes 中的 Pods)选择最佳 CPU 和内存大小?
例如,集群中有 3 个节点,每个节点有 1 个 vCPU 和 1GB RAM。要处理更多负载,有 2 个选项:
- 添加具有 1 个 vCPU 和 1GB RAM 的第 4 个节点
- 为 3 个节点中的每一个添加更多功率(例如 2 vCPU 和 2GB RAM)
一个直接的解决方案是计算每个选项的吞吐量和成本,然后选择更便宜的一个。是否有更高级的方法来选择具有水平可伸缩性的集群中节点的计算资源?
对于这个特定的示例,我会选择 2x vCPU 而不是另一个 1vCPU 节点,但这主要是因为我认为 运行ning OS 对于单个 vCPU 上的任何严重问题都是错误的。系统表现得体需要 2+ 个可用内核,否则很容易压垮一个 vCPU 并将节点送入尘埃。但是,没有理想的算法。这将取决于您的预算、工作负载的特征等。
根据经验,不要拘泥于太小的实例,因为您有一堆东西必须始终 运行 在它们上面,无论它们的大小如何,节点越多,开销就越大. 3x 4vCpu+16/32GB RAM 听起来对初学者来说是个不错的计划,但同样……这取决于您想要什么、需要什么并且负担得起。
答案与延迟和吞吐量等性能指标有关:
- 延迟是发送请求和接收响应之间的时间间隔。
- 吞吐量是请求处理速率(每秒请求数)。
延迟对吞吐量有影响:延迟越大 = 吞吐量越小。
如果业务事务由多个无法并行的服务顺序调用组成,则必须根据所需的延迟值选择计算资源(CPU 和内存)。在这种情况下,添加更多服务实例(水平扩展)不会对延迟产生任何积极影响。 添加更多服务实例会增加吞吐量,从而允许并行处理更多请求(如果没有瓶颈)。
换句话说,分配 CPU 和内存资源以使服务具有所需的响应时间,并添加更多服务实例(水平扩展)以并行处理更多请求。