|
一、物理分离应用和数据库 把应用和数据库分开部署在不同的机器上,以提升各自能购占有的资源,并避免硬件资源的相互争抢。 二、页面缓存或静态化 不少页面是很少更新的,把这些页面缓存起来或者静态话,减少对数据库的访问。 三、页面片段缓存 对访问数据库的页面再度分析,发现还有不少没有缓存或静态化的页面中有部分内容是可以缓存的,把这些页面 也缓存起来,减少对数据库的访问。 四、数据缓存 各个页面上,程序代码中有很多重复访问相同数据库的操作,将这些数据信息也缓存起来。 五、水平扩展应用服务器 系统在高峰期,应用服务器资源占用的压力会很高。而系统的响应并不慢,数据库的压力也不大。这时候,就增加服务器吧。 如何将应用平均分配到多台服务器上,需要考虑{硬件负载均衡技术:dns轮询,apache,nginx,lvs}{软件负载均衡技术:} 如何保持状态信息的同步,如sesstion,可采用的实现方案:将状态信息写入数据库,写入共享文件cookie,或在个台机器上同步状态信息
如何保存数据缓存的同步,例如之前换存在单台应用服务器上的用户信息,可采用的实现方案有:缓存同步或 分布式缓存。
如何让文件相关的功能继续可用,例如文件上传,可采用的实现方案有:共享文件系统或存储设备
这个阶段需要做好的知识储备: 负载均衡技术,不仅限于硬件负载均衡技术,软件负载均衡技术,负载均衡算法。转发协议(如vs/nat,vs/tun,vs/dr) 所选用技术的实现细节。
容灾技术:包括但不仅限于arp,linux heart-beating 状态信息或缓存同步技术,包括但不限于cookie,udp协议,组播,数据同步框架的实现方式(如jgroups) 共享文件原理:nfs 六、分库 数据库集群(目前有些数据库还不支持集群),分库或提高数据库机器硬件配置
七、分表、dal和分布式缓存(可采用的方案是memcache,jbosscache) 这一部需要的知识储备:动态hash,consistent hash,分布式缓存实现原理(memcache),数据库连接的管理(连接的超时,异常)数据库操作的控制 八、改善应用服务器水平扩展环境 apache.nainx或lvs等软件负载方式已经无法承受巨大的访问量(请求连接数,网络流量)的调度压力 这时候可以考虑购买硬件负载均衡设备,如f5,netsclar,athlon
文件共享方面出现瓶颈。购买昂贵的存储设备,如nas,这个结算需要储备好分布式文件系统的知识体系。 这包括:操作系统上的文件存储机制,所采用的程序语言的文件存储实现机制,已有的分布式文件系统的原理(gfs,hdfs)。 九、数据读写分离和廉价存储 应用服务器增加的太多了,数据库连接竞争相当激烈,读写比相当高,这个时候可选的方案是构建大型数据库集群或数据读写分离。大型数据库集群的成本很高,经过对系统的分析,发现有些数据是无需存储在数据库中的,避免占用昂贵的数据库资源。根据业务来编写适合的存储系统,例如key/value的存储。 数据读写分离的可选方案有各种数据库自行的方案或程序级的同步方案,在实现同步分离时需要同步修改dal,以适应 新的演变,廉价存储方面有goole的bigtable,新浪的memcachedb.
需要的知识储备:数据库自行复制,同步方案即实现原理(如oracle的standby,mysql的replication)数据延迟以及不一致的解决方案(由于同步必然会出现延迟和不一致的现象),读写分离规则判断等。
十、大型分布式应用时代 部署的web应用越来越大,又有多个团队在增加修改,每个团队经常做着重复的事情。还有各种因为系统臃肿带来的问题:部署,维护,不好调优。应用bug相互影响。于是,开始拆分,将系统按照职责进行重整,于是一个大型的分布式应用就产生了。 面临的挑战: 拆分成分布式后一个很明显的需求就是高效,稳定的通讯和调用框架。 如何管理好大型分布式的应用,这涉及到路由,依赖,版本,错误追踪,监测和报警等多方面的问题。 合理拆分,设计到的业务整理和大型系统构架的把握。
这一步涉及到很多知识体系: 通信,分布式调用,分布式事务,消息机制,并行计算,报表,检测技术,规则策略能
|