从读写分离到分布式服务:系统架构演进十阶段深度解析

第一阶段到第四阶段:架构进化四阶段:探索单体到集群的高可用性能优化之道-CSDN博客https://blog.csdn.net/pinbodeshaonian/article/details/147464084?spm=1001.2014.3001.5502

以下是对从第五阶段到第十阶段详细的解释:

第五阶段:数据库读写分离

1.原理
  • 利用数据库的主从复制机制,将主数据库(Master)的写操作记录通过日志等方式同步到从数据库(Slave)。主数据库负责处理所有的写请求,如 INSERT、UPDATE、DELETE 等操作,确保数据的一致性和完整性。从数据库则实时复制主数据库的数据,并提供读服务,处理 SELECT 等查询请求。这样,写操作和读操作被分别分配到不同的数据库服务器上,实现了读写分离。
2.作用
  • 提升性能:在高并发场景下,大量的读请求会占用数据库的资源,影响写操作的执行效率。通过读写分离,读请求由从数据库处理,减轻了主数据库的负担,使主数据库能够更专注于写操作,从而提高了整个系统的并发处理能力和响应速度。例如,在一个电商网站中,商品浏览等读操作远远多于订单提交等写操作,将读操作分散到从数据库可以避免主数据库因大量读请求而出现性能瓶颈。
  • 增强可靠性:从数据库作为主数据库的副本,提供了数据的冗余备份。如果主数据库出现故障,系统可以快速切换到从数据库,继续提供服务,保证数据的可用性和系统的稳定性,降低了因单点故障导致系统瘫痪的风险。

主从数据库结构特点

1、一般:一主多从,也可也多主多从。

2、主库操作,从库操作。

主从复制步骤

1、主库(Master)更新数据完成前,将操作写入binlog日志文件。

2、从库(Slave)打开I/O线程与主库连接,做binlog dump process,并将事件写入中继日志。

3、从库执行中继日志事件,保持与主库一致。

第六阶段:使用反向代理和 CDN 加速网站响应

1.反向代理
  • 工作原理:反向代理服务器位于 Web 服务器前端,充当着客户端与后端服务器之间的中介。当客户端发送请求到服务器时,请求首先到达反向代理服务器。反向代理服务器根据预设的规则,如根据请求的 URL、服务器的负载情况等,将请求转发到后端合适的真实服务器上处理。对于客户端来说,它并不知道自己访问的是反向代理服务器,以为就是直接访问到了目标服务器,反向代理服务器对客户端隐藏了后端服务器的真实架构和细节。
  • 功能作用:除了隐藏后端服务器信息外,反向代理还具有负载均衡的功能。它可以根据后端服务器的性能和负载状况,将请求均匀地分配到不同的服务器上,避免某台服务器负载过高而其他服务器闲置的情况,提高了整个系统的资源利用率和可用性。同时,反向代理还可以对请求进行缓存,对于一些经常访问的静态资源或动态页面的部分内容进行缓存,当有相同的请求再次到来时,直接从缓存中返回数据,减少了后端服务器的处理压力,进一步提高了响应速度。
2.CDN(内容分发网络)
  • 架构与原理:CDN 是一个由分布在不同地理位置的服务器节点组成的分布式网络。它通过智能的内容缓存和分发机制,根据用户的地理位置、网络状况以及内容的热度等因素,将内容缓存到距离用户最近的节点服务器上。当用户请求访问某个网站的内容时,CDN 系统会自动判断用户的位置,并将用户的请求路由到距离用户最近且拥有该内容缓存的节点服务器上,让用户从该节点获取数据,而不是从网站的源服务器获取。
  • 加速效果:CDN 主要用于缓存静态资源,如图片、脚本、样式表、视频等。由于这些资源通常占据了网站加载时间的大部分,通过 CDN 的缓存和就近分发,可以大大减少数据在网络中的传输距离和时间,显著加快网站的加载速度,提高用户体验。例如,对于一个全球范围内的电商网站,用户在访问商品详情页面时,图片等静态资源可以从距离用户最近的 CDN 节点获取,而无需从位于其他地区的源服务器下载,从而大大缩短了页面的加载时间。

CDN和反向代理都使用了缓存机制 

第七阶段:使用分布式文件系统和分布式数据库系统

