大型网站架构系列笔记(二)——大型网站架构模式

大型网站架构系列笔记(二)——大型网站架构模式


——本文结合《大型网站技术架构》(李智慧著)一书,与自身经验撰写,仅做学习使用。如有侵权,请联系本人。

大型网站架构模式

1.分层

分层在计算机网络应用中十分常见,如典型的OSI七层网络结构:在这里插入图片描述

  • 除此之外还有很多分层结构,如网络系统常用的核心层、汇聚层、接入层;RUP典型分层方法中的应用层、专业业务层、中间件层、系统软件层等等。-
  • 分层主要是将一个复杂的计算机网络分开管理,各个层实现相应的功能,便于管理和标准的实行。
    在大型网站架构中也采用分层结构,将其分为应用层、服务层、数据层。
  • 应用层:
    应用层负责具体的业务与视图展示,如界面展示、搜索功能等。
  • 服务层:
    为上层(应用层)提供相应的服务支持,如用户管理服务等。
  • 数据层:
    提供数据的存储与访问服务,如数据库、缓存、文件、搜索引擎等。
    值得说明的是:
    1.在实际的应用中,在大的分层结构内部还可以继续分层,如应用层可以细分为视图层(美工负责)与业务逻辑层(工程师负责)。
    2.分层架构师逻辑分层,不是物理分层,多层结构可以在同一物理机器上,也可以在不同的物理机器上,按照实际业务需求进行部署。
    3.分层后必须合理规划层次边界与接口,开发中避免跨层次调用以及逆向调用。

2.分割与分布式

分层是将软件在横向方面进行切分,分割是将软件在纵向方向切分。
当网站越来越大,功能越来越复杂的时候,子模块与数据处理种类也越来越多。此时,按照不同的业务,将庞大的业务分割为一个个高内聚低耦合的模块,既有利于网站的开发维护,也便于不同模块的分布式部署,提高网站在大并发量下的表现。
常用的分布式方案有以下几种

  • 分布式应用于服务
    将分层和分割后的应用于服务模块分布式部署。用此种方式除了可以改善网站性能、加快开发速度、减少数据库连接消耗;更重要的是可以使不同的应用复用共同的服务,便于业务的扩展。
  • 分布式数据和存储
    将数据进行分布式存储,以便于处理海量的数据。
  • 分布式静态资源
    将网站的静态资源如JS,CSS,图片等资源独立分布式存储,既可以减轻应用服务器的负载压力,也可以加快并发加载速度。
  • 分布式计算
    随着网站业务的增大,需要处理的业务也非常庞大,目前网站普遍使用Hadoop以及MapReduce等分布式计算框架进行批处理计算。其最显著的特点是移动计算,而不是移动数据本身,采用将计算程序分发到数据所在位置的形式实现分布式计算。

3.集群

采用集群的方式可以提高系统的可用性,当需要提供更多的服务时,只需要在集群中增加新的主机即可,当某台服务器出现故障的时候,通过负载均衡,将请求转发到其他服务器上进行处理,实现业务上的无感知。

4缓存

根据网站访问特点,80%的访问量集中在20%的用户上,或者说80%的访问量集中在20%的内容上,可以采用缓存服务器缓存核心用户的数据,改善网站访问速度。缓存是改善软件性能的第一手段,缓存在网站的数据库架构中非常重要。常见的缓存有以下几种。

  • CDN加速
    CDN即内容分发网络,它将源站文件内容分发至最接近用户的节点,使用户可就近获取所需内容。或者缓存一些静态资源,将网站的图标、图片、文字、动画、脚本等进行缓存,静态内容传递了网站的核心价值。可通过CDN加速极大减少网站的响应时间,显著提升网页用户体验。
  • 反向代理
    反向代理部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到反向代理服务器,若反向代理服务器中有相关缓存,直接返回给用户。加快了用户访问速度,提升了用户体验。
  • 本地缓存
    应用程序在本机内存中缓存热点数据,应用程序可以直接在本机内存中访问数据,而无需访问数据库服务器,进一步提高了访问速率。
  • 分布式缓存
    由于大型网站或应用的数据量庞大,单靠本地缓存是不现实的,所以需要分布式缓存配合使用,将数据缓存在一个专门的分布式缓存集群中,通过网络访问缓存数据。

5异步

计算机软件发展的一个重要目标和驱动力是降低软件耦合性。大型网站架构中,系统解耦合的手段除了前 面提到的分层、分割、分布等,异步是一个重要手段,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。
在单一服务器内部可通过多线程共享内存队列的方式实现异步,处在业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理。异步架构是典型的生产者消费者模式,两者不存在直接调用,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响,这对网站扩展新功能非常便利。采用异步消息队列有以下优点:

  • 提高系统可用性
    消费者服务器发生故障,数据会在消息队列服务器中存储堆积, 生产者服务器可以继续处理业务请求,系统整体表现无故障。消费者服务器恢复正常后, 继续处理消息队列中的数据。
  • 加快网站响应速度
    处在业务处理前端的生产者服务器在处理完业务请求后,将数据写入消息队列,不需要等待消费者服务器处理就可以返回,响应延迟减少。
  • 消除并发访问高峰
    用户访问网站是随机的,存在访问高峰和低谷,当访问量突然增大时(如抢购、开放预订时),可能会造成整个网站负载过重,响应延迟,严重时甚至会出现服务宕机的情况。使用消息队列将突然增加的访问请求数据放入消息队列中,等待消费者服务器依次处理,就不会对整个网站负载造成太大压力。

6冗余与备份

一个成熟的网站需要保持高可用性,需要实现7*24小时不间断运行,但是服务器是会出现故障的,要在服务器出现故障的时候继续提供服务,就需要服务器冗余运行,做好数据的备份与存档,当某一台或者某一部分的服务器宕机时,可以由其他服务器继续提供服务。

7自动化

在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前大型网站的自动化架构设计主要集中在发布运维方面。
网站的自动化管理包含以下几个部分:

  • 发布过程自动化
  • 代码管理自动化
  • 测试自动化
  • 安全监测自动化
  • 部署自动化
  • 自动化监控与报警
  • 自动化失效转移与恢复
  • 自动化分配资源

8安全性

互联网的开放特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式:通过密码和手机校验码进行身份认证;登录、交易等操作需要对网络通信进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;为了防止机器人程序滥用网络资源攻击网站,网站使用验证码进行识别;对于常见的用于攻击网站的XSS攻击、SQL注入、进行编码转换等相应处理;对于垃圾信息、敏感信息进行过滤;对交易转账等重要操作根据交易模式和交易信息进行风险控制。

猜你喜欢

转载自blog.csdn.net/qq_38470434/article/details/105997991