15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 详解大型网站架构的组成

详解大型网站架构的组成

时间:2023-09-30 12:30:02 | 来源:网站运营

时间:2023-09-30 12:30:02 来源:网站运营

详解大型网站架构的组成:

一. 大型网站架构演化

1.1 大型网站架构特点

  1. 高并发、大流量
  2. 高可用
  3. 海量数据:需要存储、管理海量数据,需要使用大量服务器。
  4. 用户分布广泛,网络情况复杂
  5. 安全环境恶劣:由于互联网开放性,使得网站容易受到攻击。
  6. 需求快速变更,发布频繁
  7. 渐进式发展
有好东西,一定想着大家。我是爱分享的Linux技术狂。大家记得关注我,也不要忘记点赞、评论、收藏。

同时也可以点击 正在跳转 我们在这里一起学习、一起进步,或者点击 C/C++Linux服务器开发/后台架构师 免费订阅一下(每晚20点免费直播学习),多一点知识,多一份收获,更多一点工资。

1.2 大型网站架构演化过程

1.初始阶段的网站架构: LAMP

2.应用服务和数据服务分离:用户越来越多导致存储空间不足,整个网站使用三台服务器,应用服务器、文件服务器和数据库服务器。

3.使用缓存改善网站性能:80%的业务访问集中在20%的数据上。可以把这一小部分数据缓存在内存中。缓存分为两种:

4.使用应用服务器集群改善网站的并发处理能力: 使用集群是网站解决高并发、海量数据问题常用的手段。增加服务器分担原来服务器的访问和存储压力。需要使用负载均衡来调度集群中的服务器,使服务压力均衡的分配到各个机器。

5.数据库读写分离:在网站用户量达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。 目前大部分主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。写数据时访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用读数据的时候,可以通过从数据库获取数据

6.使用反向代理和CDN加速网站响应:CDN和反向代理基本原理都是缓存,一方面加快数据访问速度,另一方面也减轻了后端服务器的负载压力。两者的区别是:

  1. 使用分布式文件系统和分布式数据库系统:采用业务分库手段将不同业务的数据库部署在不同的物理服务器上。 可以进行垂直拆分和水平拆分。
  2. 使用NoSQL和搜索引擎:非关系数据库是对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据库访问模块访问各种数据,减轻应用程序管理的诸多数据源麻烦。
  3. 业务拆分: 将一个网站拆分成许多不同的应用,每个应用独立部署。应用之间通过一个超链接建立关系。垂直拆分,将不相干的服务拆分出来。
  4. 分布式服务:水平拆分,将多个业务中的公共业务服务提取出来、独立部署。分布式服务通过调用共用业务服务完成具体业务操作。

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

  1. 大型网站架构技术的核心价值是随着网站所需灵活应对
  2. 驱动大型网站技术发展的主要力量是网站的业务发展

1.4 网站架构的误区

  1. 一味追求大公司的解决方案
  2. 为了技术而技术
  3. 企图用技术解决所有问题

二. 大型网站架构模式

每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你能一次又一次地使用该方案而不必做重复工作

2.1 网站架构模式

常用模式有:

1. 分层

将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整系统。

大型网站将网站系统分为:

分层好处:

挑战:

分层结构内部还可以继续分层,如应用层可以分为视图层和业务逻辑层。在物理部署上,三层结构可以部署在同一个物理机器上,但随着业务发展必须对分层的模块隔离部署

2. 分割

分割按纵向方向对软件进行切分,将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,这些单元或模块可以独立部署。存在的好处有:

3. 分布式

对于大型网站来说,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协调工作。

分布式在解决网站高并发问题的同时也带来其他问题:

分布式方案有几种:

4. 集群

集群即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。一个应用由多台服务器提供,当某台服务器发生故障时,负载均衡设备或系统的失效转移机制会将请求转发到集群中其他服务器上,使服务器故障不影响用户使用。

5. 缓存

缓存是将数据存放在距离计算最近的位置以加快处理速度、同时减轻后端应用和数据存储的负载压力。数据缓存有两个前提:

一般缓存包含多个方面:

6. 异步

