大型网站软件系统架构演进过程

在我们的生活中,通常会使用大型网站系统,比如购物网站淘宝,京东,阿里1688;大型搜索引擎网站百度,社交类的如腾讯旗下的微信,QQ及新浪旗下的微博等,他们通常都有一下特点:

高并发、大流量:这些系统必须能够处理成千上万甚至数百万的并发用户请求,以及持续的大流量访问。例如,Google、腾讯等网站每天可能需要应对亿级别的页面浏览量。

高可用性:系统设计需要保证7×24小时不间断的服务,以确保任何时候用户都能访问。这通常意味着需要有冗余的服务器集群、负载均衡、故障切换等机制来防止服务中断。

海量数据:大型网站需要存储和管理巨大的数据量,包括文本、图像、视频和其他多媒体内容。这些数据通常分布在多个服务器或数据中心中,以提高存储效率和数据访问速度。

用户分布广泛,网络情况复杂:互联网用户遍布全球,网络状况可能因地理位置、互联网服务提供商(ISP)等因素而有很大差异。大型网站必须优化其架构以适应各种网络条件。

安全环境恶劣:由于互联网的开放性,网站容易遭受各种形式的攻击,如DDoS攻击、SQL注入、跨站脚本(XSS)等。因此,安全防护措施是必不可少的。

需求快速变更,发布频繁:与传统软件开发不同,大型网站需要快速响应市场变化和用户需求,这要求系统具有高度的灵活性和可扩展性,并能频繁更新和迭代。

渐进式发展:许多大型网站都是从小规模开始,逐步增长到大规模。因此,系统架构需要能够平滑地从较小的规模扩展到较大的规模,同时保持性能和稳定性。

为了应对上述的特点,大型网站通常采用分布式计算、微服务架构、容器化、云服务、缓存策略、数据库分片、CDN(Content Delivery Network)等技术和方法来构建其基础架构。

大型网站的初期配置:

网站的初期,用户访问量相对比较少,只需要一台服务器就绰绰有余,应用程序、数据库、文件等所有的资源都在一台服务器上。

图片

应用服务和数据库服务分离:

出现的问题:

随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。

解决办法:

这时就需要将应用和数据分离。应用和数据分离后整个网站使用三台服务器:应用服务器、文件服务器和数据库服务器。

这三台服务器对硬件资源的要求各不相同,应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量用户上传的文件,因此需要更大的硬盘。

图片

应用和数据分离后,不同特性的服务器承担不同的服务角色,网站的并发处理能力和数据存储空间得到了很大改善,支持网站业务进一步发展。但是随着用户逐渐增多,网站又一次面临挑战:数据库压力太大导致访问延迟,进而影响整个网站的性能,用户体验受到影响。这时需要对网站架构进一步优化。

使用缓存改善网站的性能:

出现的问题:

大型网站系统访问的特点,80%的业务访问集中在20%的数据上。

解决办法:

既然大部分的业务访问集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,是不是就可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的写入性能了呢?

网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情况。远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务.

图片

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

出现的问题:

一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。

解决方案:

使用集群是网站解决高并发、海量数据问题的常用手段,应用服务器实现集群是网站可伸缩集群架构设计中较为简单成熟的一种.

通过负载均衡调度服务器,可将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。

图片

数据库读写分离:

出现的问题:

网站在使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。

解决的方法:

大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载压力.

应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。

图片

使用反向代理和CDN加速网站响应:

出现的问题:

随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,留住用户,网站需要加速网站访问速度。

解决的方案:

主要手段有使用CDN和反向代理,CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。

图片

使用分布式文件系统和分布式数据库系统:

出现的问题:

任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求.

解决的方案:

需要使用分布式数据库及文件系统服务器,分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。

图片

使用NoSQL和搜索引擎:

出现的问题:

随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂.

解决的方案:

网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎,NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

图片

业务拆分:

出现的问题:

大型网站软件系统遇到了日益复杂的业务场景.

解决的方案:

通过使用分而治之的手段将整个网站业务分成不同的产品线,如大型购物交易网站就会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责,具体到技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署维护。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统.

图片

分布式服务:

出现的问题:

