`
hegan_2009
  • 浏览: 12147 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

大型网站架构演变

阅读更多

本文转自 http://www.cnblogs.com/vsover/archive/2009/01/08/1371543.html

 

声明,这篇文章的作者是BlueDavy,并非我。本人认为写的很好,从中抽取出有用的章节,留做备忘并与大家分享。

          第一步:物理分离应用数据库

          网站运营的最开始阶段,在每天高峰期的时候总是会出现宕机现象并且经常会有数据库和网站应用挣抢硬件资源的状况出现,这种情况下,最简单的方案就是把应用和数据库分开部署到不同机器上,以提高各自能够占有的资源。(此方案是网站建设最初阶段)

          第二步:页面缓存和静态化

          随着网站访问量的迅猛攀升,系统的响应会开始变慢,主要原因是因为访问数据库的连接增多,数据库服务器的硬件配置又决定了只能提供一定数量的连接。由于网站里的很多内容是很少更新的。于是可以把这些页面缓存起来或者静态化,减少对数据库的访问。这一步对技术上有所要求:页面缓存技术,模板技术。页面缓存提议Squid等几种方案,静态化可通过生成静态HTML方式实现。

           第三步:页面片段缓存

           页面片段缓存可采用ESIOSCacheD等框架来进行实现。

           第四步:数据缓存

           数据缓存可采用ehcacheOSCache或独立实现的缓存框架来实现。这步演变对技术上的要求:Map数据结构、程序语言中的Map数据结构(例如JAVA中的HashMapTreeMap等)、所采用的缓存框架的实现方式(缓存内容的存储方式、查找算法和失效算法)

           第五步:水平扩展应用服务器

           如果单纯是访问量高造成了服务器压力过大,那就只能采用增加应用服务器,进入水平扩展阶段。那么如何让访问平均分配到每台应用服务器上。这里先用软件负载均衡技术。软件负载均衡技术可选:DNS轮询、ApahceNginxLVS等。又如何保持信息同步呢,如session同步。可采用信息写入数据库、写入共享文件、cookie或在各台机器上同步状态信息等。如何保证数据缓存的同步?可采用缓存同步或分布式缓存。如何让文件相关的功能继续可用 ,例如文件上传功能等。可采用共乡文件系统或存储设备,采用前者的居多一些。这一步需要积累的知识有1.负载均衡技术,包括但不限于硬件负载金衡技术(四层,七层等)、软件负载均衡技术、负载均衡算法、转发协议、(如VS/NATVS/TUNVS/DR)所选用的技术的实现细节(如LVS的实现)等。2.容灾技术,包括但不限于ARPLinux Heart-beanting等。3.状态信息或缓存同步技术,包括但不限于cookieUDP协议、组播、数据同步框架的实现(例如jgroups等)。4.共乡文件原理,NFS

            第六步:分库

            以上工作完成后,你的团队可以做各种各样的小调优工作,例如操作系统调优、Apache调优、JVM调优等等。分库的实现对技术没有太高的要求,仅在于整理业务,进行拆分,并相应的对程序进行适当的修改。

            第七步:分表、DAL、分布式缓存

            由于数据库数据量太大,分库往往不能够解决系统缓慢,这时,需要采取适当的分表和数据库调优,由于服务器没有那么多内存可以提供缓存,所以开始采用分布式缓存。问题: 在进行分表时,发现很明显的问题:分表后导致访问数据库的程序复杂度提高。因为在查表时必然要先考虑分表规则。要将这一层统一 ,最好的办法就也就是著名的DAL。增加数据访问层。分布式缓存可采用的方案有memcacheJbossCache等。分表时应做的知识储备:动态HashConsistent Hash 、分布式缓存实现原理、数据库连接管理、数据库操作的控制等。

            第八步:改变应用服务器水平扩展环境

            ApachenginxLVS等软件负载均衡方式已经无法承受巨大的访问量的调度压力时,可考虑购买硬件负载均衡设备。入F5NetsclarAthlon等,也可从业务角度进行划分,构建不同的业务软件负载集群组。文件共享方案出现瓶颈时,这个时候可以考虑购买昂贵的存储设备 。如NAS等,也可考虑自行设计或是采用成熟的分布式文件系统。

            第九步:数据读写分离与廉价的存储

            如服务器增加太多了,数据库连接相当激烈,读写比相当高,这时可构件大型数据库集群或数据读写分离。数据读写分离可选择的方案或程序级的同步方案,在实现读写分离的时候要同步改造DAL,以适应新的演变。廉价的存储方面有GoogleBigtable、新浪的 Memcachedb等。应具备的知识储备:数据库自行复制、同步方案及实现原理(如OracleStandbyMySQLReplication等);数据延迟以及不一直的解决方案。读写分离规则判断。

            第十步:大型分布式应用时代

拆分成分布式后一个很明显的需求就是高效、稳定的通信和调用框架。

管理好大型分布式的应用,涉及到陆游、以来、版本、错误追踪、检测和报警等多方面的问题。

合理拆分,涉及业务的整理和大型系统架构的把握。

这一步涉及很多知识体系:通信、分布调用、分布式事务、消息机制、并行计算、报表、检测技术、规则策略等。

分享到:
评论

相关推荐

    大型网站架构演变和知识体系.pdf

    ### 大型网站架构演变与知识体系解析 #### 架构演变的第一步:物理分离Web服务器与数据库 在网站发展的初期阶段,往往由于资源限制,Web应用与数据库部署在同一台服务器上。随着用户访问量的增长,单一服务器上的...

    大型网站架构演变和知识体系.

    总的来说,大型网站架构演变的知识体系包括:单体架构、垂直拆分、水平扩展、微服务架构、容器化、数据一致性理论、缓存技术、CDN、NoSQL、消息队列、监控和日志分析等多个方面。理解并掌握这些知识,有助于构建高效...

    详解:大型网站架构演变和知识体系

    大型网站架构演变和知识体系 之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再...

    大型网站架构演变和知识体系 讲解

    ### 大型网站架构演变与知识体系详解 #### 架构演变的第一步:物理分离Web服务器与数据库 在网站初创阶段,通常是通过一台主机来承载所有的功能,包括Web服务和数据库服务。随着用户访问量的增长,单一主机的性能...

    中大型网站架构演变之路.pdf

    中大型网站架构的演变是伴随着互联网...综上所述,中大型网站架构演变是一个动态的、持续优化的过程,需要综合考虑多种技术要素,以及业务发展的不同阶段,通过不断的技术迭代和架构调整,来支撑业务的持续发展和扩展。

    大型网站架构演变和知识体系

    大型网站架构演变和知识体系 之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上...

Global site tag (gtag.js) - Google Analytics