大型网站技术架构01大型网站架构的演化、大型网站架构模式

大型网站架构演化

  1. 大型网站软件系统的特点:

    1). 高并发,大流量 (集群)

    2). 高可用:7*24 (集群)

    3). 海量数据 (集群,分布式)

    4). 用户分布广泛,网络情况复杂 (缓存)

    5). 安全环境恶劣 (安全)

    6). 需求快速变更,发布频繁 (可扩展)

    7). 渐进式发展 (可扩展,可伸缩)

  2. 大型网站架构演化发展历程

    1). 初始阶段的网站架构:汇集各种免费开源软件及一台廉价服务器

    2). 应用服务和数据服务分离:

     a. 应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU
    
     b. 数据库服务器需要更快速磁盘检索和数据缓存,因此需要更快的磁盘和更大的内存
    
     c. 文件服务器需要存储大量的用户上传的文件,因此需要更大硬盘
    

    3). 使用缓存改善网站性能:二八定律,本地缓存与远程分布式缓存

    4). 使用应用服务器集群改善网站的并发处理能力

    5). 数据库读写分离

    6). 使用反向代理和CDN加速网站相应:CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则

      部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。
    
      使用CDN和反向代理的目的,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。
    

    7). 使用分布式文件系统和分布式数据库系统:分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大时才使用。不到不得已,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部

      署在不同的物理服务器上。
    

    8). 使用NoSQL和搜索引擎:应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

    9). 业务拆分

    10). 分布式服务

  3. 大型网站架构演化的价值观

    1). 大型网站架构技术的核心价值是随网站所需灵活应对:大型网站架构技术的核心价值不是从无到有搭建一个大型网站,而是能够伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站。在这个漫长的技术

      演化过程中,不需要放弃什么,不需要推翻什么,不需要剧烈的革命,就那么润物细无声地把一个只有一台服务器,几百个用户的小网站演化成一个几十万台服务器,数十亿用户的大网站。
    

    2). 驱动大型网站技术发展的主要力量是网站的业务发展

  4. 网站架构设计的误区

    1). 一味追随大公司的解决方案

    2). 为了技术而技术

    3). 企图用技术解决所有问题:技术是用来解决业务问题的,而业务问题,也可以通过业务的手段去解决。

