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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

相关文档
最新文档