1.分布式文件系统
  • 架构与原理:分布式文件系统将文件分割成多个数据块,并将这些数据块分散存储在多个不同的服务器节点上。同时,它通过一个元数据服务器来管理文件的元数据信息,如文件的目录结构、数据块的存储位置等。当用户请求访问文件时,首先向元数据服务器查询文件的元数据,获取数据块的存储位置信息,然后直接从相应的存储节点读取数据块,再将这些数据块组合成完整的文件返回给用户。分布式文件系统还具备数据冗余和容错机制,通过将数据块复制到多个节点上,确保在某个节点出现故障时,数据不会丢失,可以从其他副本节点获取数据。
  • 应用场景与优势:适用于大规模数据存储和处理的场景,如互联网公司的日志存储、视频网站的视频文件存储等。它提供了高可扩展性,可以方便地通过增加节点来扩展存储容量和性能。同时,多个节点可以并行处理文件的读写请求,大大提高了文件系统的吞吐量和读写速度。例如,在一个大型数据中心中,分布式文件系统可以管理海量的服务器日志文件,支持快速的日志查询和分析,并且能够随着业务的增长轻松扩展存储能力。
2.分布式数据库系统
  • 架构与原理:分布式数据库系统将数据库中的数据按照一定的规则分布存储在多个节点上,这些节点可以是不同的服务器或计算机。数据的分布方式可以基于数据的范围、哈希值等进行划分。同时,分布式数据库系统通过分布式事务处理机制来保证数据在多个节点之间的一致性和完整性。当进行数据操作时,系统会协调各个节点共同完成事务,确保数据的正确性。此外,分布式数据库系统还具备自动的数据复制和故障转移功能,以提高系统的可靠性和可用性。
  • 应用场景与优势:用于处理大规模的结构化数据和高并发的业务请求,如大型电商平台的订单数据、社交网络的用户关系数据等。它能够突破单机数据库在存储容量和处理能力上的限制,通过增加节点实现性能的线性扩展。例如,当电商平台的订单量不断增长时,分布式数据库系统可以通过添加节点来轻松应对日益增长的数据量和并发请求,保证系统的稳定运行和快速响应。

第八阶段:使用 NoSQL 和搜索引擎

1.NoSQL(非关系型数据库)
  • 类型与特点:NoSQL 数据库有多种类型,常见的包括键值对数据库(如 Redis)、文档数据库(如 MongoDB)、列存储数据库(如 Cassandra)和图数据库(如 Neo4j)等。键值对数据库以简单的键值对形式存储数据,读写速度极快,适用于缓存、实时数据处理等场景。文档数据库以文档的形式存储数据,数据结构更加灵活,适合存储半结构化的数据,如 JSON 格式的文档,常用于内容管理系统、移动应用等场景。列存储数据库则将数据按列进行存储,适合处理大规模的数据分析和处理任务。图数据库用于存储和处理具有复杂关系的数据,如社交网络中的人际关系、知识图谱等。
  • 应用场景:NoSQL 数据库在处理非结构化或半结构化数据、高并发读写以及对数据模型灵活性要求较高的场景中表现出色。例如,在实时通信应用中,使用 Redis 作为缓存来存储用户的在线状态、消息队列等数据,可以快速响应用户的请求。在内容管理系统中,MongoDB 可以方便地存储和管理各种类型的文档内容,无需事先定义严格的表结构。
2.搜索引擎
  • 工作原理:搜索引擎首先会对网站的文本内容进行抓取和索引。它通过网络爬虫程序遍历网站的页面,提取其中的文字信息,并对这些信息进行分析和处理,建立索引数据结构。索引中包含了关键词与文档之间的映射关系,以及文档的相关元数据。当用户在搜索框中输入关键词时,搜索引擎会在索引中快速查找匹配的文档,并根据相关性和其他因素对搜索结果进行排序,然后将最相关的文档列表返回给用户。
  • 应用场景:在各种网站和应用中,搜索引擎用于帮助用户快速查找所需的信息,如文章、产品、用户生成的内容等。例如,在电商网站中,用户可以通过搜索引擎查找特定的商品;在企业内部的知识管理系统中,员工可以使用搜索引擎快速找到相关的文档和资料,提高信息检索的效率和准确性,提升用户体验。

第九阶段:业务拆分

1.概念与方法

业务拆分是将一个庞大复杂的单体应用,按照不同的业务功能、模块或领域,拆分成多个相对独立的子系统或微服务。拆分的方法可以根据业务的边界进行划分,例如将电商系统拆分成商品管理、订单管理、用户管理、支付管理等微服务。每个微服务都有自己独立的数据库、业务逻辑和接口,它们之间通过轻量级的通信机制进行交互,如 RESTful API。

