如何构建高可用性高扩展性的系统

更新时间:2024-04-21 00:16:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

如何构建高可用性高扩展性的系统

1 高可用性

1.1 避免故障 1.1.1 明确使用场景

保持系统简单

1.1.2 设计可容错系统

Fail Fast原则

主流程任何一步出现问题,就应该快速结束 接口和对象设计要严谨 能否被重复调用

多线程并发环境下是否有异常 对象类型是否需要检查

1.1.3 设计具备自我保护能力的系统

对第三方资源持怀疑态度,提供降级措施

1.1.4 限制使用资源

内存

防止集合容量过大造成OOM 及时释放不再使用的对象 文件 网络 连接资源 线程池

1.1.5 其他角度

分析可能的风险

1.2 及时发现故障 1.2.1 监控报警系统 1.2.2 日志系统和分析系统 1.3 及时故障处理 1.3.1 降级 1.3.2 限流

1.4 访问量上涨的应对策略

1.4.1 垂直伸缩

增加配置

1.4.2 水平伸缩

增加机器

1.4.3 拆分

按业务拆库 按规则拆表

1.4.4 读写分离

实时性要求不高、读多写少的系统 如何快速地从写库复制到读库

1.4.5 其他

容量规划

2 高可扩展性

2.1 垂直伸缩 2.1.1 高访问量

增加CPU 锁 线程数 单线程程序 增加内存 cache JVM堆

2.1.2 大数据量

分表

单表数据量减少

跨表查询、分页查询复杂度提升

2.1.3 计算能力

线程数提升

2.2 水平伸缩 2.2.1 高访问量

SNA(Shared Nothing Architecture) 有状态的部分,放入缓存或数据库中 有状态的情况 存在内存的状态

广播同步 例如session同步 单台机器容量有限 分布式缓存 一致性hash

文件

直连存储DAS((Direct-Attached Storage) 网络存储

NAS(Network Attached Storage) SAN(Storage Area Network) 分布式文件系统 GFS HDFS

数据库问题 cache

页面静态化 页面片段缓存 数据缓存

分库

按业务拆库

跨库访问需要多次查询;跨库写需要分布式事务

异步数据库访问

传统方式:阻塞IO

异步方式:非阻塞、异步IO

中间层DAL(Data Access Layer)

透明化分库分表规则

隔离业务服务器和数据库服务器

2.2.2 大数据量

性能压力 读写分离

对称复制 非对称复制

多master

多个master数据不同 多个master数据相同 数据一致性问题 复制 两阶段提交 三阶段提交 Google paxos 自增id 程序统一生成

2.2.3 计算能力

MapReduce MPI

本文来源:https://www.bwwdw.com/article/zj5p.html

Top