大型网站的架构和语言 大型网站开发流程和步骤( 二 )


完成这一步后,请看一下系统图:
这一步涉及到这些知识体系:
负载均衡技术(包括但不限于硬件负载均衡、软件负载均衡、负载算法、linux转发协议、所选技术的实现细节等 。)、主备技术(包括但不限于ARP欺骗、linuxheart-beat等 。)、状态信息或缓存同步技术(包括但不限于Cookie技术、UDP协议、状态信息广播、所选缓存同步技术的实现细节等 。)、共享文件技术(包括
架构演进的第6步:存储库
在享受了一段时间系统访问量高速增长的快乐后,我发现系统又开始变慢了 。这次是什么情况?我搜索了一下,发现数据库写、更新这些操作中,一些数据库连接的资源竞争非常激烈,导致系统变慢 。下一步该怎么办?此时可选的方案有数据库聚类和数据库分离策略 。由于一些数据库不太支持集群,数据库分离将成为一种常见的策略 。数据库分离意味着要修改原程序 。经过一次修改实现数据库分离,是的,目标达到了,系统恢复甚至比以前更快 。
完成这一步后,请看一下系统图:
这一步涉及到这些知识体系:
这一步更需要从业务上进行合理的划分来实现子数据库,在具体的技术细节上没有其他要求;
同时,随着数据量的增加和数据库分离的进展,需要在数据库设计、优化和维护方面做得更好,因此对这些技术提出了很高的要求 。
架构演进的第七步:表划分、DAL和分布式缓存
随着系统的不断运行,数据量开始大幅度增加 。这时候发现数据库分离后查询还是会慢一点,就按照数据库分离的思路开始做表分离 。当然,这必然需要对程序进行一些修改 。也许这个时候,你会发现,套用自己关心子数据库、子表的规则有些复杂 。所以能否增加一个通用的框架,实现分库分表的数据访问,对应ebay的框架中的DAL,还需要一个相对较长的时间来演进 。当然,也有可能这个通用框架会等到子表完成后再启动 。同时,在这个阶段,可能会发现之前的缓存同步方案存在问题,因为数据量太大,无法将缓存存储在本地再进行同步,所以需要采用分布式缓存方案 。于是,经过又一次的调查和拷问,最终将大量的数据缓存转移到分布式缓存中 。
完成这一步后,请看一下系统图:
这一步涉及到这些知识体系:
子表也更多的是业务划分,涉及到动态哈希算法,consistenthash算法等 。
DAL涉及到很多复杂的技术,比如数据库连接的管理(超时和异常)、数据库操作的控制(超时和异常)、子数据库和子表的规则封装等 。
架构演进的第8步:添加更多的Web服务器
在完成了划分数据库和表格的工作后,数据库的压力已经降低到了一个相对较低的水平,开始过着每天看着访问量飙升的幸福生活 。突然有一天,我发现系统的访问又开始变慢了 。这个时候我先查了一下数据库,压力正常 。然后我查了一下web服务器,发现apache屏蔽了很多请求,应用服务器对每个请求都比较快 。似乎是请求数量过多,导致需要排队等待,响应速度变慢 。很简单 。一般来说,这个时候会有些钱,所以再加一些webserver服务器 。在添加webserver服务器的过程中,可能会遇到一些挑战:
1.Apache的软负载或LVS的软负载不能承担巨大的web访问的调度(请求的连接数、网络流量等 。).此时,如果资金允许,解决方案将是购买硬件负载均衡设备,如F5、Netsclar、Athelon等 。如果资金不允许,解决方案将是对应用程序进行逻辑分类,然后将它们分散到不同的软负载集群中;
2.一些原有的方案如状态信息同步、文件共享等可能存在瓶颈,需要改进 。可能这次会根据情况编制一个符合网站业务需求的分布式文件系统;
做完这些工作,我们开始进入一个看似完美的无限扩张时代 。当网站的流量增加时,解决办法就是不断增加webserver 。
完成这一步后,请看一下系统图:
这一步涉及到这些知识体系:
此时,随着机器数量越来越多,数据量越来越大,对系统可用性的要求越来越高,需要对所采用的技术有更深入的了解,根据网站的需求做出更多的定制产品 。
架构进化第九步:数据读写分离和廉价存储方案
突然有一天,我发现这个完美的时代即将结束,数据库的噩梦再次出现在我面前 。因为添加了太多的webserver,连接到数据库的资源还是不够 。此时,数据库已经被划分到不同的表中 。当你开始分析数据库的压力时,你可能会发现数据库的读写比很高 。这时候你通常会想到数据读写分离的方案 。当然,实施这个方案并不容易 。此外,存储在数据库中的一些数据可能被发现是浪费的,或者占用了太多的数据库资源 。所以这个阶段可能形成的架构演进是实现数据读写分离,同时编写一些更便宜的存储方案,比如BigTable 。


推荐阅读