大型网站技术架构(一):架构演变过程和架构体系

来源:互联网 发布:matlab退火算法 编辑:程序博客网 时间:2024/05/29 10:48

一、大型网站架构演化

大型网站架构主要解决因庞大的用户、高并发的访问和海量的数据而引发的网站系统问题。

演化历程如下:

阶段 内容 初始阶段 应用程序、数据库、文件等所有资源都在一台服务器上 应用服务和数据分离 整个网站使用三台服务器:应用服务器、文件服务器和数据库服务器。 应用服务器:处理大量的业务逻辑,需要更快跟强大的CPU; 数据库服务器:快速磁盘检索和数据缓存,需要更快的硬盘和更大的内存; 文件服务器:存储大量用户上传的文件,需要更大的硬盘 使用缓存 使用集群的方式,部署大内存的服务器作为专门的缓存服务器,有效缓解数据访问压力 使用应用服务器 通过负载均衡调度服务器,将用户浏览器的访问请求分发到应用服务器集群中的任一台服务器上,缓解应用服务器的压力 数据库读写分离 配置两台数据库主从关系。应用服务器在写数据时,访问主数据库,主数据库通过主从复制机制将数据库同步到从数据库;应用服务器在读数据时,直接访问从数据库。这样就改善了数据库负载压力。 使用反向代理和CDN CDN和反向代理都是基于缓存,获取数据,直接将数据返回给用户。既加快了用户访问速度,又减轻后端服务器的负载压力。 使用分布式文件系统和分布式数据库系统 使用NoSQL和搜索引擎 业务拆分 分布式服务

二、网站架构模式

为解决大型网站面临的高并发访问、海量数据处理等问题,逐渐会出现很多解决方案,而当这些解决方案被更多网站重复使用时,就逐渐形成了架构模式。以下是常见的架构模式:

架构模式 说明 分层 将系统在横向维度上切分成几个部分,每个部分负责相对比较单一的职责。 分割 在纵向方面对某一层的不同业务进行分割,形成相对独立的模块。 分布式 将不同模块部署在不同的服务器上,通过远程调用协同工作 集群 将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。 缓存 将数据存放在距离计算最近的位置以加快处理速度 异步 业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。在单一服务器内通过多线程共享队列实现异步,在分布式系统中通过分布式消息队列实现异步。异步架构是典型的生产者消费者模式。 冗余 将服务器的数据进行冗余备份,当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上。 自动化 包括发布过程自动化、自动化代码管理、自动化测试、自动化安全检测、自动化部署、自动化报警、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源等。 安全 关于网站的安全的一套完整技术体系。

三、核心架构要素

要素 衡量标准 性能 响应时间、TPS、系统性能计数器等 可用性 假设系统中任何一台或者多台服务器宕机时,以及出现各种不可预期的问题时,系统整体是否依然可用 伸缩性 是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中课容纳的总的服务器数量是否有限制。 可扩展性 在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。 安全性 针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。

(一)高性能

性能测试指标

指标 内容 响应时间 应用执行一个操作需要的时间 并发数 系统能同时处理请求的数目 吞吐量 单位时间内系统处理的请求数量,TPS每秒事务数,HPS每秒HTTP请求数,QPS每秒查询数 性能计数器 描述服务器或操作系统性能的一些数据指标

性能测试方法:性能测试、负载测试、压力测试、稳定性测试

优化策略:Web前端性能优化、应用服务器性能优化、存储服务器性能优化

1、Web前端性能优化

Web前端性能优化 方法 浏览器访问优化 减少http请求;使用浏览器缓存;启用压缩;CSS放在页面最上面、JavaScript放在页面最下面;减少Cookie传输 CDN加速 内容分配网络,将数据缓存在离用户最近的地方,使用户以最快速度获取数据。缓存的一般是静态资源,如图片、文件、CSS、script脚本、静态网页等。 反向代理 在网站机房一侧,代理网站web服务器接收http请求

2、应用服务器性能优化

应用服务器性能优化 方法 分布式缓存 (1)以JBoss Cache为代表的需要更新同步的分布式缓存(2)以Memcached为代表的不互相通信的分布式缓存 异步操作 使用消息队列将调研异步化 使用集群 使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理 代码优化 涉及到多线程、资源复用、数据结构、垃圾回收

3、存储服务器性能优化

  • 使用固态硬盘代替机械硬盘

  • 使用LSM树(NoSQL中的数据结构)代替B+树(关系型数据库的数据结构)

  • 使用HDFS(Hadoop分布式系统)代替RAID技术

(二)高可用

自上而下,网站架构基本分层为:应用层、服务层、数据层

1、在应用层,可通过以下方式,提供可用性。

  • 通过负载均衡进行无状态服务的失效转移

  • 应用服务器集群的Session管理

2、在服务层,有以下高可用的服务策略。

  • 分级管理

    低优先级的服务通过启动不同的线程或部署在不同的虚拟机上进行隔离,而高优先级的服务则需要部署在不同的物理机上,核心服务和数据甚至需要部署在不同地域的数据中心。

  • 超时设置

    在应用程序中设置服务调用的超时时间,一旦超时,通信框架就抛出异常,应用程序根据服务调度策略,可选择继续重试或将请求转移到提供相同服务的其他服务器上。

  • 异步调用

    应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。

  • 服务降级

    降级有两种手段:拒绝服务及关闭服务

    拒绝服务:拒绝低优先级应用的调用,减少服务调用并发数

    关闭功能:关闭部分不重要的服务

  • 幂等性设计

3、数据层

CAP原理:一个提供数据服务的存储系统无法同时满足数据一致性(Consistency)、数据可用性(Availibility)、分区耐受性(Patition Tolerance)

数据备份使用Master-Slaver同步机制。

(三)伸缩性

1、网站架构的伸缩性设计

  • 根据功能进行物理分离实现伸缩

  • 单一功能通过集群实现伸缩

2、应用服务器集群的伸缩性设计

  • HTTP重定向负载均衡

  • DNS域名解析负载均衡

  • 反向代理负载均衡

  • IP负载均衡

  • 数据链路层负载均衡

3、分布式缓存集群的伸缩性设计

以Memcached为代表分布式缓存集群,使用分布式缓存的一致性Hash算法,代替路由算法。

4、数据存储服务器集群的伸缩性设计

采用数据库主从读写分离、数据分库。

对于关系型数据库,采用Cobar做集群的伸缩;
对于非关系的、分布式的数据库,也就是NoSQL数据库,可以使用Apache HBase,进行数据操作和集群伸缩。

(四)可扩展

利用分布式消息队列,如Apache ActiveMQ,降低系统耦合性。

(五)安全

了解以下web攻击:

  • XSS攻击:跨站点脚本攻击(Cross Site Script)
  • 注入攻击
  • CSRF攻击:跨站点请求伪造(Cross Site Request Forgency)

信息加密技术:

  • 单向散列加密
  • 对称加密
  • 非对称加密
0 0