浅谈分布式系统

news2024/11/16 16:46:21

文章目录

  • 分布式系统
    • 应用数据分离架构
    • 应用服务集群架构
    • 读写分离 / 主从分离架构
    • 引入缓存--冷热分离架构
    • 数据库分库分表存储集群
    • 微服务架构
    • 小结

分布式系统

只有一台服务器负责所有的工作称为单机架构,但是一台主机的硬件资源是有上限的,当同一时刻主机收到的请求很多,就可能导致主机的某个硬件资源不够用了,无论是哪个方面不够用都可能会导致服务器处理请求的时间变长甚至会出错。

那么遇到这种情况应该怎么处理呢?

  1. 对应用软件进行优化,也就是对代码进行优化
  2. 引入更多的硬件资源,但是由于一台主机能够扩展的硬件资源是有限的,因此这并不能应对更复杂的问题
  3. 引入多台主机,一旦引入了多台主机就可以称为是分布式系统

引入分布式系统是万不得已的选择,因为多台机器就会导致复杂程度会大大提高,出现bug的概率也会更高

应用数据分离架构

将应用服务器和存储服务器分开。像应用服务器里面会包含更多的业务逻辑,所以就会消耗更多的CPU和内存,因此对于应用服务器就可以选用CPU和内存更强的主机。想存储服务器就需要更大的硬盘空间,更快的数据访问速度,因此可以选用更大硬盘的主机

image-20231027171928802

应用服务集群架构

应用服务器可能会比较吃CPU和内存如果把CPU或者内存吃没了,此时应用服务器就顶不住了。

此时引入更多的应用服务器,就可以有效解决上述问题

用户的请求先到负载均衡器,再由负载均衡器分发给应用服务器,就可以让单个应用服务器承担总请求数的一部分,尽量避免承担压力过大。这里和多线程的方式如出一辙,只不过多线程是局限于单个服务器中的。

负载均衡器就好像小组里的领导,负责管理并将任务分配给组里的每个成员。常见的分配算法例如轮询算法,当然需要根据不同的场景应用不同的分配算法

image-20231027172454994

那么又有问题了,这样子看起来负载均衡器不就承担了所有请求嘛。实际上负载均衡器对于请求量的承担能力要远超过应用服务器的,因

为负载均衡器并不需要处理请求的业务逻辑,它只是负责分配工作。如果负载均衡器确实是顶不住了,那只需要引入更多的负载均衡器即

读写分离 / 主从分离架构

现在的架构里,无论扩展多少台服务器,这些请求最终都会从数据库读写数据,到一定程度之后,数据的压力称为系统承载能力的瓶颈

点。我们可以像扩展应用服务器一样扩展数据库服务器么

答案是否定的,因为数据库服务有其特殊性:如果将数据分散到各台服务器之后,数据的一致性将无法得到保障

那么可以这样处理保留一个主要的数据库作为写入数据库,其他的数据库作为从属数据库。从库的所有数据全部来自主库的数据,经过同步后,从库可以维护着与主库一致的数据。然后为了分担数据库的压力,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中

image-20231027173517024

引入缓存–冷热分离架构

对于数据库而言,它天然的响应速度都是较慢的,因为都是要去访问硬盘。

因此为了解决这个问题,就引入了缓存的概念,缓存服务器只存放一小部分的热点数据

一般而言缓存的存储就好像二八原则,因为缓存要想快就只能变小,因此不能存储太多的数据

image-20231027173831694

Redis主要的出现场景就是缓存

数据库分库分表存储集群

引入分布式系统,不光要能够处理更大的请求量(并发量),也需要去应对更大的数据量

随着业务的数据量增大,大量的数据存储在同⼀个库中已经显得有些力不从心了,所以可以按照业务将数据分别存储。也就是可以引入多个数据库服务器,每个数据库服务器存储一个或者一部分数据库

image-20231027174751262

每个存储集群中对应一个或者一部分的数据,例如一个存储集群里负责存储商品评论的数据,一个负责存储用户信息等

具体的分库分表还是得要结合实际的使用场景展开分析

微服务架构

上述的应用服务器,一个服务器程序里面做了很多的业务,这就可能导致一个服务器会变得越来越复杂

为了更方便的维护,就可以把一个复杂的服务器拆分成更多的功能更单一但是更小的服务器—微服务器

