51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个高可用的日志系统,用于证券交易系统的审计和故障排查,请说明日志采集、存储、查询和归档的方案。

上海证券交易所A03难度:困难

答案

1) 【一句话结论】采用分层架构设计高可用日志系统,通过分布式采集(多源接入+TLS加密)、多副本存储(ES索引不可修改+Kafka commit log持久化+HDFS/S3冗余)、实时查询(ES全文检索)与分级归档(合规周期驱动),保障审计不可篡改与故障快速排查,满足证券交易系统合规与可靠性需求。

2) 【原理/概念讲解】老师可以解释,证券交易系统的日志是“金融黑匣子”,核心要求是不可篡改(审计链路可追溯)、加密(数据传输与存储安全)。系统分四层:

  • 采集层:用Fluentd/Filebeat多源接入(交易服务器、数据库、网络设备),通过TLS加密传输日志,确保数据传输安全。
  • 存储:实时层用ES+Kafka,ES部署主从复制(3节点),Kafka设置多分区+多副本(如3分区+2副本),保证高可用;归档层用HDFS(多副本冗余)+S3(对象存储),满足长期存储。
  • 查询:基于ES的REST API,支持复杂查询(如按交易ID、时间、状态筛选),延迟低(亚秒级)。
  • 归档:按监管要求(如30年存储周期)分级,热数据ES保留7天,冷数据转HDFS(30天)再转S3(长期),定期清理HDFS中过期数据。
    重点补充不可篡改机制:ES索引不可修改(通过索引生命周期管理,删除而非更新;Kafka持久化写入(commit log机制,确保消息顺序与持久性);HDFS多副本校验(数据一致性验证)。

3) 【对比与适用场景】

组件定义特性使用场景注意点
Elasticsearch分布式搜索引擎索引不可修改(创建后不可更新)、全文检索、高并发查询实时审计、故障快速定位索引扩容需停机,冷数据查询性能低
Kafka分布式消息队列持久化写入(commit log)、高吞吐、多消费者日志缓冲、数据流处理需消费端处理,查询需额外解析
HDFS分布式文件系统海量存储、多副本冗余、高容错长期归档、备份读写延迟较高,适合批量处理
S3对象存储弹性扩展、多区域冗余冷数据长期存储存储成本高,适合非频繁访问

4) 【示例】

  • 采集配置(Fluentd,TLS加密):
    <source>
      @type tail
      path /var/log/transactions/*.log
      pos_file /var/log/transactions/pos.log
      read_from_head true
      tag k8s.ingest
    </source>
    <match k8s.ingest>
      @type elasticsearch
      hosts http://elasticsearch:9200
      index_name logs-%{+YYYY.MM}
      type transaction
      # TLS加密传输
      ssl.enabled true
      ssl.certificate /etc/fluentd/certs/fluentd.crt
      ssl.key /etc/fluentd/certs/fluentd.key
    </match>
    
  • 存储:ES集群3节点(主从复制),Kafka集群3分区+2副本,HDFS多副本(3副本),S3多区域复制。
  • 查询示例(ES API查询交易失败日志):
    GET /logs-2024.05/_search
    {
      "query": {
        "bool": {
          "must": [
            { "range": { "@timestamp": { "gte": "now-1h" } } },
            { "match": { "status": "failed" } }
          ]
        }
      }
    }
    
  • 归档流程(伪代码,考虑数据量增长):
    def archive_logs():
        # 每天凌晨0点
        for index in get_es_indices():
            if index.endswith('2024.05'):
                # 转存至HDFS,动态调整副本数(如初始3副本,满载后增加至5)
                hdfs_client.copy_from_local(f'/data/es/{index}', f'/hdfs/logs/{index}')
                hdfs_client.set_replication(f'/hdfs/logs/{index}', 5)  # 动态扩容
                # 删除ES索引
                es_client.delete_index(index)
                # 30天后转存至S3,批量上传优化
                if is_older_than_30_days(index):
                    s3_client.upload_folder(f'/hdfs/logs/{index}', f's3://logs-archive/{index}', batch_size=100)  # 批量上传
                    hdfs_client.delete_folder(f'/hdfs/logs/{index}')
    

5) 【面试口播版答案】
面试官您好,针对证券交易系统的日志系统设计,我的核心思路是构建分层、高可用的架构,覆盖采集、存储、查询、归档全流程,重点满足审计不可篡改与合规存储需求。首先,采集层采用Fluentd等工具,多源接入交易服务器、数据库等,通过TLS加密传输日志,确保数据传输安全;存储层分实时与归档:实时用Elasticsearch+Kafka,ES部署3节点主从复制,Kafka设置3分区+2副本,保证高可用;归档用HDFS(多副本)+S3(多区域),满足长期存储。查询基于ES的API,支持复杂查询(如按交易ID、时间筛选),延迟低;归档按监管要求(如30年周期)分级,热数据ES保留7天,冷数据转HDFS(30天)再转S3(长期),定期清理。这样能确保审计链路不可篡改,故障排查快速响应,同时符合证券合规要求。

6) 【追问清单】

  • 问:如何保障日志采集的不可篡改?
    回答要点:采集层通过TLS加密传输,存储层ES索引不可修改(创建后无法更新,使用索引生命周期管理删除而非更新;Kafka持久化写入(commit log机制,确保消息顺序与持久性);HDFS多副本校验(数据一致性验证)。
  • 问:技术选型中ES、Kafka的参数如何根据交易量调整?
    回答要点:交易量100万/秒时,Kafka分区数设为10(每分区处理10万/秒),副本数2;ES节点数3,每个节点分配2个CPU核心,内存16GB,确保高并发查询。
  • 问:归档策略如何平衡成本与合规?
    回答要点:分级归档,热数据ES保留7天(成本低),冷数据转HDFS(30天,成本中等),再转S3(长期,成本高但合规),定期清理HDFS中超过90天的数据,符合监管要求。
  • 问:如何处理日志查询的延迟问题?
    回答要点:ES集群部署3节点,每个节点配置合适的分片数(如每个索引分片数5),查询时使用ES的查询缓存,减少重复计算,确保查询延迟低于1秒。

7) 【常见坑/雷区】

  • 忽略审计日志的不可篡改特性:证券系统需保证日志不可修改,需设计ES索引不可修改、Kafka持久化写入等机制,避免数据篡改。
  • 技术选型依据不足:未说明ES、Kafka参数如何根据交易量调整,如分区数、副本数、节点配置,导致方案不具可扩展性。
  • 归档策略未结合合规要求:未明确监管要求的存储周期(如30年),导致归档策略不符合合规,可能引发风险。
  • 绝对化表述:如“完全满足延迟要求”,未说明技术实现的局限性(如ES索引扩容成本高,Kafka查询需额外处理)。
  • 未考虑加密存储:未提及ES加密传输、S3加密存储,导致数据安全风险。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1