系统设计

 

1、高并发

系统设计高并发

1.1、负载均衡

根据节点负载情况,将客户端请求发送到不同的节点。常用的负载均衡算法如下:

  • 轮询
  • 加权轮询
  • 最少连接数
  • 随机
  • 源地址哈希(IP Hash)

1.2、缓存

网站性能优化的第一定律:有限考虑使用缓存。

1.3、消息队列

1.3.1、模型

  • 点对点模式:一个消息只能被一个消费者消费一次。
  • 发布订阅模式:多个订阅者可以从频道订阅这条消息并消费。

1.3.2、使用场景

  • 异步处理:例如用户注册发送奖励。
  • 流量削锋:服务器根据处理能力从消息队列中获取消息处理。防止短时间内大量请求压垮服务器。
  • 应用解藕:一个模块修改不影响其他模块,实现可扩展性。

1.3.3、可靠性

  • 发送端可靠性:使用本地消息表,发送成功删除本地消息,失败继续发送。
  • 接收端可靠性:消费端业务逻辑幂等性;消息具有唯一编号。并使用一张日志表记录已经消费的消息编号。

1.4、读写分离、分库分表

  • 读写分离可以大幅提高读性能,小幅提高写的性能
  • 分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。

2、高可用

系统设计高可用

2.1 降级

  • 服务降级是指系统为了应对大量的请求,主动关闭部分功能,以此释放服务器资源从而保证核心功能可用。

2.2 限流

  • 限流(Ratelimiting)是指对服务的请求进行限制,例如某一接口的请求限制为 100 个每秒,对超过限制的请求则进行快速失败或丢弃。
  • 常见限流算法(分布式服务限流实战,已经为你排好坑了
    • 漏桶算法
    • 令牌桶算法

2.3 熔断

分布式id生成算法

  • uuid
  • 数据库自增id
  • snowflake:41bit时间戳 + 10bit机器id + 12bit序列号

分布式系统如何保证一致性

reactor模式

彻底搞懂Reactor模型和Proactor模型

无论是C++还是Java编写的网络框架,大多数都是基于Reactor模型进行设计和开发,Reactor模型基于事件驱动,特别适合处理海量的I/O事件。

Reactor模型中定义的三种角色:

  • Reactor:负责监听和分配事件,将I/O事件分派给对应的Handler。新的事件包含连接建立就绪、读就绪、写就绪等。
  • Acceptor:处理客户端新连接,并分派请求到处理器链中。
  • Handler:将自身与事件绑定,执行非阻塞读/写任务,完成channel的读入,完成处理业务逻辑后,负责将结果写出channel。可用资源池来管理。

微博粉丝关系设计