随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。由于所有应用要和所有数据库系统连接,在数万台服务器规模的网站中,这些连接的数目是服务器规模的平方,导致存数据库接资源不足,拒绝服务。

解决的方案:

既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作,大型网站的架构演化到这里,基本上大多数的技术问题都得以解决,诸如跨数据中心的实时数据同步和具体网站业务相关的问题也都可以通过组合改进现有技术架构来解决。

图片

面对繁琐的系统架构图,作为测试从业人员应该注意哪些事项呢?

全面理解架构:深入理解整个系统架构,包括但不限于技术栈、模块间交互、数据流、服务依赖关系等,以便于设计有效的测试策略。

性能与负载测试:由于大型网站通常面临高并发和大流量的挑战,因此需要对系统进行压力测试、负载测试和性能基准测试,以确保系统能够在预期的负载下稳定运行。

安全性测试:实施安全测试以识别潜在的漏洞,包括但不限于SQL注入、XSS(跨站脚本)、CSRF(跨站请求伪造)等常见的安全威胁。

兼容性测试:验证系统在不同的浏览器、设备和操作系统上的表现,以确保用户体验的一致性。

API测试:对系统中的RESTful API、SOAP服务等进行功能性、性能和安全性的测试。

集成测试:确保各个模块和服务之间正确无误地交互,尤其是在微服务架构中,每个服务之间的接口和通信协议都需要经过严格测试。

回归测试:在每次代码更改后,执行回归测试以确保现有功能没有被破坏,这是持续集成/持续部署(CI/CD)流程的重要组成部分。

测试环境的隔离与复制:维护与生产环境相似的测试环境,确保测试结果的准确性和可靠性。

测试自动化:使用自动化测试工具和框架来提高测试效率和覆盖率,减少重复性劳动。

测试数据管理:创建和维护测试数据集,确保数据的质量和一致性,同时避免使用真实的敏感数据。

持续监控与反馈:在生产环境中实施监控,收集性能数据和用户行为数据,为未来的测试和优化提供依据。

培训与学习:不断提升自己的技能,跟上行业发展的最新趋势和技术进步,如人工智能领域在测试中的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo内部通信流程

我当时在学习的过程中搭建过demo,具体流程就是,我先定义了一个api接口模块,还定义一个服务提供者模块,然后服务提供方实现该接口,定义该方法具体的实现impl类,服务提供方启动时,将要暴露的服务和…

运维行业的全新视界:一体化监控解决方案

在当今的IT环境中,运维团队面临着前所未有的挑战。随着技术的快速发展,企业需要更加高效、智能的监控工具来确保IT基础设施的稳定运行。本文旨在为运维团队提供一个全面的、集成多种功能的监控解决方案参考。 一、总体架构与要求 首先,一个理…

Python中的模块和包定义以及如何在Python中导入和使用它们

在Python中,模块(Module)和包(Package)是组织代码、重用代码的基本单位,它们让Python的编程更加模块化,易于管理和维护。 模块(Module) 模块是一个包含Python定义和声明…

金融科技的移动时代:探索APP与SaaS系统的结合之道

金融科技(FinTech)的革新正在重塑金融服务行业的未来。移动应用(APP)与软件即服务(SaaS)系统的结合,为金融行业带来了前所未有的灵活性和可扩展性。 一、金融科技的发展趋势 金融科技通过技术…

在线快速制作二维码的技巧,支持生成多种内容二维码

现在用二维码来分享内容是很多场景下会使用的一种方式,常见的展示内容有图片、文件、文本、音频、视频等,都可以生成二维码之后。通过手机扫码来查看内容,有利于内容的快速传播,并且用户获取信息也更加的方便。 下面来教大家使用…

ubuntu rc.local开机自启动

https://blog.csdn.net/qq_48974566/article/details/137212295

Web应用防火墙用在哪些场景?

WAF是Web Application Firewall的缩写,翻译为“Web应用防火墙”是一种网络安全设备或服务,用于保护Web应用程序免受各种网络攻击和漏洞的影响。 WAF特别设计用于识别和阻止特定于Web应用程序的攻击,例如SQL注入、跨站脚本(XSS)、跨站请求伪造…

力扣习题--哈沙德数

一、前言 本系列主要讲解和分析力扣习题,所以的习题均来自于力扣官网题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 二、哈沙德数 1. 哈沙德数 如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number&…

