服务弹力设计总结
一、服务冗余
1、负载均衡器+健康检查 Nginx或HAProxy
2、RPC框架 实现服务自动发现和注册 zookeeper
3、自动化实现服务伸缩
二、服务解耦
1、分层(应用层、服务层、数据服务层)
2、服务拆分(纵向拆分,将大应用拆成多个小应用 横向拆分:将应用层公共逻辑业务抽象出一个公共的服务独立部署向外提供服务)
3、数据分片,每个服务独立用一个数据库,如果单表的数据量很多时,需要拆分成多个表,当一个库不能存放下数据时还需要拆成多个数据库
三、服务容错和保护设计
1、错误方面: 重试策略+熔断(当错误达到一定次数时进行服务降级处理,例如返回一个固定值)+ 幂等性设计
2、流控方面: 服务限流+服务降级(缓存(直接查缓存)、裁剪数据(返回部分简单数据)、裁剪流程(产品逻辑上做优化,访问数据次数减少))
3、一致性: 强一致性(两阶段提交 但是影响效率)、 最终一致性(消息队列异步通讯) 、事务补偿机制
4、自动化运维:网关流量调度和服务监控
四、服务监控
1、服务状态监控 根据监控的系统和业务数据,当服务性能负载很大时就会自动扩容或者进行服务限流、服务降级处理
2、服务内部链路的追踪,以便于后面排查问题
3、异常日志报警