跳转至

分布式系统

系统突发十倍流量

  1. 限流降级,超过承载能力的请求快速失败,同时业务降级,关闭推荐等非核心业务,同时调度k8s扩容增加容量。
  2. 如果这种流量常态化,则通过多级缓存、读写分离、异步处理、弹性容器化、限流熔断、系统状态监测、压测等方式保障系统稳定性

负载均衡

负载均衡

  • 硬件:F5
  • 软件
    • LVS(四层)
    • Nginx / HAProxy(七层)
    • DNS(DNS 轮询)

单体服务拆分为微服务

  1. 梳理业务模块、重要性、紧急程度等排出迁移优先级
  2. 先用职责清晰,功能简单的模块(如用户管理等)拆分验证,把注册中心、配置中心、网关、监控等基础设施搭建好,方便之后的模块迁移
  3. 整个迁移过程采用渐进式、小步快跑、灰度发布、回滚预案等策略,减少风险

客户说接口超时,如何排查?

全局->局部->日志,关注数据库、下游服务、网络、代码等

  1. 先确定是偶发还是持续超时,提供请求ID或具体时间,是个别用户还是全部用户
  2. 查看监控指标,关注接口的响应时间、QPS、错误率等,同时查看服务器的CPU、内存、网络等资源使用情况
  3. 使用请求ID查看日志,查看每个环节的处理时间,逐步缩小排查范围
  4. 数据库的话查看慢查询日志,是否命中索引、命中缓存等
  5. 确定问题后,快速处理,比如增加索引、增加缓存、扩容、熔断降级等,优先保证服务恢复,后续做完整复盘,并采取措施(如告警、压测等)避免此类问题

未支付取消订单

  1. 定时轮询:简单但精度低,并且对DB持续压力
  2. Redis Key 过期监听:实现简单,但过期通知基于 Pub/Sub,不持久化、不重试,监听服务宕机则事件永久丢失,可靠性差
  3. MQ 延迟队列(推荐):消息持久化 + ACK 确认,可靠性高,精度好;缺点是引入 MQ 增加了架构复杂度和运维成本

点赞系统

  1. Redis的集合:在点赞时,将用户的ID存入集合,在取消点赞时,将用户的ID从集合中删除;通过scard即可得知点赞人数
  2. 同步到DB:通过MQ异步批量写入DB
  3. 热点Key:明星可能短时间内被很多人点赞,可以在代码中维护一个本地缓存,把热点Key批量插入Redis

短链接系统

使用自增ID + Base62,ID对62取模后产生所需的唯一短链接。

使用临时重定向,方便跟踪和分析链接使用情况。

评论