1. 3.6 如何设计一个限流系统historical

    1. 什么是限流 - 高并发系统的三大利器之一,限制访问速率(区别于Semaphore限制的是访问数量) - 技术层面的限流:服务A调用服务B,服务B为了防止请求量过大,限制访问速率 - 业务层面的限流:限制某人每天只能使用n次 2. 为什么需要限流 - 后端服务的处理能力是有限的,如果突发流量暴增

  2. 3.7 如何设计开放API接口historical

    1. 什么是开放接口 一般的API只对内部系统开放 而开放API则是对外部系统开放,其他系统或者软件可以调用这个API获取本系统的数据 2. 如何设计开放接口 2.1. 安全问题 对于开放接口,主要面临3个安全问题: - 请求身份是否可信任--认证 - 请求的参数是否被篡改--签名 - 请求是否唯一

  3. 3.8 如何设计异步系统historical

    1. 什么是异步处理 - A调用B,不等待结果直接返回 2. 为什么需要异步处理 - 可以增加整个系统的吞吐量 3. 如何设计异步处理 3.1. 事件驱动 事件驱动架构.md 3.1.1. API定义 4. 异步处理的问题 4.1. 一致性 - 消息队列一致性问题.md 搞一个一致性平台,监听业务产

  4. 3.9 如何设计隔离系统historical

    1. 隔离是什么 - 将系统或者资源分割开,在系统发生故障时能限定传播范围和影响范围,避免出现雪崩效应 2. 怎么实现隔离 2.1. 存储隔离 - 比如微服务不同服务的机器以及数据库是隔离的 2.2. 服务隔离 - 多租户模式,中台按APPID隔离一样的道理 2.3. 服务内部资源隔离 - 主调调用

  5. 3.10 如何设计熔断系统historical

    1. 熔断是什么 - 主调调用被调,当错误数达到阈值时不再调用被调,好转则恢复调用 - 容错策略中的Failfast 2. 如何实现熔断 2.1. 断路器模式 - - 通过代理(断路器对象)来一对一地(一个远程服务对应一个断路器对象)地接管服务调用者的远程请求 - 服务A调用服务B,A会统计错误,当

  6. 3.11 如何设计降级系统historical

    1. 降级是什么 - 降级是一种兜底方案,在 系统出故障后 尽力而为的措施 - 相比起限流、熔断偏向技术,这个偏向业务层面 2. 什么时候需要降级 - 压测了解系统QPS,当实际QPS大于系统QPS时需要降级 3. 对什么进行降级 - 核心链路还是非核心链路,降级之后的影响 4. 怎么降级 4.1.

  7. 3.12 如何设计超时与重试系统historical

    1. 超时重试是什么 - 超时:服务A调用服务B,为了防止服务A请求服务B但是一直没有响应,导致服务A的线程等资源一直hold着无法释放,因此需要设置超时 - 重试:服务A调用服务B,如果服务A请求服务B发生了网络错误,那么会触发超时,但是这个网络是暂时的,因此重试几次可能就好了 2. 怎么设计超时

  8. 3.14 如何设计开关系统historical

    1. 什么是开关 就是一个bool配置 2. 为什么需要开关 通过开关把一些不重要的服务给停掉或者将功能状态在不同版本之间进行切换 3. 如何实现开关 如何设计配置中心.md

  9. 3.15 如何设计预案系统historical

    1. 什么是预案 可以理解为让业务整体进入某个预先设置好的场景 2. 为什么需要预案 人工修改一个个开关太繁琐并且容易出错 3. 如何实现预案 多个开关策略的串行执行

  10. 3.17 如何设计错误系统historical

    错误系统设计的历史学习笔记,覆盖错误分类、错误码、上下文、传播、日志记录与对外错误信息处理。