网站基础建设巴巴商友圈,开网站赚钱,中交路桥建设有限公司地址,深圳网站制作哪家便宜在做集群规划的时候#xff0c;到底需要给集群的每个节点多少个核心数#xff1f;这个问题一直困扰了我很久。最近一段时间做千亿数据#xff0c;PB存储量集群规划的时候#xff0c;突然想明白了这件事#xff0c;大致可以用一个公式来计算#xff01;我觉得这是一个非常…在做集群规划的时候到底需要给集群的每个节点多少个核心数这个问题一直困扰了我很久。最近一段时间做千亿数据PB存储量集群规划的时候突然想明白了这件事大致可以用一个公式来计算 我觉得这是一个非常重要的问题非常值得重视。其实所谓的集群规划无非就是根据数据量评估出需要的es节点数每个节点应该需要多少的CPU多少的磁盘多少内存。其中磁盘毋庸置疑每个节点不要挂过多的数据如果你想要保证性能每个节点不要超过4T数据。多了以后堆的压力会比较大根据实际的生产经验。至于内存内存基本上也就是每个节点31G不超过32G防止指针压缩失效而浪费堆内存。我测试的上限值是32.95G。至少留一半的内存给linux的 OS Cache。也就是每个机器的标配是64G内存最大4T硬盘有条件的数据控制到2.5T以内。磁盘有条件的可以选择SSD且做raid0。唯独cpu核心数难计算如果不熟悉es底层检索原理很难算出来每个节点需要多少个核心数。 下边我把核心数的计算推导成一个公式ES 集群规划 核心数计算公式 在es中查询是search线程池去处理请求的。请求到了底层会落到分片上分片是分配线程资源的最小单元所以我们应该先计算出来需要的查询线程数search thread pool 单次请求命中总分片数 / 节点数 * 每秒最大并发数 * 单个分片的响应时间换算成秒这里以最小集群规模3个节点来计算。假如单次请求命中的总分片数为15那么每个节点5个分片。每秒并发数为10单个分片请求时间为 0.2s200ms search thread pool size 15 / 3 * 10 * 0.2 10 也就是说想要满足以上的检索需求则需要的最少search thread pool size 为10。在知道了需要查询线程数然后就可以算CPU核心数了注意这里我说的CPU核心数是指逻辑核心数根据官网给出的公式search thread pool size 的计算公式为CPU核心数 *3 / 2 1For count/search/suggest operations. Thread pool type is fixed_auto_queue_size with a size of int((# of available_processors * 3) / 2) 1, and initial queue_size of 1000.1000是请求队列的大小所以我们需要的核心数为search thread pool size - 1* 2 / 3假如单次请求命中的总分片数为15那么每个节点5个分片。每秒并发数为10单个分片请求时间为 2s2000ms 那么想要满足以上的检索需求则需要最少的核心数为100。显然单台机器的CPU核心数不可能给那么多。即使CPU核心数给到磁盘的IO也会受限。理论上来说 单个节点CPU的核心数不超过32核心。在16核心 - 32核心之间。取决于磁盘的IO能力。另外也会受限于JVM的GC。所以实际情况可以结合理论推导公式结合压测情况来给核心数。做压测做压测一定要做压测。根据压测结果配合公式来确定最终需要的核心数