一、测试环境配置
1.1 硬件环境
plaintext
基础节点配置:
组件规格说明备注
CPU 2×AMD EPYC 734316核主频3.2GHz
内存128GB DDR4-32008通道
存储2TBNVMe SSD 顺序读3.5GB/s
网络25GbpsMellanox万兆网卡
高性能节点配置:
组件规格说明备注
CPU 2×AMD EPYC 776364核主频3.5GHz
内存512GB DDR4-32008通道
存储8TBNVMe SSD RAID 顺序读7GB/s
网络100GbpsMellanox网卡
1.2 软件环境
plaintext
测试软件版本:
软件版本特点
Elasticsearch8.11.1高性能、成熟稳定
OpenSearch2.11.0 AWS支持、兼容ES
Solr9.3.0Apache原生、轻量
Meilisearch1.5.0新秀、易用性强
操作系统:Ubuntu22.04 LTS
JDK版本:OpenJDK17.0.9
内核版本:5.15.0
二、索引性能测试
2.1 批量索引性能
python
# 索引性能测试脚本
def index_benchmark(engine_config):
"""
测试批量索引性能
"""
results ={
'throughput':[],
'latency':[],
'resource_usage':[]
}
# 准备测试数据
test_data = generate_test_documents(
doc_count=1000000,
doc_size=1024# 1KB per doc
)
# 批量大小测试
batch_sizes =[500,1000,5000,10000]
for batch_size in batch_sizes:
metrics = test_bulk_indexing(
engine_config,
test_data,
batch_size
)
results['throughput'].append(metrics['docs_per_sec'])
results['latency'].append(metrics['avg_latency'])
results['resource_usage'].append(metrics['resources'])
return analyze_results(results)
索引性能测试结果:
plaintext
单节点索引性能(文档/秒):
批量大小 ES OpenSearchSolrMeilisearch
50015,00014,50013,00018,000
100025,00024,00022,00028,000
500045,00043,00038,00048,000
1000055,00052,00045,00058,000
资源消耗(峰值):
指标 ES OpenSearchSolrMeilisearch
CPU 85%82%78%88%
内存75%72%65%82%
磁盘IO 68%65%60%70%
2.2 更新性能测试
plaintext
实时更新性能:
操作类型 ES OpenSearchSolrMeilisearch
单文档更新8ms8.5ms9ms7ms
批量更新(100)45ms48ms52ms42ms
部分字段更新12ms13ms15ms11ms
数据一致性延迟:
节点数 ES OpenSearchSolrMeilisearch
3节点280ms290ms320ms250ms
5节点420ms440ms480ms380ms
7节点580ms610ms650ms520ms
三、查询性能测试
3.1 基础查询性能
python
classQueryTester:
def __init__(self):
self.query_templates ={
'term_query':{'field':'exact value'},
'match_query':{'field':'fuzzy value'},
'range_query':{'field':{'gte':'min','lte':'max'}},
'complex_query':{
'bool':{
'must':[...],
'should':[...],
'filter':[...]
}
}
}
def run_query_test(self, engine, query_type, iterations=1000):
results ={
'latency':[],
'cpu_usage':[],
'memory_usage':[]
}
query =self.query_templates[query_type]
for _ in range(iterations):
start_time = time.time()
response = engine.execute_query(query)
latency = time.time()- start_time
results['latency'].append(latency)
results['cpu_usage'].append(get_cpu_usage())
results['memory_usage'].append(get_memory_usage())
returnself.analyze_results(results)
查询性能测试结果:
plaintext
单节点查询性能(QPS):
查询类型 ES OpenSearchSolrMeilisearch
精确匹配2,8002,7002,4003,200
模糊匹配1,5001,4501,3001,800
范围查询2,0001,9001,7002,200
复杂查询800750650950
查询延迟分布(ms):
分位数 ES OpenSearchSolrMeilisearch
P50 25262822
P95 45475240
P99 75788568
P999 120125135110
3.2 聚合查询性能
plaintext
聚合性能(QPS):
聚合类型 ES OpenSearchSolrMeilisearch
Terms聚合850820750不支持
Histogram650630580不支持
DateHistogram550530480不支持
Nested聚合320300270不支持
内存占用(相对基础内存):
聚合类型 ES OpenSearchSolrMeilisearch
Terms聚合+35%+38%+42% NA
Histogram+45%+48%+52% NA
DateHistogram+40%+43%+48% NA
Nested聚合+60%+65%+70% NA
四、集群扩展性测试
4.1 水平扩展性能
plaintext
集群扩展效果(相对单节点):
节点数 ES OpenSearchSolrMeilisearch
3节点2.7x2.6x2.4x2.8x
5节点4.2x4.0x3.8x4.4x
7节点5.8x5.5x5.2x6.0x
资源利用均衡度:
指标 ES OpenSearchSolrMeilisearch
CPU均衡度92%90%85%94%
内存均衡度88%85%82%90%
磁盘均衡度95%93%90%96%
4.2 容错性测试
python
def fault_tolerance_test(cluster_config):
"""
测试集群容错性能
"""
scenarios =[
'node_failure',
'network_partition',
'disk_failure',
'high_load'
]
results ={}
for scenario in scenarios:
# 创建故障场景
inject_fault(scenario)
# 测量恢复时间
recovery_time = measure_recovery_time()
# 测量数据一致性
consistency_check = verify_data_consistency()
# 测量性能影响
performance_impact = measure_performance_impact()
results[scenario]={
'recovery_time': recovery_time,
'consistency': consistency_check,
'performance_impact': performance_impact
}
return results
五、资源消耗分析
5.1 内存使用优化
plaintext
内存占用分布:
组件 ES OpenSearchSolrMeilisearch
JVM堆内存60%58%55% NA
系统缓存25%27%30%65%
操作系统15%15%15%35%
优化建议:
1. ES/OpenSearch
-堆内存设置为可用内存的50%
-预留足够的文件系统缓存
-避免超过32GB的堆内存设置
2.Solr
-堆内存设置为可用内存的40%
-优化查询缓存大小
-合理设置文档缓存
3.Meilisearch
-系统内存预留30%
-优化索引缓存大小
5.2 存储优化
plaintext
存储效率对比:
指标 ES OpenSearchSolrMeilisearch
索引大小1.8x1.8x1.6x2.0x
压缩比0.40.40.450.35
更新开销中等中等较低较高
IOPS需求:
场景 ES OpenSearchSolrMeilisearch
索引写入3000290025003500
查询读取1500145013001800
后台合并800780700