使用微服务可以更方便于功能的复用,同时可以给不同的服务进行不同的部署

image-20231027224512650

引入微服务就需要付出一些代价

  1. 整个系统的性能会下降,拆分更多的服务意味着多个功能之间要更依赖网络通信。通常情况下网络的速度比硬盘还要慢。
  2. 系统复杂程度提高,可用性会受到影响。这就需要更丰富的监控中心等手段来保证系统的可用性

小结

  1. 单机架构(应用程序 + 数据库服务器)
  2. 数据库和应用分离(应用程序和数据库服务器分别在不同主机上部署)
  3. 引入负载均衡器(应用服务器 — 集群)(有负载均衡器分发任务给集群中的应用服务器)
  4. 引入数据库主从结构(读写分离)(主写从读)(主修改过的数据需要同步给从)
  5. 引入缓存(冷热数据分离)(Redis在分布式系统中通常就扮演着缓存)
  6. 数据库分库分表
  7. 引入微服务架构(从业务上拆分应用服务器)

所谓的分布式系统本质上就是想办法引入更多的硬件资源

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

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

相关文章

借助 Pyroscope 对 Amazon EKS 容器服务进行 Continuous Profiling 诊断应用性能

Continuous Profiling 的现状 在可观测领域,Trace、Log、Metrics 作为“三大支柱”,帮助工程师更方便的洞察应用的内部问题。然而,对于开发人员而言,经常还需要深入应用程序,找出造成瓶颈的根本原因。在可观测的“三大…

Annotorious入门教程:图片注释工具

本文简介 最近有工友问我前端怎么给图片做标注。使用 Fabric.js 或者 Konva.js 等库确实可以实现,但我又好奇有没有专门做图片标注的工具呢? 在网上搜了一下发现 Annotorious 可以实现这个功能。Annotorious 提供了图片注释和标注功能,而且…

UVa10976 Fractions Again?!(分数拆分)

1、题目 2、题意 输入正整数 k k k,找到所有正整数 x ≥ y x \ge y x≥y,使得 1 k 1 x 1 y \frac{1}{k} \frac{1}{x} \frac{1}{y} k1​x1​y1​。 3、分析 既然要求找出所有的 x , y x,y x,y,枚举对象自然是 x , y x,y x,y了。可…

​Vue2【双向数据绑定/响应式原理】

目录 初始化 initProps():父组件传的 props 列表,proxy() 把属性代理到当前实例上 vm._props.xx 变成 vm.xx initData():判断data和props、methods是否重名,proxy() 把属性代理到当前实例上 this.xx observe():给…

c++实现dijskstra算法

图 我一开始写成了最小生成树的代码&#xff0c;最小生成树一直在选最小的那条边&#xff0c;对每个节点来说&#xff0c;它到原点的距离不一定是最近的。 代码 #include<iostream> using namespace std; #include<list> #include<vector>class Node { pub…

RocketMQ事务消息 超时重发还是原来的消息吗?

以下面的一个demo例子来分析一下&#xff0c;探索RocketMQ事务消息原理。 public static final String PRODUCER_GROUP "tran-test";public static final String DEFAULT_NAMESRVADDR "127.0.0.1:9876";public static final String TOPIC "Test&qu…

如何理解Quadratic Weighted Kappa?

Motivation 假定我们现在有 N N N个作文样例&#xff0c;以及它们对应的人类评分和GPT评分。评分一共有 C C C个互斥类别&#xff0c;分别是{0,1,2,3}。现在我们要衡量人类评分和GPT评分的一致性。 一个很直观的想法是&#xff0c;画出混淆矩阵&#xff0c;然后将对角线上的值…

Linux Centos7安装后,无法查询到IP地址,无ens0,只有lo和ens33的解决方案

文章目录 前言1 查看network-scripts目录2 创建并配置 ifcfg-ens33 文件3 禁用NetworkManager4 重新启动网络服务总结 前言 在VMware中&#xff0c;安装Linux centos7操作系统后&#xff0c;想查询本机的IP地址&#xff0c;执行ifconfig命令 ifconfig结果如下&#xff1a; 结…

吴恩达《机器学习》1-5:模型描述

