Skip to content

设计通知系统

  1. 确定通知的类型(手机通知/短信/邮件)、实时性、支持的设备、取消通知规则、日通知数
  2. 需考虑的问题:单点故障、扩展性(增加服务器就可增加通知数)、是否需要消息中间件解耦系统组件
  3. 可靠性:放置数据丢失(分布式去重机制)
  4. 流量限制:限制用户能收到的通知数量
  5. 重试机制:通知失败重发机制,超过重发上限需给开发人员发送告警信息
  6. 事件追踪:对通知的打开率、点击率和参与度等进行跟踪

通知服务器提供API供业务系统调用,通知先持久化后再路由到消息队列,通知客户端从消息队列中拉取通知根据发送策略完整消息的发送,消息队列作为通知系统的缓冲区可通过增减两端的服务器扩缩容通知的处理速度

设计限流器

限流器通过有意或者无意地拦截超额的请求:预防Dos攻击、降低服务负载

  1. 客户端/服务器限流器、限流属性(IP地址、用户ID)、数据规模、分布式限流器
  2. 可基于微服务的API网关或者服务端实现
  3. 流量限制算法:代币桶算法、漏桶算法、固定窗口计数器算法、滑动窗口日志算法、滑动窗口计数器算法

设计一致性哈希系统

设计键值存储系统

设计分布式系统中的唯一ID生成器

设计短链生成器

网络爬虫系统

设计搜索自动补全系统

设计支付系统

高并发架构

响应式编程架构

负载均衡架构

分布式锁解决方案

堆外缓存与磁盘缓存解决方案:MapDB

堆内缓存解决方案:Java堆内缓存与Guava Cache

MySQL性能监控解决方案:Prometheus+Grafana

MySQL分库分表:MyCAT

MySQL主从复制

SQL优化与索引优化

Web性能测试解决方案:JMeter

代码单元的性能测试与优化

MySQL基准测试:sysbench与mysqlslap

为MySQL填充亿级数据

微服务

注册发现、全链路日志、熔断、限流

数据一致性

数据同步

BFF:BackendforFront

接口Mock

一人一套测试环境

Dubbo架构

MOM架构

秒杀架构

架构设计方法

  1. 切分
  2. 扩展
  3. 日志
  4. 监控
  5. 负载均衡

性能考量

安全考量

数据持久层

  1. 冷热分离
  2. 查询分离
  3. 分表分库

缓存层

  1. 读缓存
  2. 写缓存
  3. 中间件
  4. 更新缓存
  5. 高可用设计
  6. 监控

推荐阅读书单

高性能Java架构:核心原理与案例实战

搞定系统设计: 面试敲开大厂的门

Java系统分析与架构设计