网站架构总结

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

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

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

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

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

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

    5). 数据库读写分离

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

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

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

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

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

    9). 业务拆分

    10). 分布式服务

  2. 网站架构模式:

    分层 、分割、分布式、集群、缓存、异步、冗余、自动化、安全

  3. 瞬时响应:网站的高性能架构

    1). Web前端性能优化

     a. 浏览器访问优化:
    
     b. CDN加速:
    
     c. 反向代理:缓存静态资源
    

    2). 应用服务器性能优化:

      a. 分布式缓存:网站性能优化的第一定律:优先考虑使用缓存优化性能。
    
      b. 异步操作:使用消息队列将调用异步化,可改善网站的扩展性。事实上使用消息队列还可改善网站系统的性能。消息队列具有很好的削峰作用。需要适当修改业务流程进行配合。
    
      c. 使用集群
    
      d. 代码优化:多线程,资源复用(单例,线程池等),数据结构:hash等,垃圾回收
    
  4. 万无一失:网站的可用性架构

    1). 高可用的应用:

      a. 通过负载均衡进行无状态服务的失效转移:对于应用服务器集群,实现这种服务可用状态实时监测、自动转移失败任务的机制是负载均衡。负载均衡服务器通过心跳监测机制判断服务器是否可用。
    
      b. 应用服务器集群的Session管理:利用独立部署的Session服务器(集群)统一管理Session应用服务器每次读写Session时,都访问Session服务器。
    

    2). 高可用的应用:

      a. 分级管理:运维上将服务器进行分级管理,核心应用和服务优先使用更好的硬件,在运维响应速度上也格外迅速。同时在服务部署上也进行必要的隔离,避免故障的连锁反应。低优先级的服务通过启动不同的线程
      或者部署在不同的虚拟机上,核心服务和数据甚至要部署在不同的地址数据中心。
    
    b. 超时设置: c. 异步调用: d. 服务降级:在网站访问高峰期,为了保证核心应用和功能的正常运行,需要对服务进行降级。降级有两种手段:拒绝服务及关闭服务。
     拒绝服务:拒绝低优先级应用的调用,减少服务调用并发数,确保核心应用正常使用;或者随机拒绝部分请求调用,节省资源,让另一部分请求得以成功,避免要死大家一起死的惨剧。
    
     关闭功能:关闭部分不重要的服务,或者服务内部关闭部分不重要的功能,以节省系统开销,为重要的服务和功能让出资源。
    
    e. 幂等性设计:保证服务重复调用的和调用一次产生的结果相同,即服务具有幂等性。

    3). 高可用的数据:保证数据存储高可用的手段主要是数据备份和失效转移机制。

    4). 高可用网站的软件质量保证:

     a. 网站发布:通常通过发布脚本来完成发布。发布过程中,每次关闭的服务器都是集群中的一小部分,并在发布完成后立即可以访问,因此整个发布过程不影响用户使用。
    
     b. 自动化测试:自动化测试工具可以一键完成系统部署,测试数据生成、测试执行、测试报告生成等全部测试过程
    
     c. 预发布验证:沙箱测试,与真实线上环境尽量保持一致。
    
     d. 代码控制:a. 主干开发,分支发布:b. 分支开发,主干发布:
     这两种方式各有优缺点。主干开发,分支发布,主干代码反应目前整个应用的状态,一目了然,便于管理和控制,也利于持续集成。分支开发,主干发布方式,各个分支独立进行,互不干扰,可以使不同发布周期的开发
    
     在同一应用中进行。
    
    e. 自动化发布:人干预越少,自动化程度越高,引入故障的可能性就越小,火车准点到达,大家按时下班的可能性就越大。 f. 灰度发布:

    5). 网站运行监控:不允许没有监控的系统上线。

    a. 监控数据采集:用户行为日志收集;服务器性能监控
    
    b. 监控管理:系统报警;失效转移;自动优雅降级
    
  5. 永无止境:网站的伸缩性架构

    1). 应用服务器集群的伸缩性设计:DNS域名解析负载均衡;反向代理负载均衡;数据链路层负载均衡,例如:LVS(Linux Virtual Server)

    2). 负载均衡算法:轮询;加权轮询;随机;最少连接;源地址散列

    3). 数据存储服务器集群的伸缩性设计:关系型数据库集群的伸缩性设计(主从读写分离;数据分库);NoSQL数据库的伸缩性设计

  6. 随需应变:网站的可扩展性架构

    1). 构架可扩展的网站架构:开发低耦合系统是软件设计的终极目标之一。

      软件架构师最大的价值不在于掌握多少先进的技术,而在于将具有将一个大系统分成N个耦合的子模块的能力,这些子模块包含横向的业务模块,也包括纵向的基础技术模块。
    

    2). 利用分布式消息队列降低系统耦合性:事件驱动架构(发布与订阅);分布式消息队列

    3). 利用分布式服务打造可复用的业务平台:Web Service与企业级分布式服务;分布式服务框架设计(dubbo)

  7. 固若金汤:网站的安全架构

    1). 攻击与防御:详见:http://www.cnblogs.com/Jtianlin/p/5136340.html

    2). 信息加密技术及密匙安全管理:单向散列加密;对称加密;非对称加密;密匙的安全管理: