高并发分布式架构的演进之路

news/2023/11/30 9:03:25

目录

单体架构

应用数据分离架构

应用数据集群架构

读写分离 / 主从分离架构

引⼊缓存⸺冷热分离架构

垂直分库

业务拆分-微服务

单体架构

一个系统初期,我们需要利⽤我们精⼲的技术团队,快速将业务系统投⼊市场进⾏检验,并且可以迅速响 应变化要求。但好在前期⽤⼾访问量很少,没有对我们的性能、安全等提出很⾼的要求,⽽且系统架构简单,⽆需专业的运维团队,所以选择单机架构是合适的。

单体架构就是我们的应用服务和数据库服务都是在一个主机上的.

用户在浏览器地址栏中输入域名之后,通过DNS解析为ip地址,随后访问该IP地址上的应用服务.

 单体架构也是我们目前最常见的一种架构,因为系统架构简单,无需过多的维护人员.

目前绝大多数公司的产品都是这总单体架构.因为现在计算机的硬件发展的速度是非常快的,所以哪怕只有一台主机,这一台主机的性能都是非常好的,都能支持非常大的高并发和非常大的存储量.

应用数据分离架构

随着系统的上线,我们不出意外地获得了成功。市场上出现了⼀批忠实于我们的⽤⼾,使得系统 的访问量逐步上升,逐渐逼近了硬件资源的极限,同时团队也在此期间积累了对业务流程的⼀批经 验。⾯对当前的性能压⼒,我们需要未⾬绸缪去进⾏系统重构、架构挑战,以提升系统的承载能⼒。 但由于预算仍然很紧张,我们选择了将应⽤和数据分离的做法,可以最⼩代价的提升系统的承载能⼒.

如果业务进一步增长,用户量和数据量都水涨船高的时候,总有一天,一台主机就会难以应付,这个时候我们就需要引入更高的硬件资源.毕竟一台主机的硬件资源是有限的.

可以看到这个架构和之前的架构的区别就是将数据库服务器部署在了其他的主机上,应用服务器就会通过网络去访问数据库服务器. 

应用数据集群架构

应用服务器可能会吃很多的CPU和内存,如果把CPU和内存都吃完了,那么应用服务器就会顶不住了,那么我们需要引入更多的应用服务器来解决这个问题.

此时如果当访问量进一步增高的时候,这种一个应用服务器和一个存储服务器的架构已经满足不了需求的时候,就会引入更多的应用服务器节点.

这里的web服务器可以是多个,不止两个. 

可以发现当引入了更多应用服务器节点之后,我们的架构中出现了负载均衡器.这个负载均衡器的作用就像公司里面的领导一样,要负责管理,要负责把任务平均的分配给每个员工.

假设有1W的用户请求,如果只有一个应用服务器的时候,那么这1W个请求肯定都会落在哪一个应用服务器上的,但是如果有多个应用服务器之后,再加上负载均衡器的加入,负载均衡器会将这1W个请求尽可能平均的分配给每个应用服务器.

读写分离 / 主从分离架构

如上面所讨论,增加了应用服务器之后,确实可能承载更多的请求了,但是我们的存储服务器要承担的请求量还是那么多?

这个时候我们是不是应该考虑增加存储服务器的主机数量了.

 将存储服务器的职责进一步细分,存储服务器的主机之间变成读写分离的结构.

我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中。由于⼤部分的系统中,读写请求都是不成⽐例的,例如 100 次读 1 次写,所以只要将读请求由各个从库分担之后,数据库的压⼒就没有那么⼤了。

只用主数据库进行写,其他数据从数据库进行读,然后在主数据库和从数据库之间进行数据同步.主服务器一般只有一个,但是从服务器可以有多个.

引⼊缓存⸺冷热分离架构

到了这一步之后,我们发现业务中⼀些数据的读取频率远⼤于其他数据的读取频率。我们把这部分数据称为热点数据,与之相对应的是冷数据..对于我们需要频繁访问的热数据,数据库的响应还是比较慢的.

我们可以将冷热数据进行区分,将热数据放入缓存中,因为缓存的访问速度要比访问数据库要快很多的.

 我们这里的缓存服务器可以使用Redis,让Redis帮助数据库进行负重前行.

我们可以在缓存服务器这里存放一部分热点数据,因为这些热点数据都是会被频繁访问的数据,数据库服务器这里存储的还是全量的数据.

当我们需要进行读取数据的时候,会先在缓存服务器中读取,如果缓存服务器中有数据,则不在去数据库服务器中查询,要是缓存服务器中没有数据,才会去查询数据库服务器.这样的话,数据库服务器的压力就会进一步减小.

垂直分库

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

这时就需要针对数据库进一步进行拆分,也就是分库分表

本来一个数据库服务器上就会有多个数据库,现在引入多个数据库服务器,每一个数据库服务器存储一个或者一部分数据.如果某个表特别大,可以针对这个表进行拆分.具体如果拆分,还需要根据具体的业务场景进行展开.

业务拆分-微服务

随着⼈员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独⽴实现⾃⼰的微 服务,然后互相之间对数据的直接访问进⾏隔离,可以利⽤ Gateway、消息总线等技术,实现相互之 间的调⽤关联。甚⾄可以把⼀些类似⽤⼾管理、安全管理、数据采集等业务提成公共服务。

 按照功能,拆分为多组微服务,就有利于上述人员的组织分配了.

使用微服务,可以更方便的进行功能的复用,可以针对不同的服务进行不同的部署.不同服务之间通过网络进行交互.


https://www.xjx100.cn/news/3090467.html

相关文章

【计算机网络笔记】路由算法之链路状态路由算法

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

C++二分算法:找到最接近目标值的函数值

本文涉及的基础知识点 二分查找算法合集 题目 Winston 构造了一个如上所示的函数 func 。他有一个整数数组 arr 和一个整数 target ,他想找到让 |func(arr, l, r) - target| 最小的 l 和 r 。 请你返回 |func(arr, l, r) - target| 的最小值。 请注意&#xff0c…

《崩坏:星穹铁道》1.5仙舟罗浮-绥园全宝箱攻略

大家好,我是闲游盒小盒子,本篇来说下崩铁1.5版本仙舟罗浮-绥园的全宝箱攻略,共有19个宝箱加1个扑满;做完间章可获取前14个普通宝箱加2个精英怪宝箱,以及1个扑满;完成《狐斋志异》全任务可获得另外3个宝箱。…

Flink Operator 使用指南 之 Flink Operator安装

介绍 Flink Kubernetes Operator 充当控制平面来管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的Native Kubernetes 集成已经允许用户在运行的 Kubernetes(k8s) 集群上直接部署 Flink 应用程序,但自定义资源和Operator Pattern 也已成为 Kubernetes 原生部署体…

机器学习-笔记

绪论 参考期刊 ICCV 偏向视觉CVPR 偏向MLIAAA AI原理ICML 参考链接 CSDN 机器学习知识点全面总结 课堂内容学习-0912-N1 对于特征提取,简而言之就是同类聚得紧,异类分得开;   detection研究的是样本二分类问题,即分为正样本…

leetcode做题笔记242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…

C++二分查找算法:132模式枚举3简洁版

本文涉及的基础知识点 二分查找算法合集 本题不同解法 包括题目及代码C二分查找算法:132 模式解法一枚举3C二分查找算法:132 模式解法二枚举2代码简洁C二分查找算法:132 模式解法三枚举1性能最佳C单调向量算法:132 模式解法三枚…

使用Python实现几种底层技术的数据结构

使用Python实现几种底层技术的数据结构 数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这…