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

设计一个高可用的服务(如360安全检测服务),需要考虑故障转移、数据备份、监控告警。请说明架构设计(如主从复制、多活部署)、监控方案(Prometheus+Grafana)和告警机制(SLA监控、阈值告警)。

360服务端开发工程师-Golang难度:困难

答案

1) 【一句话结论】设计高可用服务需通过主从复制(故障转移+数据同步)+多活部署(负载均衡)实现服务可用性,结合全量+增量+异地存储的数据备份(RTO≤5分钟,RPO≤1小时),用Prometheus+Grafana监控关键指标(CPU>80%或QPS<50%时告警),确保故障时快速切换与数据一致性。

2) 【原理/概念讲解】老师:高可用服务设计核心是“故障不中断”,需从故障转移、数据备份、监控告警三方面设计。

  • 主从复制:主节点处理写请求(如用户登录),从节点同步数据并处理读请求(如用户查询),主故障时从节点通过Raft协议同步数据后切换为主,保证数据不丢失。同步机制分同步(主节点确认从节点写入后返回,强一致性但可能阻塞写)和异步(主节点写入后立即返回,性能高但可能延迟)。
  • 多活部署:多个节点同时处理请求,负载均衡器(如Nginx)分配流量(如least_conn策略),提升并发能力。
  • 数据备份:采用全量(每日凌晨2点全量备份至对象存储S3)+增量(每小时通过日志同步,如MySQL binlog),异地存储确保RPO≤1小时(数据丢失上限),RTO≤5分钟(恢复时间目标)。
  • 故障转移:主节点健康检查(CPU<80%且连接数<90%),预同步(Raft预选主,1秒内同步数据),切换后负载均衡器自动将流量切换至从节点。

3) 【对比与适用场景】

模式定义特性使用场景注意点
主从复制主节点处理写,从节点同步数据并处理读读写分离,主故障时从切换为主,数据一致性依赖同步机制读写比例高(读多写少),如数据库、缓存服务主故障时读性能下降,切换有延迟;同步机制影响一致性
多活部署多个节点同时处理请求,负载均衡分配流量所有节点独立处理请求,故障时其他节点接管写多读少或高并发服务(如API网关、计算服务)需要数据一致性时需额外同步(如分布式事务)
数据备份策略全量+增量+异地存储确保数据持久性,降低灾难恢复时间业务数据保护需明确备份频率、RTO/RPO目标

4) 【示例】
伪代码展示数据备份流程(假设MySQL数据库):

// 全量备份脚本(每日凌晨2点执行)
func fullBackup() {
    // 停止MySQL binlog
    exec.Command("mysql", "-uroot", "-p", "-e", "STOP LOGGING;").CombinedOutput()
    // 备份数据
    exec.Command("mysqldump", "-uroot", "-p", "--all-databases").CombinedOutput()
    // 上传至S3
    s3Client.PutObject("backup-bucket", "full_" + time.Now().Format("20060102") + ".sql", backupFile)
    // 启用binlog
    exec.Command("mysql", "-uroot", "-p", "-e", "START LOGGING;").CombinedOutput()
}

// 增量备份(每小时通过binlog同步)
func incrementalBackup() {
    // 获取最新binlog位置
    pos, _ := getBinlogPosition()
    // 同步增量数据
    exec.Command("mysqlbinlog", "-uroot", "-p", "--start-position", pos).CombinedOutput()
    // 上传至S3
    s3Client.PutObject("backup-bucket", "incremental_" + time.Now().Format("20060102_1504") + ".sql", incrementalFile)
}

5) 【面试口播版答案】
“设计高可用服务,核心是通过主从复制实现故障转移,多活部署提升负载。架构上,主节点处理写,从节点同步数据(同步复制保证强一致性),多节点负载均衡(Nginx least_conn)。数据备份采用全量(每日凌晨2点)+增量(每小时日志同步),异地存储到S3,RTO≤5分钟。监控用Prometheus收集CPU、QPS等,Grafana可视化,告警设置SLA阈值(如CPU>80%或QPS<50%时告警)。故障转移时,主节点健康检查失败后,从节点预同步(Raft共识≤1秒),切换为主,负载均衡自动切换流量,确保服务不中断。”

6) 【追问清单】

  • 问题1:数据一致性如何保证?
    回答:用Raft/Paxos共识协议,主从节点通过日志同步,切换后数据一致。
  • 问题2:故障转移的延迟是多少?
    回答:实际网络延迟100-500ms,预同步减少延迟,延迟约2秒(95%置信区间)。
  • 问题3:多活部署时如何避免数据冲突?
    回答:通过分布式锁(如etcd的分布式锁)或Saga模式(补偿事务),写多读少场景下主从同步延迟影响写性能。
  • 问题4:监控具体指标有哪些?
    回答:CPU使用率、内存占用、请求延迟、错误率、QPS,阈值告警。
  • 问题5:数据备份的RTO/RPO目标?
    回答:RTO≤5分钟(恢复时间),RPO≤1小时(数据丢失),全量+增量+异地存储。

7) 【常见坑/雷区】

  • 坑1:数据备份策略不明确(无频率、RTO/RPO)。
  • 坑2:多活下数据一致性处理不具体(仅说分布式锁,未说明选型或补偿)。
  • 坑3:故障转移延迟理想化(未考虑网络抖动)。
  • 坑4:监控指标无具体阈值(如只说“监控性能”)。
  • 坑5:负载均衡策略不当(如轮询导致冷启动节点负载过高)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1