2.优势与挑战
  • 优势:首先,降低了系统的复杂度。每个微服务的功能相对单一,代码规模较小,便于开发、测试和维护。不同的团队可以专注于不同的微服务开发,提高了开发效率和代码质量。其次,提高了系统的可扩展性。当某个微服务的业务需求增长时,可以独立地对该微服务进行扩展,增加服务器资源或添加新的服务实例,而不会影响到其他微服务。此外,业务拆分还增强了系统的灵活性和可维护性。当某个业务功能发生变化时,只需对相应的微服务进行修改和部署,不会对整个系统造成大规模的影响。
  • 挑战:微服务架构也带来了一些挑战,如服务之间的通信和协作变得更加复杂,需要合理设计通信协议和接口,以确保服务之间的高效交互。同时,分布式系统的运维难度增加,需要对多个微服务进行统一的监控、管理和故障排查。

第十阶段:分布式服务

1.架构与原理

分布式服务架构是基于微服务架构的进一步发展,将业务功能以服务的形式进行封装和部署,这些服务分布在不同的服务器上,并通过网络进行通信和协作。每个服务都有自己独立的生命周期和运行环境,可以根据业务需求独立地进行水平扩展,即增加或减少服务实例的数量。分布式服务架构通常采用服务治理框架来管理服务,包括服务的注册与发现、负载均衡、容错处理、流量控制等功能。服务提供者将自己的服务注册到服务注册中心,服务消费者通过服务注册中心查找所需的服务,并通过负载均衡算法选择合适的服务实例进行调用。

2.特点与应用
  • 特点:分布式服务架构具有高度的灵活性和可扩展性。它可以根据不同的业务场景和流量变化,动态地调整服务的部署和资源分配,实现资源的高效利用。同时,它提供了强大的容错机制,当某个服务实例出现故障时,服务治理框架可以自动将请求转发到其他健康的服务实例上,保证系统的高可用性。此外,通过对服务的监控和管理,可以及时发现和解决服务中的问题,提高系统的稳定性和可靠性。
  • 应用:适用于大型复杂的分布式系统,如互联网电商平台、金融科技系统等。例如,在电商平台中,订单服务、库存服务、物流服务等可以作为独立的分布式服务进行部署和管理。在促销活动等高峰时段,可以根据业务流量动态地扩展订单服务和库存服务的实例数量,以应对高并发的请求,保证系统的稳定运行和快速响应。

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

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

相关文章

Webug4.0靶场通关笔记07- 第9关反射XSS和第10关存储XSS

目录 第09关 反射型XSS 1.打开靶场 2.源码分析 3.渗透实战 第10关 存储型XSS 1.打开靶场 2.源码分析 3.渗透实战 本系列为通过《Webug4.0靶场通关笔记》的渗透集合,本文为反射型和存储型XSS漏洞关卡的渗透部分,通过对XSS关卡源码的代码审计找到漏…

Prometheus的安装部署

目录 一、概述 二、Prometheus的安装 1、二进制方式 1.1、下载系统安装包​编辑 1.2、解压 1.3、创建数据目录,服务运行用户 1.4、设置为系统服务(创建服务运行脚本) 1.5、启动服务,并通过浏览器访问验证 2、容器方式 2…

Jupyter Notebook为什么适合数据分析?

Jupyter Notebook 是一款超实用的 Web 应用程序,在数据科学、编程等诸多领域都发挥着重要作用。它最大的特点就是能让大家轻松创建和共享文学化程序文档。这里说的文学化程序文档,简单来讲,就是把代码、解释说明、数学公式以及数据可视化结果…

Python清空Word段落样式的方法

在 Python 中,你可以使用 python-docx 库来操作 Word 文档,包括清空段落样式。以下是几种清空段落样式的方法: 方法一:直接设置段落样式为"Normal" from docx import Documentdoc Document(your_document.docx) # 打…

macOS 上是否有类似 WinRAR 的压缩软件?

对于习惯使用 Windows 的用户来说,WinRAR 是经典的压缩/解压工具,但 macOS 系统原生并不支持 RAR 格式的解压,更无法直接使用 WinRAR。不过,macOS 平台上有许多功能相似甚至更强大的替代工具,以下是一些推荐&#xff1…

WebRtc09:网络基础P2P/STUN/TURN/ICE

