读书摘要——第七章
2016-07-20 16:37
225 查看
垂直伸缩:垂直伸缩前,要分析系统的瓶颈,从而针对性的根据瓶颈进行硬件的升级或增加,另外要从软件方面保证系统在垂直伸缩后服务能力的线性增长。1)支持高访问量:访问量的增长,通常瓶颈会出现在CPU或内存上,网络IO或磁盘IO出现瓶颈的几率较低。增加CPU,需要解决锁竞争激烈、并发请求的线程数、单线程任务三个问题,增加内存,需要解决cache的集合大小,JVM堆内存大小的问题。2)支撑大数据量:当表中存储数量增大后,可采用分表的方式,通常借助DAL来解决。3)提升计算能力:通过增加计算线程,或拆分计算步骤,采用并行方式来提升计算能力。
水平伸缩:水平伸缩相对垂直伸缩而言,在技术上要求高得多。如登录状态的保存。1、支撑高访问量:对于水平伸缩而言,最佳的情况是无状态的,业界通过SNA 体系来指导如何构建无状态的应用。SNA架构在实现时通常采用的方法是将有状态的部分集中放入缓存或数据库中。缓存状态的水平伸缩方法,广播同步,通过Multicast实现,开源软件主要为JGroups。分布式缓存,目前分布式缓存使用最广泛的是memcached。文件的水平伸缩方法,
直连式存储(DAS Direct-Attached Storage),各系统直接与一个集中的存储设备连接,从而进行文件的读取。网络存储(Fabric-Attached Storage),网络存储主要有NAS 和 SAN 两种方式。分布式文件系统,是采用众多普通PC Server机器构成巨大的存储池,每台机器只存储一部分数据,如Google的GFS 和 Yahoo!的HDFS。应用的水平伸缩方法,通常采取拆分应用的方式解决。水平伸缩后数据库问题,通常采用1)缓存,页面静态化、页面片段缓存、数据缓存。
2)分库 。3)异步数据库访问,异步数据库访问带来了极大的性能提升,解决高并发的问题。4)DAL(Data Access Layer) 系统直接交给数据库的操作转变为通过DAL来进行提交,目前DAL开源的有Amoeba。2、支持大数据量:数据量增长后带来的问题主要是读写性能下降,从数据库来看,可以采用读写分离和多master这两种方式。读写分离,读写分离采用的方式为写数据时在一个数据库上写入,而读取时从多个其它数据库中读取,通常将写入的库成为master库,将读取的库称为slave库。如Mysql
replication、oracle standby等。mysql replication支持对称复制和非对称复制两种方式。对称复制是从master 库复制到所有slave库 ,数据保持一致。有点是各slave库均一致,不会因为某台宕机而影响业务,缺点是每个slave数据量非常大的时候,延迟会越来越严重。非对称复制是指从master库复制部分数据到slave库,各slave库数据可能不同。优点在于可以提升读取数据的响应速度,减少数据库间复制所带来的延迟,缺点在于一旦slave机器故障,就会导致数据要回到master读取,同时由于slave数据不同,使业务访问比较复杂。对于异构数据库之间的读写分离,如写入oracle,读取为mysql
,通常借助消息中间件,由消息中间件通知响应的订阅者处理。读写分离适合于读多写少,并允许一定的延迟的业务。多 master
,为提升数据库写的速度,通常采用建立多个master,多个master没有关联,数据并不相同,这种方式仅适用于读取数据时无须联合读取的情况。另一种多master状况则为每个master的数据要保持一致。数据一致性的问题通常采用复制、两阶段提交、三阶段提交或google paxos 来解决,复制要求数据具备版本信息。自增ID的问题通常要改为由程序来生成ID。3、提升计算能力:在水平伸缩场景中可能将计算任务拆分,然后分派给不同的机器进行计算,最后汇总。复杂的地方在于拆分方法、拆分后的分派调度及机器执行失败时的处理,可采用MapReduce
和 MPI。
水平伸缩:水平伸缩相对垂直伸缩而言,在技术上要求高得多。如登录状态的保存。1、支撑高访问量:对于水平伸缩而言,最佳的情况是无状态的,业界通过SNA 体系来指导如何构建无状态的应用。SNA架构在实现时通常采用的方法是将有状态的部分集中放入缓存或数据库中。缓存状态的水平伸缩方法,广播同步,通过Multicast实现,开源软件主要为JGroups。分布式缓存,目前分布式缓存使用最广泛的是memcached。文件的水平伸缩方法,
直连式存储(DAS Direct-Attached Storage),各系统直接与一个集中的存储设备连接,从而进行文件的读取。网络存储(Fabric-Attached Storage),网络存储主要有NAS 和 SAN 两种方式。分布式文件系统,是采用众多普通PC Server机器构成巨大的存储池,每台机器只存储一部分数据,如Google的GFS 和 Yahoo!的HDFS。应用的水平伸缩方法,通常采取拆分应用的方式解决。水平伸缩后数据库问题,通常采用1)缓存,页面静态化、页面片段缓存、数据缓存。
2)分库 。3)异步数据库访问,异步数据库访问带来了极大的性能提升,解决高并发的问题。4)DAL(Data Access Layer) 系统直接交给数据库的操作转变为通过DAL来进行提交,目前DAL开源的有Amoeba。2、支持大数据量:数据量增长后带来的问题主要是读写性能下降,从数据库来看,可以采用读写分离和多master这两种方式。读写分离,读写分离采用的方式为写数据时在一个数据库上写入,而读取时从多个其它数据库中读取,通常将写入的库成为master库,将读取的库称为slave库。如Mysql
replication、oracle standby等。mysql replication支持对称复制和非对称复制两种方式。对称复制是从master 库复制到所有slave库 ,数据保持一致。有点是各slave库均一致,不会因为某台宕机而影响业务,缺点是每个slave数据量非常大的时候,延迟会越来越严重。非对称复制是指从master库复制部分数据到slave库,各slave库数据可能不同。优点在于可以提升读取数据的响应速度,减少数据库间复制所带来的延迟,缺点在于一旦slave机器故障,就会导致数据要回到master读取,同时由于slave数据不同,使业务访问比较复杂。对于异构数据库之间的读写分离,如写入oracle,读取为mysql
,通常借助消息中间件,由消息中间件通知响应的订阅者处理。读写分离适合于读多写少,并允许一定的延迟的业务。多 master
,为提升数据库写的速度,通常采用建立多个master,多个master没有关联,数据并不相同,这种方式仅适用于读取数据时无须联合读取的情况。另一种多master状况则为每个master的数据要保持一致。数据一致性的问题通常采用复制、两阶段提交、三阶段提交或google paxos 来解决,复制要求数据具备版本信息。自增ID的问题通常要改为由程序来生成ID。3、提升计算能力:在水平伸缩场景中可能将计算任务拆分,然后分派给不同的机器进行计算,最后汇总。复杂的地方在于拆分方法、拆分后的分派调度及机器执行失败时的处理,可采用MapReduce
和 MPI。
相关文章推荐
- 解析Android开发优化之:对Bitmap的内存优化详解
- Echarts 地图控件tooltip多行显示
- GStreamer SDK 1.0 Build Via Cerbero
- hd 5053 the Sum of Cube
- [LeetCode] 38. Count and Say
- memcached 最佳实践
- python对象引用(变量)
- java -BolokingQueue
- 超级楼梯 hd 2041
- LeetCode 39. Combination Sum
- 堆,栈,内存泄露,内存溢出介绍
- Codeforces #361 (Div. 2)B-Mike and Shortcuts(spfa最短路)
- button的常用属性和方法总结
- kkpager.js(jq分页插件)
- ORA-15027: active use of diskgroup "TEST" precludes its dismount
- 短信验证码(SMS verification)是什么
- View的事件传递机制
- std::max_element
- C++中break,continue,return用法
- Java中的继承