[Redis#1] 前言 | 再谈服务端高并发分布式结构的演进

目录

电子商务应用架构演进

概述

常见概念

架构演进

总结

总结

应用(Application)/ 系统(System)

模块(Module)/ 组件(Component)

分布式(Distributed)

集群(Cluster)

主(Master)/ 从(Slave)

中间件(Middleware)

可用性(Availability)

响应时长(Response Time RT)

吞吐(Throughput)vs 并发(Concurrent)

分布式系统小结


在 docker 中我们有提到 [Docker#1] 专栏前言 | 亿级高并发架构演进之路,

在讲解 redis 之前,我们再对架构 进行进一步的了解,对于 redis 的讲解,难免离不开分布式~


电子商务应用架构演进

概述

本文以“电子商务”应用为例,介绍从一百个到千万级并发情况下服务端的架构演进过程。目的:帮助读者建立对架构演进的整体认知,便于深入学习后续知识。

常见概念
  • 应用(Application)/ 系统(System):完成一系列服务的程序或程序群。
  • 模块(Module)/ 组件(Component):负责特定功能的内聚单元。
  • 分布式(Distributed):系统组件部署在不同服务器上,通过网络通信协作(物理上
  • 集群(Cluster):多个组件部署在多台服务器上,共同实现特定目标。(逻辑上
  • 主(Master)/ 从(Slave):集群中承担主要或辅助职责的组件。例如: 一个写,多个同步读的模式
  • 中间件(Middleware):不同应用程序间通信的桥梁。与业务无关的更通用的服务(eg. sql,cache,消息队列...

评价指标

  • 可用性(Availability):系统正常提供服务/一年总时长 的时间比例。

例如:平时我们常说的4个9即系统可以提供99.99%的可用性,5个9是99.999%的可用性,以此类推。我们平时只是用高可用(High Availability, HA)这个非量化目标简要表达我们系统的追求。

  • 响应时长(Response Time RT):用户输入到系统响应的时间。
  • 吞吐(Throughput)vs 并发(Concurrent)单位时间内处理的请求数量 vs 同时支持的最大请求数量。

响应时长 和 吞吐 并发 都是衡量服务器性能的标准

架构演进

1 单机架构

  • 适用场景:早期用户访问量少,系统简单,无需专业运维团队。
  • 架构描述:用户请求通过DNS解析到单机服务器,服务器同时提供应用服务和数据库服务。

  • 相关软件:Web服务器(Tomcat、Netty、Nginx、Apache等)、数据库(MySQL、Oracle、PostgreSQL、SQL Server等)。

2 应用数据分离架构

  • 适用场景:系统访问量增加,硬件资源接近极限。
  • 架构描述:应用服务和数据库服务分离部署,应用服务通过网络访问数据库。

  • 优势:最小代价提升系统承载能力。

3 应用服务集群架构

  • 适用场景:单台应用服务器无法满足需求。--引入负载均衡

  • 方案选择
    • 垂直扩展(Scale Up):购买更高性能的服务器,成本高且提升有限。
    • 水平扩展(Scale Out):增加应用服务器数量,成本相对较低,提升空间大。
  • 引入组件:负载均衡(Nginx、HAProxy、LVS、F5等)。
  • 流量调度算法
    • Round-Robin:公平地将请求分发给不同服务器。
    • Weight-Round-Robin:按权重分配请求。
    • 一致哈希散列算法:确保同一用户的请求分发到同一服务器。

4 读写分离 / 主从分离架构

  • 适用场景:数据库成为系统瓶颈。

  • 运用:我们采用的解决办法是这样的,保留一个主要的数据库作为写入数据库,其他的数据库作为从属数据库。从库的所有数据全部来自主库的数据,经过同步后,从库可以维护着与主库一致的数据。
  • 优点:然后为了分担数据库的压力,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中。由于大部分的系统中,读写请求都是不成比例的,例如100次读1次写,所以只要将读请求由各个从库分担之后,数据库的压力就没有那么大了。
  • 问题:当然这个过程不是无代价的,主库到从库的数据同步其实是有时间成本的,但这个问题我们暂时不做进一步探讨。
  • 解决方案:保留一个主数据库用于写入,其他从数据库用于读取,通过数据同步保持一致性。
  • 相关软件:数据库中间件(MyCat、TDDL、Amoeba、Cobar等)。

5 引入缓存 - 冷热分离架构

  • 随着访问量继续增加,发现业务中⼀些数据的读取频率远⼤于其他数据的读取频率。我们把这部 分数据称为热点数据,与之相对应的是冷数据。
  • 适用场景:读取频率高的热点数据增加。读取频率高的热点数据增加。

  • 解决方案:使用本地缓存和分布式缓存(Memcached、Redis)减少数据库压力。
  • 面临问题:缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等。

6 垂直分库

随着业务的数据量增大,大量数据存储在同一个库中已经显得有些力不从心了,所以可以按照业务,将数据分别存储。

  • 例如针对评论数据,可按照商品ID进行hash,路由到对应的表中存储;
  • 针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户ID或记录编号来路由数据。

只要实时操作的表数据量足够小,请求能够均匀地分发到多台服务器上的小表,数据库就能通过水平扩展的方式来提高性能。

  • 其中前面提到的Mycat也支持在大表拆分为小表情况下的访问控制。
  • 这种做法显著增加了数据库运维的难度,对DBA的要求较高。
  • 数据库设计到这种结构时,已经可以称为分布式数据库。

但是这只是⼀个逻辑的数据库整体,数据库⾥不同的组成部分是由不同的组件单独来实现的

  1. 如分库分表的管理和请求分发,由Mycat实现
  2. SQL的解析由单机的数据库实现
  3. 读写分离可 能由⽹关和消息队列来实现
  4. 查询结果的汇总可能由数据库接口层来实现等等

这种架构其实MPP (⼤规模并行处理)架构的⼀类实现。

适用场景:数据量增大,单库难以支撑。

  • 解决方案:按业务将数据分库存储,使用Mycat等工具管理分库分表。
  • 相关软件分布式数据库(Greenplum、TiDB、Postgresql XC、HAWQ等)。

7 业务拆分 - 微服务

  • 随着⼈员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独⽴实现⾃⼰的微服务,然后互相之间对数据的直接访问进⾏隔离

适用场景:业务复杂度增加,团队扩大。

  • 解决方案:将业务拆分为独立的微服务,通过Gateway、消息总线等技术实现服务间的调用。
  • 公共服务:安全中心、监控预警中心等。
总结
  • 架构演进顺序:实际场景中可能同时存在多个问题,需根据具体情况灵活解决。
  • 扩展接口:预留扩展接口以应对未来需求。
  • 大数据架构:涉及数据采集、存储、分析、服务等多个环节,提供分布式存储、计算等能力。

突然回忆到了,博主之间对结构的一篇文章:【Linux详解】冯诺依曼架构 | 操作系统设计 | 斯坦福经典项目Pintos,重点摘要如下 :

• 底层硬件:遵顼冯诺依曼体系系结构,通过内存为枢纽的数据数据交换,实现了降本增效,使得计算机走入百姓家中

• 驱动程序:操作系统管理系统管理硬键的重要手段,操作系统通过驱动程序获取硬件的信息,进而而实行管理

• 操作系统:计算机体系中的管理者,管理各种各样的软硬件资源,遵循先描述,再组织的重要思想,使得操作系统可以批量管理众多软硬件

• 系统调用接口:为了保证操作系统提供的服 务是安全可靠的,通过系统调用接口来帮助 用户访问问计算机,同时保护了操作系统内部的数据

• 用户操作接口:直接通过系统调用接口访 问计算机会比较麻烦,于是通过用户操作接口以更加便捷的方式提供服务,并且提供了跨平台的特性,使得计算机的访问方便快捷


总结

应用(Application)/ 系统(System)
  • 一个应用, 就是一个/组服务器程序
模块(Module)/ 组件(Component)
  • 一个应用, 里面有很多个功能。每个独立的功能, 就可以称为是一个模块/组件
分布式(Distributed)
  • 引入多个主机/服务器, 协同配合完成一系列的工作。(物理上
集群(Cluster)
  • 引入多个主机/服务器, 协同配合完成一系列的工作。(逻辑上
主(Master)/ 从(Slave)
  • 分布式系统中一种比较典型的结构~ ~
  • 多个服务器节点, 其中一个是主, 另外的是从。从节点的数据要从主节点这里同步过来~ ~
中间件(Middleware)

和业务无关的服务(功能更通用的服务)

  1. 数据库
  2. 缓存
  3. 消息队列
  4. ...
可用性(Availability)
  • 系统整体可用的时间 / 总的时间
  • 360 / 365 => 可用性~ ~
  • 4 个9即系统可以提供99.99% 的可用性,5 个9 是99.999%
响应时长(Response Time RT)
  • 衡量服务器的性能
  • 越小越好~ ~
吞吐(Throughput)vs 并发(Concurrent)
  • 衡量系统的处理请求的能力。衡量性能的一种方式

分布式系统小结

1.单机架构 (应用程序 + 数据库服务器)

2.数据库和应用分离

  • 应用程序和数据库服务器分别放到不同主机上部署了.

3.引入负载均衡, 应用服务器 => 集群

  • 通过负载均衡器, 把请求比较均匀的分发给集群中的每个应用服务器.
  • 当集群中的某个主机挂了, 其他的主机仍然可以承担服务.
  • 提高了整个系统的可用性~ ~

4.引入读写分离, 数据库主从结构

  • 一个数据库节点作为主节点, 其他N个数据库节点作为从节点.
  • 主节点负责写数据, 从节点负责读数据.
  • 主节点需要把修改过的数据同步给从节点~

上述四点,都是为了 高效的处理更多的数据


5.引入缓存, 冷热数据分离

  • Redis 在一个分布式系统中, 通常就扮演着缓存这样的角色~ ~
  • 引入的问题: 数据库和缓存的数据一致性问题~ ~

6.引入分库分表, 数据库能够进一步扩展存储空间

7.引入微服务, 从业务上进一步拆分应用服务器

  • 从业务功能的角度, 把应用服务器, 拆分成更多的功能更单一, 更简单, 更小的服务器.

上述这样的几个演化的步骤, 只是一个粗略的过程.

实际上一个商业项目, 真实的演化过程, 都是和他的业务发展密切相关的.
业务是更重要的, 技术是给业务提供支持的.
所谓的分布式系统, 就是想办法引入更多的硬件资源!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

洛谷刷题日记||基础篇9(线性表)

代码思路: 初始化圈:利用 std::list 保存编号为 1 到 n 的人。循环报数:利用迭代器模拟报数的过程,每次数到 m 时将对应的人出圈。循环处理:std::list::erase 删除出圈的人,并返回下一个人的迭代器&#x…

Elasticsearch开启认证及kibana密码登陆

Elasticsearch不允许root用户运行,使用root用户为其创建一个用户es,为用户es配置密码,并切换到es用户。 adduser elastic passwd elastic su elasticElasticsearch(简称ES)是一个基于Lucene的搜索服务器。它提供了一个分布式、多用户能力的全文搜索引擎,基于RESTful web…

ESLint的简单使用(js,ts,vue)

一、ESLint介绍 1.为什么要用ESLint 统一团队编码规范(命名,格式等) 统一语法 减少git不必要的提交 减少低级错误 在编译时检查语法,而不是等js引擎运行时才检查 2.eslint用法 可以手动下载配置 可以通过vue脚手架创建项…

学习threejs,使用AnimationMixer实现变形动画

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.AnimationMixer 动画…

嵌入式驱动开发详解1(系统调用)

文章目录 符设备驱动架构read函数详解用户层read函数内核层read函数 具体实现用户层代码 内核层代码细节分析 符设备驱动架构 如上图所示,应用层程序直接用系统提供的API函数即可调用驱动层相应的函数,中间的具体过程都是由linux内核实现的,…

算法.图论-习题全集(Updating)

文章目录 本节设置的意义并查集篇并查集简介以及常见技巧并查集板子(洛谷)情侣牵手问题相似的字符串组岛屿数量(并查集做法)省份数量移除最多的同行或同列石头 本节设置的意义 主要就是为了复习图论算法, 尝试从题目解析的角度,更深入的理解图论算法… 并查集篇 并查集简介以…

解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题

解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 Chapter1 解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 Chapter1 解决Ubuntu18.04及以上版本高分辨率下导致字体过小问题 目前使用的是三星4K显示屏,屏幕分辨率太高了,导致VMWare Workst…

第27天 安全开发-PHP应用TP 框架路由访问对象操作内置过滤绕过核心漏洞

时间轴 演示案例 TP 框架-开发-配置架构&路由&MVC 模型 TP 框架-安全-不安全写法&版本过滤绕过 TP 框架-开发-配置架构&路由&MVC 模型 参考: https://www.kancloud.cn/manual/thinkphp5_1 1、配置架构-导入使用 去thinkphp官网可以看到&…

Mac的Terminal随机主题配置

2024年8月8日 引言 对于使用Mac的朋友,如果你是一个程序员,那肯定会用到Terminal。一般来说Terminal就是一个黑框,但其实Terminal是有10款官方皮肤。 每个都是不一样的主题,颜色和字体都会有所改变。现在就有一个方法可以很平均…

开源项目低代码表单设计器FcDesigner获取表单的层级结构与组件数据

在使用开源项目低代码表单设计器FcDesigner时,获取和理解表单的层级结构非常关键。通过getDescription和getFormDescription方法,您可以清晰掌握表单组件的组织结构和层次关系。这些方法为操控表单的布局和配置提供了强大的支持。 源码地址: Github | G…

ReactPress vs VuePress vs RectPress

ReactPress:重塑内容管理的未来 在当今数字化时代,内容管理系统(CMS)已成为各类网站和应用的核心组成部分。ReactPress作为一款融合了现代Web开发多项先进技术的开源发布平台,正以其卓越的性能、灵活性和可扩展性&…

无人机在森林中的应用!

一、森林资源调查 无人机可以利用遥感技术快速获取所需区域高精度的空间遥感信息,对森林图斑进行精确区划。相较于传统手段,无人机调查具有低成本、高效率、高时效的特点,尤其在地理环境条件不好的区域,调查人员无法或难以到达的…

RTC纽扣电池寿命问题分析

一、 问题描述 一款带RTC功能的终端产品,RTC使用寿命设计要求高于5年,产品研发后测试,发现VDD_BATT的电流大于100uA,导致产品实际计算出来寿命只有半年之久,下图是RTC电路图: 图1 RTC供电电路 二、 原因分…

python成长技能之正则表达式

文章目录 一、认识正则表达式二、使用正则表达式匹配单一字符三、正则表达式之重复出现数量匹配四、使用正则表达式匹配字符集五、正则表达式之边界匹配六、正则表达式之组七、正则表达式之贪婪与非贪婪 一、认识正则表达式 什么是正则表达式 正则表达式(英语&…

ElasticSearch学习笔记三:基础操作(一)

一、前言 上一篇文章中,我们学习了如何使用Java客户端去连接并且简单的操作ES,今天我们将对ES中的基本操作进行学习,包括索引操作、映射操作、文档操作。 二、索引操作 简单回顾一下索引,ES中的索引就有相同结构的数据的集合&a…

【AIGC】如何使用高价值提示词Prompt提升ChatGPT响应质量

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 💯前言💯提示词英文模板💯提示词中文解析1. 明确需求2. 建议额外角色3. 角色确认与修改4. 逐步完善提示5. 确定参考资料6. 生成和优化提示7. 生成最终响…

通过华为鲲鹏认证发行上市的集成平台产品推荐

华为鲲鹏认证是技术实力与品质的权威象征,代表着产品达到了高标准的要求。从技术层面看,认证确保产品与华为鲲鹏架构深度融合,能充分释放鲲鹏芯片的高性能、低功耗优势,为集成平台的高效运行提供强大动力。在安全方面,…

500左右的骨传导耳机哪个牌子好?用户体验良好的五大骨传导耳机

作为一名拥有十几年从业经验的科技爱好者,我主要想告诉大家一些关于骨传导耳机的知识。其中,要远离所谓的不专业产品,它们的佩戴不适和音质不佳问题高得吓人,尤其是很多宣称能提供舒适佩戴和高音质的产品,超过九成的用…

【MySQL】RedHat8安装mysql9.1

一、下载安装包 下载地址:MySQL Enterprise Edition Downloads | Oracle MySQL :: MySQL Community Downloads 安装包:mysql-enterprise-9.1.0_el8_x86_64_bundle.tar 官方 安装文档:MySQL Enterprise Edition Installation Guide 二、安装…

Java项目实战II基于Java+Spring Boot+MySQL的共享汽车管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在共享经济…