CTF常用sql注入(二)报错注入(普通以及双查询)

0x05 报错注入 适用于页面无正常回显,但是有报错,那么就可以使用报错注入 基础函数 floor() 向下取整函数 返回小于或等于传入参数的最大整数。换句话说,它将数字向下取整到最接近的整数值。 示例: floor(3.7) 返回 3 floor(-2…

5.基于SpringBoot的SSMP整合案例-数据层开发

目录 1.新建项目 2.实体类开发: 2.1在pom.xml中增加Lombok坐标: 2.2添加Book实体类 3.数据层开发: 3.1 配置MyBatisPlus与Druid 3.2创建数据层接口 3.3写测试类 3.4点击运行: 4.数据层快速开发: 4.1配置MyB…

流式数据库 RisingWave「Demo」:直播指标实时分析

直播因其能与观众进行实时互动的独特优势,成为目前最为流行的娱乐形式之一。想要优化直播效果,有许多指标需要跟踪。最常见的指标比如:人流量、评论数量、直播卡顿时长等等。 本教程将分享如何使用 RisingWave 监控直播流量指标。我们为本教…

python访问mongoDB

pip install pymongo1.建立连接 (1)模块引用 import pymongoClientMongoClient(host10.90.9.101,port27017)(2)访问数据库 dbclient.myDBdbconn.get_database("myDB")2.集合操作 (1)插入文档 colldb.get_collection(…

docker-compose version is obsolete

如果更新了docker或者docker-desktop 启动时候发现有 version is obsolete警告 删除yml第一行的version字段 上社区原文 Technically you can still define it… But you will get the warning you observed, and it won’t be used, as docker compose v2 (the cli plugin…

关于TaOTUB1的信息总结

关于TaOTUB1的信息总结 文献标题: Reducing expression of TaOTUB1s decreases tiller number in wheat 核心内容: 背景和目的: 小麦的分蘖数量是影响产量的重要农艺性状。OTUB1在水稻中被发现能够调控分蘖数量,而在小麦中的功能尚不明确。本研究旨在通过鉴定和分…

C++视觉开发 四.手势识别

本章记录传统手势识别,在表示0-5六个数值时的识别问题。例如识别剪刀石头布,手势,以及其表示的动作。在识别时将手势中的凹陷区域称为凸缺陷,其个数作为识别的重要依据。 需要注意,在凸缺陷个数为0时,无法…

细说QT程序高分屏适配

文章目录 高分屏适配适配屏幕缩放禁用屏幕缩放开启系统配置属性获取当前屏幕信息在Qt中实现高分辨率屏幕的适配,主要涉及对界面元素、字体大小和布局进行优化,以保证应用程序在不同分辨率和设备像素比率(DPI)的显示屏上均能正确显示。下面是一些关键步骤和技巧,用于在Qt应用…

S272钡铼技术4G无线RTU支持多路DIN输入和模拟量转换至4G网络

钡铼第四代RTU S272是一款先进的工业级4G远程遥测终端,为各种远程工业数据采集和控制系统提供了高效解决方案。结合了现代通信技术和多功能的输入输出接口,S272不仅支持多路数字量和模拟量输入,还具备灵活的扩展性和强大的控制功能&#xff0…

简单实现利用飞书机器人推送消息给相关人员群的方法

利用的飞书的自定义机器人,将系统中的错误信息推送给技术群的功能。 飞书文档地址:开发文档 - 飞书开放平台 自定义机器人只能在群聊中使用的机器人,在当前的群聊中通过调用webhook地址来实现消息的推送。 配置逻辑可以看飞书的官方文档&am…

WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

文章目录 XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM反射型XSS存储型XSSDOM-base型XSS XSS跨站-输入输出-原理&分类&闭合 漏洞原理:接受输入数据,输出显示数据后解析执行 基础类型:反射(非持续…

CIDR地址表示法

CIDR地址表示法: 假如我们的服务器IP列表为:172.18.0.157~172.18.0.163,该如何表示呢? A. 172.18.0.157/163 B. 172.18.0.157/7 C. 172.18.0.157/24 D. 172.18.0.157/26 E. 172.18.0.0/26 F.1…