计算机开发的一个重要目标和驱动力是降低软件耦合性。 系统解耦的手段除了分层、分割、分布等还有一个重要手段是异步。

单一服务通过多线程共享内存队列的方式实现异步。在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看作内存队列的分布式部署(如消息队列kafka)。

异步消息队列有以下特性:

7. 冗余

想要保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份,这样当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上。

数据库除了定期备份、存档保存,实现冷备份外,为了保证在线业务高可用,还需要对数据库进行主从分离,实现同步热备份

8. 自动化

在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。包含:发布过程自动化、自动化代码管理、自动化测试、自动化安全检查、自动化部署、自动化监控、自动化抱紧、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源。

9. 安全

可以从以下几个方面考虑:密码、手机校验码、通讯加密、敏感信息过滤、风险控制。

三. 大型网站核心架构要素

架构是最高层次的规划,难以改变的决定。这个规划和决定奠定了事物未来发展的方向和最终的蓝图。

软件架构是有关软件整体结构和组件的抽象描述,用于指导大型软件系统各个方面的设计。系统的各个重要组成部分及其关系构成了系统的架构,这些组成部分可以是具体的功能模块,也可以是非功能模块的设计与决策,他们相互关联组成一个整体,共同构成了软件系统的架构。

一般除了当前系统功能需求外, 软件架构还需要关注性能、可用性、伸缩性、扩展性和安全性5个要素。

3.1 性能

性能是网站的处理效率、通过一系列指标去衡量,重要的有响应时间、TPS、并发数、吞吐量等。

优化可以从以下几个方面进行:

  1. 浏览器端:浏览器缓存、使用页面压缩、CSS/JS合并减少HTTP次数、合理布局页面、减少Cookie传输等手段。
  2. 使用CDN:将网站静态内容分发至离用户最近的网络服务商机房。是用户通过最短访问路径获取数据。
  3. 部署反向代理:通过反向代理缓存热点文件、加快请求响应速度,减轻应用服务器负载压力。
  4. 应用服务器本地缓存和分布式缓存:通过缓存热点数据处理用户请求,加快请求处理过程,减轻数据库负载压力。
  5. 异步操作: 将用户请求发送至消息队列等待后续任务处理,而当前请求直接返回响应给用户。
  6. 集群: 在高并发请求的情况下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特性。
  7. 代码层面:使用多线程、改善内存管理等手段优化性能。
  8. 数据库端:使用索引、缓存、SQL优化等性能优化手段。

3.2 可用性

可用性:当服务器宕机的时候,服务或应用依然可用。主要衡量标准一个系统设计是否满足高可用的目标,就是假设系统中任何一台或多台服务器宕机时,已经出现各种不可预期的问题时,系统整体是否依然可用。

高可用的主要手段是冗余

3.3 伸缩性

伸缩性是指通过不断向集群加入服务器的手段来环节不断上升的用户并发访问压力和不断增长的数据存储需求。主要衡量标准是:

主要策略有:

3.4 扩展性

不同于其他架构要素主要关注非功能性需求,网站的扩展性架构直接关注网站的功能需求。网站扩展性的目的是如何设计网站架构使得其能够快速响应需求变化。主要衡量标准是:

扩展性架构的主要手段是事件驱动分布式服务

3.5 安全性

网络安全主要是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。衡量标准是针对现存和潜在的各种攻击和窃密手段,是否有可能的应对策略。

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

4.1 性能指标

1.响应时间:指应用执行一个操作需要的时间,包括从发出请求开始到收到最后响应数据所需要的时间。

2.并发数: 系统能够同时处理请求的数据,也反映了系统的负载特性。

3.吞吐量: 指单位时间内系统处理的请求数量,提现系统的整体处理能力。如:“请求数/秒”、“页面数/秒”。

4.性能测试器: 描述服务器或操作系统性能的一些数据指标,包括System Load、对象与线程数、内存使用、CPU使用、磁盘和网络I/O等指标。

4.2 性能测试方法