一、单变量线性回归 单变量线性回归是监督学习中的一种算法&#xff0c;通常用于解决回归问题。在单变量线性回归中&#xff0c;我们有一个训练数据集&#xff0c;其中包括一组输入特征&#xff08;通常表示为&#x1d465;&#xff09;和相应的输出目标&#xff08;通常表示为…

UVa140 Bandwidth(带宽)

1、题目 2、题意 给出一个 n &#xff08; n ≤ 8 &#xff09; n&#xff08;n≤8&#xff09; n&#xff08;n≤8&#xff09;个结点的图G和一个结点的排列&#xff0c;定义结点 i i i 的带宽 b ( i ) b(i) b(i) 为 i i i 和相邻结点在排列中的最远距离&#xff0c;而所…

Ansible上通过roles简化playbook演示介绍

目录 一.roles介绍 1.作用 2.role的目录结构 3.role和tasks的执行优先级顺序 二.自定义一个httpd的角色 1.完整目录结构展示 2.主要的各个目录配置 &#xff08;1&#xff09;vars目录和templates目录 &#xff08;2&#xff09;tasks目录和handlers目录 &#xff08…

操作系统中套接字和设备独立性软件的关系

网络编程就是编写程序让两台联网的计算机相互交换数据。在我们不需要考虑物理连接的情况下&#xff0c;我们只需要考虑如何编写传输软件。操作系统提供了名为“套接字”&#xff0c;套接字是网络传输传输用的软件设备。 这是对软件设备的解释&#xff1a; 在操作系统中&#…

Unity ScrollView最底展示

Unity ScrollView最底展示 问题方案逻辑 问题 比如在做聊天界面的时候我们肯定会使用到ScrollView来进行展示我们的聊天内容&#xff0c;那么这个时候来新消息的时候就需要最底展示&#xff0c;我认为这里有两种方案&#xff1b; 一种是通过算法每一条预制体的高度*一共多少…

轮转数组(Java)

大家好我是苏麟 , 这篇文章是凑数的 ... 轮转数组 描述 : 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 题目 : 牛客 NC110 旋转数组: 这里牛客给出了数组长度我们直接用就可以了 . LeetCode 189.轮转数组 : 189. 轮…

Python---break关键字对for...else结构的影响

for循环中添加else结构 循环可以和else配合使用&#xff0c; else下方缩进的代码指的是当循环正常结束之后要执行的代码。 强调&#xff1a; 循环 正常结束&#xff0c;else之后要执行的代码。 非正常结束&#xff0c;其else中的代码是不会执行的。&#xff08;如遇到br…

类和对象(1):类,对象,this指针

面向过程和面向对象初步认识&#xff1a; C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出问题求解的步骤&#xff0c;用函数调用逐步解决。C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。…

【.NET Core】创建一个在后台运行的控制台程序(ConsoleApp)

文章目录 1. 添加Nuget包2. 修改Program.cs3. 添加TestService 借助.NET的通用主机&#xff08;IHostBuilder&#xff09;可以轻易创建一个可以执行后台任务的程序 1. 添加Nuget包 Microsoft.Extensions.Hosting 2. 修改Program.cs 通过Host获取IHostService&#xff0c;然…

SSD: Single Shot MultiBox Detector(2016.11)

文章目录 AbstractIntroduction此前本文贡献总结如下: The Single Shot Detector (SSD)SSD ModelMulti-scale feature maps for detectionConvolutional predictors for detectionDefault boxes and aspect ratiosTrainingMatching strategyTraining objectiveChoosing scales …

python---for循环结构中的else结构(是同级关系)

为什么需要在for循环中添加else结构 循环可以和else配合使用&#xff0c; else下方缩进的代码指的是当循环正常结束之后要执行的代码。 强调&#xff1a; 循环 正常结束&#xff0c;else之后要执行的代码。 非正常结束&#xff0c;其else中的代码是不会执行的。&#xf…

GienTech动态|入选软件和信息技术服务名牌企业;荣获城市数字化转型优秀案例;参加第四届深圳国际人工智能展

中电金信入选“2023第二届软件和信息技术服务名牌企业” 近日&#xff0c;中国电子信息行业联合会发布了“2023第二届软件和信息技术服务名牌企业”名单&#xff0c;中电金信入选。此名单发布原则&#xff0c;重点突出技术创新力。突出市场影响力&#xff0c;品牌建设良好&…