
1) 【一句话结论】
采用时间哈希分片(避免热点)+ SSD+LZ4压缩(提升存储密度)+ 跨机房3副本异步批量复制(延迟控制)架构,结合CAP理论在分区容忍下选择AP模式(最终一致性+高可用),满足PB级日志存储的99.9%可用性需求。
2) 【原理/概念讲解】
老师口吻解释核心概念:
3) 【对比与适用场景】
| 特性 | 强一致性(Raft实现的多副本同步) | 最终一致性(GFS异步复制) |
|---|---|---|
| 一致性保证 | 读写强一致(所有副本数据相同) | 最终一致(副本延迟同步,读可能旧数据) |
| 写入延迟 | 较高(需同步所有副本) | 较低(写入后立即返回,副本稍后同步) |
| 读取延迟 | 较高(需从最新副本读取) | 较低(可从任意副本读取,可能旧数据) |
| 适用场景 | 金融交易、核心业务(需严格一致性) | 日志存储、缓存(对可用性要求高) |
| 注意点 | 分区时可能不可用(CA模式) | 分区时可用性高(AP模式),一致性延迟 |
4) 【示例】
伪代码展示分片与副本的请求流程:
// 客户端写入日志
client.write_log(log_data, timestamp):
shard_id = hash(timestamp) % num_shards // 时间哈希分片
send_request_to_primary_replica(shard_id, log_data)
// 主副本处理写入(异步批量复制)
primary_replica.on_write(log_data, timestamp):
local_store.put(timestamp, log_data) // 本地存储
# 异步批量复制(每批1000条)
batch = [log_data]
if len(batch) >= 1000:
async_send_batch_to_secondary_replicas(batch)
else:
batch.append(log_data)
// 健康检查(故障转移)
health_check():
for replica in all_replicas:
send_ping(replica)
if not receive_response(replica, timeout=5s):
mark_replica_as_failed(replica)
trigger_rebalance() // 触发副本再平衡
5) 【面试口播版答案】
(约90秒)
“面试官您好,针对360安全产品的PB级日志存储需求,我设计的系统核心是分片+多副本+异步复制架构,结合CAP理论平衡一致性与可用性。首先,分片采用时间哈希策略(按日志时间范围切分,如每天一个分片),避免热点数据集中到单个节点。存储介质用SSD+LZ4压缩,提升PB级存储的读写效率和空间利用率。每个分片配置3个跨机房副本,通过异步批量复制(每批1000条日志)控制延迟,保证写入后立即返回。一致性方面,非分区时通过Raft协议实现强一致性,分区时允许最终一致性(AP模式),写入后立即返回,保证99.9%可用性。健康检查机制定期检测副本状态,故障时触发再平衡,确保服务不中断。”
6) 【追问清单】
7) 【常见坑/雷区】