如何能构建高可用性高扩展性地系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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