性能测试反应系统在实际生产环境中使用时,随着用户并发访问数量的增加,系统的处理能力。与性能对应的是用户访问的等待时间(系统响应时间)。

  1. 性能测试: 对系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内是否达到性能预期。
  2. 负载压力: 对系统不断增加并发请求以增加系统压力,直到系统的某项或多项性能达到安全临界值。如某种资源已经饱和状态,这时继续对系统施加压力,系统的处理能力不但不能提高,反而下降。目的是找到系统最大负载点
  3. 压力测试: 超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。找到系统的崩溃点
  4. 稳定性测试: 被测试系统在特定硬件、软件、网络环境下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定。

4.3 web前端性能优化

1.浏览器访问优化

2.CDN加速:本质上是一个缓存

3.反向代理

4.4 应用服务器性能优化

应用服务器是处理网站业务的服务器,其主要优化手段有缓存、集群、异步等。

1. 分布式缓存

缓存指将数据存储在相对较高访问速度的存储介质中,以供系统处理,缓存的本质是一个内存Hash表,读写时间复杂度为O(1)。缓存有以下优点:

缓存主要用来存储那些读写比很高、很少变化的数据。应当合理使用缓存:

缓存雪崩本质是一些访问请求不经过Redis而突然全部请求到数据库,导致数据库压力陡增,造成压力太大而宕机。 一般有两种原因导致:
  1. 缓存服务崩溃或不存在备库,某台缓存服务器挂了。----解决方案是冗余、热备服务器。
  2. 很多缓存数据都设置了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。 -----解决方案:将缓存失效时间分散开(因过期时间)
分布式缓存架构分为两种:

远程通信设计需要考虑两个元素:

Memcached采用TCP协议,其序列化协议则是一套基于文本的自定义协议,以命令关键字开头,后面是一组命令字操作数。

有好东西,一定想着大家。我是爱分享的Linux技术狂。大家记得关注我,也不要忘记点赞、评论、收藏。

同时也可以点击 正在跳转 我们在这里一起学习、一起进步,或者点击 C/C++Linux服务器开发/后台架构师 免费订阅一下(每晚20点免费直播学习),多一点知识,多一份收获,更多一点工资。

2. 异步操作

使用消息队列调用异步化,可改善网站的扩展性,还可以改善网站的性能。

3. 使用集群

使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特性。

4. 代码优化

合理优化业务代码,可以很好地改善网站性能。

  1. 使用多线程,提高并行处理能力。
  2. 资源复用:要尽量减少那些开销很大的资源的创建和消费,提高响应速度和减少资源开销。资源复用主要两种模式:单例(数据源、Dao等)和对象池(数据库连接池、线程池、通信连接池等)
  3. 数据结构和算法:使用合理的数据结构和算法有利于提高代码性能。
  4. 垃圾回收: 通过程序调优、参数调优来提高垃圾回收性能。

5. 存储优化

  1. 机械键盘: 通过马达驱动头臂带动磁头到指定的磁盘位置访问数据。数据连续访问和随机访问移动次数相差巨大,性能表现也比较差。
  2. 固态硬盘: 没有机械装置,存储在在可记忆的硅晶体上,可以像内存一样快速随机访问。
  3. B+树: 为了改善数据访问特性,加快速度检索速度,需要保证数据在不断更新、插入、删除后依然有序,传统的做法采用+树。
  4. LSM: 可以看作是一个N阶合并树。数据写操作(包括插入、修改、删除)都在内存进行,并且创建一个新记录。(修改会记录新的数据值,删除会记录一个删除标志),这些数据在内存中仍然是一颗排序树,当数据量超过设定的内存阈值后,会将这棵排序树和磁盘最新的排序树合并。当这棵排序树的数据量超过设定阈值后和磁盘上的下一级排序树合并。合并过程中会使用最新更新的数据覆盖旧的数据。在需要进行读操作时,总是从内存中的排序树开始搜索。如果没有找到,就从磁盘上的排序树顺序查找。
  5. RAID
6.HDFS: 按块(block)为基本单位存储,一个块数据三个备份。

五. 高可用架构

5.1 高可用架构

可用性度量:4个9

网站不可用时间(故障时间)= 故障修复时间点 - 故障发现(报告)时间点 网站年度可用指标 = (1 - 网站不可用时间/年度总时间) * 100%
高可用架构设计的目的就是抱着服务器硬件故障时服务器依然可用、数据依然保存并能够被访问。主要的手段是数据和服务的冗余备份及失效转移

