互联网架构演变的典型过程之一
声明,这篇文章的作者是BlueDavy,并非我。本人认为写的很好,从中抽取出有用的章节,留做备忘并与大家分享。
第一步:物理分离应用数据库
网站运营的最开始阶段,在每天高峰期的时候总是会出现宕机现象并且经常会有数据库和网站应用挣抢硬件资源的状况出现,这种情况下,最简单的方案就是把应用和数据库分开部署到不同机器上,以提高各自能够占有的资源。(此方案是网站建设最初阶段)
第二步:页面缓存和静态化
随着网站访问量的迅猛攀升,系统的响应会开始变慢,主要原因是因为访问数据库的连接增多,数据库服务器的硬件配置又决定了只能提供一定数量的连接。由于网站里的很多内容是很少更新的。于是可以把这些页面缓存起来或者静态化,减少对数据库的访问。这一步对技术上有所要求:页面缓存技术,模板技术。页面缓存提议Squid等几种方案,静态化可通过生成静态HTML方式实现。
第三步:页面片段缓存
页面片段缓存可采用ESI、OSCacheD等框架来进行实现。
第四步:数据缓存
数据缓存可采用ehcache、OSCache或独立实现的缓存框架来实现。这步演变对技术上的要求:Map数据结构、程序语言中的Map数据结构(例如JAVA中的HashMap、TreeMap等)、所采用的缓存框架的实现方式(缓存内容的存储方式、查找算法和失效算法)
第五步:水平扩展应用服务器
如果单纯是访问量高造成了服务器压力过大,那就只能采用增加应用服务器,进入水平扩展阶段。那么如何让访问平均分配到每台应用服务器上。这里先用软件负载均衡技术。软件负载均衡技术可选:DNS轮询、Apahce、Nginx、LVS等。又如何保持信息同步呢,如session同步。可采用信息写入数据库、写入共享文件、cookie或在各台机器上同步状态信息等。如何保证数据缓存的同步?可采用缓存同步或分布式缓存。如何让文件相关的功能继续可用 ,例如文件上传功能等。可采用共乡文件系统或存储设备,采用前者的居多一些。这一步需要积累的知识有1.负载均衡技术,包括但不限于硬件负载金衡技术(四层,七层等)、软件负载均衡技术、负载均衡算法、转发协议、(如VS/NAT、VS/TUN、VS/DR)所选用的技术的实现细节(如LVS的实现)等。2.容灾技术,包括但不限于ARP、Linux Heart-beanting等。3.状态信息或缓存同步技术,包括但不限于cookie、UDP协议、组播、数据同步框架的实现(例如jgroups等)。4.共乡文件原理,如NFS等
第六步:分库
以上工作完成后,你的团队可以做各种各样的小调优工作,例如操作系统调优、Apache调优、JVM调优等等。分库的实现对技术没有太高的要求,仅在于整理业务,进行拆分,并相应的对程序进行适当的修改。
第七步:分表、DAL、分布式缓存
由于数据库数据量太大,分库往往不能够解决系统缓慢,这时,需要采取适当的分表和数据库调优,由于服务器没有那么多内存可以提供缓存,所以开始采用分布式缓存。问题: 在进行分表时,发现很明显的问题:分表后导致访问数据库的程序复杂度提高。因为在查表时必然要先考虑分表规则。要将这一层统一 ,最好的办法就也就是著名的DAL。增加数据访问层。分布式缓存可采用的方案有memcache、JbossCache等。分表时应做的知识储备:动态Hash、Consistent Hash 、分布式缓存实现原理、数据库连接管理、数据库操作的控制等。
第八步:改变应用服务器水平扩展环境
当Apache、nginx或LVS等软件负载均衡方式已经无法承受巨大的访问量的调度压力时,可考虑购买硬件负载均衡设备。入F5、Netsclar、Athlon等,也可从业务角度进行划分,构建不同的业务软件负载集群组。文件共享方案出现瓶颈时,这个时候可以考虑购买昂贵的存储设备 。如NAS等,也可考虑自行设计或是采用成熟的分布式文件系统。
第九步:数据读写分离与廉价的存储
如服务器增加太多了,数据库连接相当激烈,读写比相当高,这时可构件大型数据库集群或数据读写分离。数据读写分离可选择的方案或程序级的同步方案,在实现读写分离的时候要同步改造DAL,以适应新的演变。廉价的存储方面有Google的Bigtable、新浪的 Memcachedb等。应具备的知识储备:数据库自行复制、同步方案及实现原理(如Oracle的Standby、MySQL的Replication等);数据延迟以及不一直的解决方案。读写分离规则判断。
第十步:大型分布式应用时代
l 拆分成分布式后一个很明显的需求就是高效、稳定的通信和调用框架。
l 管理好大型分布式的应用,涉及到陆游、以来、版本、错误追踪、检测和报警等多方面的问题。
l 合理拆分,涉及业务的整理和大型系统架构的把握。
这一步涉及很多知识体系:通信、分布调用、分布式事务、消息机制、并行计算、报表、检测技术、规则策略等。
以上阐述为互联网架构演变的典型过程之一。