Designing Data-Intensive Applications

"some note"

Posted by yueLng on 2019-12-13

可用性

可扩展性

可维护性

容错

容错,这个词的理解,书面意思就是可以容下错误,不让错误再次扩张,让这个错误产生的影响在一个固定的边界之内
在工作中,降级、限流、熔断器、超时重试等都是常见的容错方法

抗量

  1. 使用并发
    如何抗住大并发的场景,充分利用golang的goroutine并发性能,利用并发执行缩短总体服务响应时间,针对耗时严重的服务,使用消息队列进行缓冲。
  2. 脱离DB
    使用分库分表、读写分离,使用redis这样的银弹,优化业务逻辑,优惠sql查询时间
  3. 多级缓存
    只有一级缓存,直接存入redis,这里需要关注缓存的穿透率,比如1000次查询有多少次从数据库中查询,穿透率大就说明缓存没有设置好

超时与重试

每次连接服务,都需要指定相应的超时时间,例如数据库查询、rpc调用、第三方服务调用。对于资源强依赖的情况,需要有重试机制,

熔断

当调用满足失败次数,失败比例就会触发熔断器打开,有程序自动切断当前的RPC调用,来防止错误进一步扩大。实现一个熔断器主要是考虑三种模式:关闭、打开、半开。

参考资料

author blog - Martin kleppmann
Designing Data-Intensive Applications