1 高可用应用

集群中的session管理方式:

2 高可用服务

也是基于服务的无状态,还有几点高可用服务策略:

3 高可用数据

高可用数据有以下几个层面的含义:

保证数据存储的高可用手段主要有数据备份失效转移机制

CAP原理:系统无法同时满足数据一致性(Consistency)、数据可用性(Availability)和分区耐受性(Partition Tolerance,系统具有跨网络分区的伸缩性)

数据一致性分为如下几点:

5.2 软件质量保证

网站发布

  1. 网站发布
  2. 自动化测试
  3. 预发布验证:预发布服务器是一种特殊的服务器,它和线上的正式服务器唯一的不同就是没有配置在负载均衡服务器上,外部用户无法访问。
  4. 代码控制:主干开发分支发布和分支开发主干发布。
  5. 自动化发布:采用火车模型,将每个应用的发布过程看做一次火车旅程,火车定点运行,期间有若干站点,每一站都进行例行检查,不通过的项目下车,剩下的项目继续坐火车旅行,直到终点。
  6. 灰度发布:将集群分为若干部分,每天只发布一部分服务器,观察运行稳定没有故障,第二天继续发布一部分服务器,如果有问题则回滚。

运行监控

  1. 日志采集
  • 监控管理
  • 六. 网站的伸缩性架构

    所谓的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或缩小网站的服务处理能力。

    网站伸缩性设计可分为两类:

    1. 应用服务器集群的伸缩性设计

    应用服务器应该设置为无状态,任何一台服务器的处理结果都是相同的。这样用户请求按照某种规则分发到集群的不同服务器上,可构成一个应用服务器集群。常用的负载均衡设备有:

    负载均衡算法:

    2. 分布式缓存集群的伸缩性设计

    和应用服务器集群不同,分布式缓存服务器集群中不同服务器缓存的数据各不相同,是不对等的,缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须找到缓存有需要数据的服务器,才能访问。这个特点严重制约了分布式缓存集群的伸缩性设计。

    分布式缓存集群伸缩性设计的最主要目标:新上线的缓存服务器对真个分布式缓存集群影响最小,即新加入缓存服务器后应使得整个服务器集群已经缓存的数据尽可能被访问到。

    3. 数据存储服务器集群的伸缩性设计

    关系数据库可以使用伸缩性主要有两种:

    1. 主从读写分离
    2. 数据库分库:将不同业务数据库表部署在不同的数据库集群上,可以使用分布式关系数据库访问代理Cobar
    Cobar伸缩性:

    NoSql集群放弃了关系数据库以关系代数为基础的结构化查询语言(SQL)和事务一致性保证(ACID),强化了高可用性可伸缩性

    七.网站的可扩展性架构

    扩展性是一种开发封闭的设计原则,指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。

    构造可扩展的网站架构有两种方式:

    1. 基于事件驱动架构----利用分布式消息队列降低耦合性
    2. 基于分布集群架构----水平拆分和纵向拆分
    很多功能集中在一个模块中的问题:

    1. 编译、部署困难----慢
    2. 代码分支管理困难----多人开发、冲突多
    3. 数据库连接耗尽
    4. 新增业务困难---修改一行对其他影响都很大
    分布式服务框架还需支持如下特性:

    1. 负载均衡
    2. 失效转移
    3. 高效的远程通信
    4. 整合异构系统
    5. 对应用最小侵入
    6. 版本管理
    7. 实时监控

    八. 网站的安全架构

    常见攻击手段:

    防御手段:

    有好东西,一定想着大家。我是爱分享的Linux技术狂。大家记得关注我,也不要忘记点赞、评论、收藏。

    同时也可以点击 正在跳转 我们在这里一起学习、一起进步,或者点击 C/C++Linux服务器开发/后台架构师 免费订阅一下(每晚20点免费直播学习),多一点知识,多一份收获,更多一点工资。







    关键词:组成,大型

    74
    73
    25
    news

    版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

    为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
    关闭