java分布式服务的高可用处理
高可用的核心就是冗余,某一个服务器或者数据库、缓存不可用使用的时候,也不会影响用户的使用体验。
1 服务器:分布式服务部署
2 缓存:
多级缓存策略:
前端:页面缓存
后端:本地缓存。redis缓存(分布式缓存结构)。数据库。
3 数据库:读写分离,分库分表。
读写分离:读库、写库,数据还要同步。
mysql读写分离数据同步机制:可以通过Canal实现主从同步机制。
+------------+ +------------+ +------------+
| MySQL | | Canal | | Client |
| Master | | Server | | Application|
+-----+------+ +-----+------+ +-----+------+
| | |
| 1. 模拟Slave | |
|<---------------| |
| | |
| 2. 推送binlog | |
|--------------->| |
| | 3. 解析转换 |
| |--------+ |
| | | |
| | 4. 消息队列 |
| |------->| |
| | | 5. 消费 |
| | |-------->|
水平分表(常用):根据hash算法 % id(唯一键值都可以),生成多张相同的表存储数据。
垂直分表:将一个表的字段分到不同的表中,降低单表压力。
4 限流、熔断、服务降级:保证服务器的对外服务。
限流:某些接口根据压测指标来设置限流qps。
熔断:某个服务某个rpc接口失败重拾达到一定测试进行熔断,服务标记为不可用。
服务降级:对非核心接口提供降级,如接口返回失败请重试,提示当前接口不可用。
也就是关闭某些服务,或者返回预定设置的值。