可用性
可扩展性
可维护性
容错
容错,这个词的理解,书面意思就是可以容下错误,不让错误再次扩张,让这个错误产生的影响在一个固定的边界之内
在工作中,降级、限流、熔断器、超时重试等都是常见的容错方法
抗量
- 使用并发
如何抗住大并发的场景,充分利用golang的goroutine并发性能,利用并发执行缩短总体服务响应时间,针对耗时严重的服务,使用消息队列进行缓冲。 - 脱离DB
使用分库分表、读写分离,使用redis这样的银弹,优化业务逻辑,优惠sql查询时间 - 多级缓存
只有一级缓存,直接存入redis,这里需要关注缓存的穿透率,比如1000次查询有多少次从数据库中查询,穿透率大就说明缓存没有设置好
超时与重试
每次连接服务,都需要指定相应的超时时间,例如数据库查询、rpc调用、第三方服务调用。对于资源强依赖的情况,需要有重试机制,
熔断
当调用满足失败次数,失败比例就会触发熔断器打开,有程序自动切断当前的RPC调用,来防止错误进一步扩大。实现一个熔断器主要是考虑三种模式:关闭、打开、半开。
参考资料
author blog - Martin kleppmann
Designing Data-Intensive Applications