网络传输基本知识 NATSTUN(Session Traversal Utilities for NAT)TURNICE NAT 产生的原因 IPV4地址不够出于网络安全的原因 NAT种类 完全锥型NAT(Full Cone NAT)地址限制型NAT(Address Restricted Cone NAT)端口限制型NAT(Port Restricted Cone NAT…

如何添加或删除极狐GitLab 项目成员?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 项目成员 (BASIC ALL) 成员是有权访问您的项目的用户和群组。 每个成员都有一个角色,这决定了他们在项目中可以…

用单目相机和apriltag二维码aruco实现单目定位

目录 一、核心流程与代码框架 1. ‌环境准备‌ 2. ‌ArUco定位实现 3. ‌AprilTag定位实现(需额外安装Apriltag库) 二、关键优化点 1‌.亚像素角点优化 2‌ 多标签联合定位 三、性能指标(实测) 四、常见问题 ‌检测失败…

tinyrenderer笔记(透视矫正)

tinyrenderer个人代码仓库:tinyrenderer个人练习代码 引言 还要从上一节知识说起,在上一节中我为了调试代码,换了一个很简单的正方形 obj 模型,配上纹理贴图与法线贴图进行渲染,得了下面的结果: what&…

MySQL的内置函数与复杂查询

目录 前言 一、聚合函数 1.1日期函数 1.2字符串函数 1.3数学函数 1.4其它函数 二、关键字周边 2.1关键字的生效顺序 2.2数据源 2.3可以使用聚合函数的关键字 前言 在前面几篇文章中,讲解了有关MySQL数据库、数据库表的创建、数据库表的数据操作等等。本文我…

见多识广4:Buffer与Cache,神经网络加速器的Buffer

目录 前言传统意义上的Buffer与Cache一言以蔽之定义与主要功能BufferCache 数据存储策略二者对比 神经网络加速器的bufferInput BufferWeight BufferOutput Buffer与传统buffer的核心区别总结 前言 知识主要由Qwen和Kimi提供,我主要做笔记。 参考文献: …

内存的位运算

示例:提取和设置标志位 假设我们有一个32位的整数,其中不同的位代表不同的标志。例如: 位0:是否开启日志(0表示关闭,1表示开启) 位1:是否启用调试模式(0表示禁用&#…

linux -shell原理与运用

1---shell的工作方式和功能 shell的工作方式: shell本身也是一个应用程序,存储在/bin 或者是/user/bin中 登录的时候 会根据/etc/passwd文件载入shell默认执行 shell启动后,就会显示命令提示符,等待用户输入命令 命令的逻辑: 首先会判断时内部命令还是外部命令,如果是内部…

js获取uniapp获取webview内容高度

js获取uniapp获取webview内容高度 在uni-app中&#xff0c;如果你想要获取webview的内容高度&#xff0c;可以使用uni-app提供的bindload事件来监听webview的加载&#xff0c;然后通过调用webview的invokeMethod方法来获取内容的高度。 以下是一个示例代码&#xff1a; <te…

Windows系统升级Nodejs版本

什么是nodejs Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本。 NodeJs官网 网址&#xff1a;Node.js — 在任何地方运行 JavaScript 可以通过网址下载安装&#xff0c;通过官网可以看到现在最新版本为22…

Relay算子注册(在pytorch.py端调用)

1. Relay算子注册 (C层) (a) 算子属性注册 路径: src/relay/op/nn/nn.cc RELAY_REGISTER_OP("hardswish").set_num_inputs(1).add_argument("data", "Tensor", "Input tensor.").set_support_level(3).add_type_rel("Identity…

【JavaEE】网络原理之初识(1.0)

目录 ​编辑 局域网与广域网 IP地址和端口号 实现简单的服务器客户端交互 简单理解socket TCP和UDP的差别&#xff08;初识&#xff09; socket面对udp DatagramSocket API DatagramSocket 构造方法 DatagramSocket 方法&#xff1a; DatagramPacket API Data…

Redis数据结构ZipList,QuickList,SkipList

目录 1.ZipList 1.2.解析Entry&#xff1a; 1.3Encoding编码 1.4.ZipList连锁更新问题 2.QuickList SkipList跳表 RedisObject 五种数据类型 1.ZipList redis中的ZipList是一种紧凑的内存储存结构&#xff0c;主要可以节省内存空间储存小规模数据。是一种特殊的双端链表…

laravel 12 监听syslog消息,并将消息格式化后存入mongodb

在Laravel 12中实现监听Syslog消息并格式化存储到MongoDB&#xff0c;需结合日志通道配置、Syslog解析和MongoDB存储操作。以下是具体实现方案&#xff1a; 一、环境配置 安装MongoDB扩展包 执行以下命令安装必要的依赖&#xff1a; composer require jenssegers/mongodb ^4.0确…

【STM32项目实战】一文了解单片机的SPI驱动外设功能

前言&#xff1a;在前面我有文章介绍了关于单片机的SPI外设CUBEMX配置&#xff0c;但是要想使用好SPI这个外设我们还必须对其原理性的时序有一个详细的了解&#xff0c;所以这篇文章就补充一下SPI比较偏向底层的时序性的逻辑。 1&#xff0c;SPI简介 SPI是MCU最常见的对外通信…