
采用分层分布式架构,存储层选用HDFS(结合Active-standby HA避免单点故障),通过时间+事件类型混合分片策略划分数据,副本策略动态调整(热数据三副本、冷数据二副本),上层通过Spark Hadoop生态集成实现实时与离线分析,结合时间索引优化查询,满足PB级安全日志的存储与高效查询需求。
老师口吻,解释核心设计:
| 组件/策略 | HDFS | Ceph | 时间分片 | 事件类型分片 | 热数据三副本 | 冷数据二副本 |
|---|---|---|---|---|---|---|
| 定义 | Hadoop分布式文件系统,基于HDFS协议,块存储 | 对象存储系统,基于RADOS架构,块/对象存储 | 基于数据时间范围(如时间戳区间)划分数据分片 | 基于事件类型(如攻击类型)划分数据分片 | 热数据(最近30天)保留三副本 | 冷数据(超过30天)降为二副本 |
| 特性 | 与Hadoop生态深度集成,适合结构化/半结构化数据;扩展性中等;运维复杂度中等 | 高可扩展性,可水平扩展至EB级;适合非结构化数据;运维复杂度高 | 数据均匀分布,无热点;适合时间序列数据查询;分片边界调整成本 | 数据均匀分布,无热点;适合按事件ID查询;可能导致哈希冲突(热点) | 存储成本降低(减少1/3冗余);保证热数据高可用 | 存储成本进一步降低(减少1/2冗余);冷数据可用性稍降 |
| 使用场景 | 日常安全日志存储,与Spark/MapReduce集成 | 大规模非结构化安全日志(如网络流量日志),高可用需求 | 离线分析(如按月统计攻击次数)、按时间范围查询 | 实时查询(如按事件ID检索特定日志) | 热数据(如实时监控日志) | 历史日志(如归档日志) |
| 注意点 | 需Hadoop集群,管理NameNode、DataNode;存储成本较高 | 运维要求高,需管理OSD、MDS、Monitor;学习曲线陡 | 分片边界调整(Re-sharding)成本;冷数据未归档可能导致存储膨胀 | 哈希冲突导致数据热点,需定期重新分片 | 存储成本高,需平衡可靠性与成本 | 归档流程复杂,需定期清理 |
| 成本 | 硬件成本较低;运维成本中等 | 硬件成本较高(需更多存储节点);运维成本高 | 存储成本:按时间范围存储,冷数据可归档 | 存储成本:均匀分布,但热点导致部分节点负载过高 | 硬件成本:增加1/3存储节点 | 硬件成本:减少1/2存储节点 |
def adjust_replication(log_data, timestamp, is_hot):
shard = time_shard(timestamp) # 时间分片函数
if is_hot:
hdfs_client.put(f"/logs/{shard}/log_{timestamp}", log_data, replication=3) # 热数据三副本
else:
hdfs_client.put(f"/logs/{shard}/log_{timestamp}", log_data, replication=2) # 冷数据二副本
def archive_cold_data(shard_path, days_old):
if days_old > 30: # 超过30天归档
s3_client.upload_file(f"/logs/{shard_path}", f"s3://cold-logs/{shard_path}_{days_old}", overwrite=True)
hdfs_client.delete(f"/logs/{shard_path}", recursive=True) # 删除HDFS原数据
# Spark读取时间分片数据,按时间范围查询(如最近24小时)
df = spark.read.format("hdfs").option("path", "/logs/shard_00/").load()
df.filter("timestamp >= '2024-01-01T00:00:00' and timestamp < '2024-01-02T00:00:00'").show()
# Spark Streaming读取时间索引,快速定位数据
stream = spark.readStream.format("hdfs").option("path", "/logs/index").load()
query = stream.filter("timestamp >= '2024-01-01T00:00:00'").writeStream.format("console").start()
各位面试官好,针对360安全日志的PB级存储设计,我采用分层架构:存储层用HDFS(结合Active-standby HA避免NameNode故障),分片策略混合时间+事件类型,动态调整分片(Re-sharding)和冷数据归档,副本策略热数据三副本冷数据二副本,上层通过Spark Hadoop生态集成,结合时间索引优化查询。具体来说,HDFS的HA通过ZooKeeper管理元数据,确保高可用;分片按小时+攻击类型划分,避免热点;副本根据数据热度调整,降低成本;Spark直接读取HDFS分片,实时查询用时间索引加速。这样既能满足PB级存储,又能高效支持实时与离线分析。