大型网站架构图(来源:http://www.cnblogs.com/GmrBrian/p/3777076.html):

大型网站架构模式

  1. 网站架构:分层 、分割、分布式、集群、缓存、异步、冗余、自动化、安全

  2. 网站架构模式:

    1). 分层 : 三层结构(应用层,服务层,数据层)可以部署在同一台物理机器上,但随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层机构分别部署在不同的服务器上,使网站拥有更多的计算资源

              以应对越来越多的用户访问。所以虽然分层架构模式最初的目的是规划软件清晰的逻辑结构便于开发维护,但在网站的发展过程中,分层结构对网站支持高并发向分布式方向发展至关重要。因此,在网
          站规模还很小的时候就应该采用分层的架构,这样将来网站做大才能够更好地应对。
    

    2). 分割:如果说分层是将软件在横向方面进行切分,那么分割就是在纵向方面对软件进行切分。网站越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合

              的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
    

    3). 分布式 :对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用更多的计算机完成同样的功能,

                 计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。
             分布式解决网站高并发问题带来的问题:
    
             a. 分布式意味着服务调用必须通过网络,这可能会对性能造成比较严重的影响
    
             b. 服务器越多,服务器宕机的概率也就越大,一台服务器宕机造成的服务器不可用会导致很多应用不可访问,使网站可用性降低
    
             c. 数据在分布式的环境中保持数据一致性也非常困难,分布式事务也难以保证,这对网站业务正确性和业务流程有可能造成很大影响
    
             d. 分布式导致网站依赖错综复杂,开发管理维护困难
    
             在网站应用中,常用的分布式方案有以下几种:
    
             a. 分布式应用和服务器:将分层和分割后的应用和服务模块分布式部署,除了可以改善网站性能和并发性、加快开发和发布速度、减少数据库连接资源消耗外;还可以使用不同应用复用共同的服务,便
    
                                             于业务功能扩展。
    
             b. 分布式静态资源:网站静态资源如JS,CSS,Logo图片等资源能独立分布式部署,并采用独立的域名,即人们常说的动静分离。静态资源分布式部署可以减轻应用服务器的负载压力;通过独立域名加
    
                                       快浏览器并发加载的速度;由负责用户体验的团队进行开发维护有利于网站分工合作,便于不同技术工种术业有专攻。
    
             c. 分布式数据和存储:
    
             d. 分布式计算:严格来说,应用、服务、实时数据处理都是计算,网站除了要处理这些在线业务,还有很大一部分用户没有直观感受的后台业务要处理,包括搜索引擎的索引构建、数据仓库的数据分析统计等。
    
                                  这些业务的计算规模非常庞大,目前网站普遍使用Hadoop及其MapReduce分布式计算框架进行此类批处理计算,其特点是移动计算而不是移动数据,将计算程序分发到数据所在的位置以加速
    
                                  和分布式计算。
    
             e. 分布式配置:支持网站线上服务器配置实时更新
    
             f. 分布式锁:分布式环境下实现并发和协同
    
             g. 分布式文件:支持云存储
    

    4). 集群 :多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。

    5). 缓存:缓存是改善软件性能的第一手段,现代CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。

             CDN:即内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达他的网络服务器商那里,在这里缓存网站的一些静态资源(较少变化的数据)。可以就近已最快的速度返回给用户,如视频
                  网站和门户网站会将用户访问量最大的热点内容缓存在CDN。
    
         反向代理:反向带来属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源。无需将请求继续转发给应用服务器就能返回
    
                       给用户。
    
         本地缓存:在应用服务器本身缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。
    
         分布式缓存:将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。
    
         使用缓存有两个前提条件,
    
     一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;
    
         二是数据在某个时间段内有效,不会很快过期,否则缓存的数据就会因已失效而产生脏读,影响结果的正确性。网站应用中,缓存除了可以加快数据访问速度,还可以减轻后端应用和数据存储
    
         的负载压力,这一点对网站数据库架构的至关重要,网站数据库几乎都是按照有缓存的前提进行负载能力设计的。
    

    6). 异步:业务之间的消息传递不是同步调用的,而是将一个业务操作分成多个阶段,每个阶段通过共享数据的方式异步执行进行协作。在单一服务器内部可以通过多线程共享内存队列的方式实现异步,处理业务操作前面的线程

             将输出写入到队列,后面的线程从队列中读取数据进行处理;在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看做内存队列的分布式部署。
         异步架构师典型的生产者消费者模式,两者不存在直接调用,只要保持数据结构不变,彼此功能实现可以随意变换而不互相影响,这对网站扩展新功能非常便利。除此之外,使用一部消息队列还有以下特性:
    
         a. 提高系统可用性
    
         b. 加快网站相应速度:处在业务处理前端的生产者服务器在处理完业务请求后,将数据写入消息队列,不需要等待消费者服务器处理就可以返回,响应延迟减少。
    
         c. 消除并发访问高峰:使用消息队列将突然增加的访问请求数据放入消息队列中,等待消费者服务器一次处理,就不会对整个网站负载造成太大压力。
    
         需要注意,使用异步方式处理业务可能会对用户体验、业务流程造成影响,需要网站产品设计方面的支持。
    

    7). 冗余:网站需要7*24小时连续运行。想要保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程序的服务器冗余运行,数据冗余备份,这样某台服务器宕机时,可以将其上的数据和

              数据访问迁移到其他机器上。
          访问和负载很小的服务也必须部署至少两台服务器构成的一个集群,其目的就是通过冗余实现服务高可用。数据库除了定期备份,存档保存,实现冷备份外,为了保证在线业务高可用,还需要对数据库主从分离,实时同
    
          步实现热备份。有些时候 ,还需要部署灾备数据中心。
    

    8). 自动化:发布过程自动化,自动化代码管理,自动化测试,自动化安全检测,自动化部署,自动化监控,自动化报警,自动化失效转移,自动化失效恢复,自动化降级,自动化分配资源

    9). 安全:

             a. 通过密码和手机验证码进行身份认证
         b. 登陆、交易等操作需要对网络通信进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理
    
         c. 为了防止机器人程序滥用网路资源攻击网站,网站使用验证码进行识别
    
         d. 对于常见的用于供给网站的XSS攻击、SQL注入,进行编码转换等响应的处理
    
         e. 对于垃圾信息、敏感信息进行顾虑
    
         f. 对交易转账等重要操作根据交易模式和交易信息进行风险控制。