浅谈分布式系统

server/2024/9/24 11:21:33/

单机架构  

  单机架构就是只有一台服务器,这台服务器负责所有的工作。

 初期,在用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。

当前绝大部分公司的产品,都是这种单机架构

分布式系统

如果业务进一步增长,用户量和数据量都水涨船高,一台主机难以应付的时候,就需要引入更多的硬件资源。而一台主机上能增加的硬件资源是有限的,一台主机拓展到极限了,就只能引入更多主机了。

一旦引入多台主机了,系统就可以称为是"分布式系统"。

:引入分布式,是万不得已。引入分布式意味着系统的复杂程度会大大提高。

数据库与应用分离

我们选择了将应⽤和数据分离的做法,可以最小代价的提升系统的承载能⼒。

和之前架构的主要区别在于将数据库服务独⽴部署在同⼀个数据中⼼的其他服务器上,应⽤服务通过⽹络访问数据。

负载均衡

我们的系统受到了用户的欢迎,并且出现了爆款,单台应⽤服务器已经⽆法满⾜需求了。我们的
单机应⽤服务器⾸先遇到了瓶颈,摆在我们技术团队面前的有两种⽅案:

1、垂直扩展 /纵向扩展 Scale Up:通过购买性能更优、价格更⾼的应⽤服务器来应对更多的流量。这种⽅案的优势在于完全不需要对系统软件做任何的调整;但劣势也很明显:硬件性能和价格的增⻓关系是⾮线性的,意味着选择性能 2 倍的硬件可能需要花费超过 4 倍的价格,其次硬件性能提升是有明显上限的。

2、水平扩展 / 横向扩展 Scale Out:用户先访问负载均衡器/网关,再由负载均衡器分发请求到各个应用服务器。对于负载均衡器来说,有很多的负载均衡具体的算法。如轮询:即非常公平地将请求依次分给不同的应⽤服务器。

我们这里选择水平拓展。

:负载均衡器对于请求量的承担能力是远超过应用服务器的。因为负载均衡器只负责分配请求,并不处理请求。所以不必担心负载均衡器的性能问题。

数据库读写分离

  增加应用服务器,确实能够处理更高的请求量。但是随之存储服务器,要承担的请求量也就更多了。

为了解决该问题,可以引入数据库读写分离:

也就是引入多台数据库服务器,分为两种:主数据库从数据库

其中我们让主数据库只负责写操作,从数据库只负责读操作。同时主库也会把数据实时的同步给从数据库。这样就减少了每一台服务器的压力。主服务器一般只有一个,负责执行最多的操作,从服务器可以有多个,执行其他操作。同时从数据库可以通过负载均衡的方式,让应用服务器进行访问。

引入缓存

数据库有个天然的问题,响应速度比较慢。为了进一步提高数据的访问效率,还可以把数据区分为“冷热”,热点数据放到缓存中,缓存的访问速度往往比数据库快多了。

:数据库里存储的仍然是完整的全量数据。

  后续应用服务器在读取数据的时候,就可以先读取缓存,如果缓存中数据存在,就直接返回。如果缓存里面不存在,再去读数据库。使数据库服务器的压力进一步降低。

数据库分库分表

  引入分布式系统,不光要去能够应对更高的请求量(并发量),同时也要能够应对更大的数据量。是否可能会出现一台服务器已经存不下数据了呢?

我们可以把数据库再进行进一步的拆分:分库分表

本来一个数据库服务器,这个数据库服务器上有多个数据库(指逻辑上的数据集合),现在可以引入多个数据库服务器,每个数据库服务器存储一个或者一部分数据库

如果某个表特别大,大到一台主机存不下,也可以针对表进行拆分。

具体分库分表如何实现,还是要结合实际的业务场景来展开。

引入微服务

  之前的应用服务器,使一个服务器程序里面做了很多的业务。这就可能会导致这一个服务器的代码变的越来越复杂。为了更方便于代码的维护,就可以把这样的一个复杂的服务器,拆分成更多的,功能更单一,但是更小的服务器。称为微服务

当应用服务器变得复杂了,势必就需要更多的人来维护。当人多了,就需要配套的管理把这些人组织好。因此就需要划分组织结构,分成多个组。这些组就要进行分工。按照功能,拆分成多组微服务,就可以有利于上述人员的组织结构的分配。因此,引入微服务本质上是在解决“”的问题。

:引入微服务,付出的代价

1、系统的性能下降。拆出来更多的服务,多个功能之间要更依赖网络通信。网络通信的速度很可能是比硬盘还慢的。

2、系统复杂程度提高,可用性受到影响。服务器更多了,出现问题的概率就更大了。

微服务优势

1、解决了人员分配的问题。

2、使用微服务,可以更方便于功能的复用

3、可以给不同的服务进行不同的部署。

补充概念

应⽤(Application)/ 系统(System):一个应用就是一个/组服务器程序。

模块(Module)/ 组件(Component):一个应用里面有很多个功能,每个独立的功能就可以称为一个模块/组件。

分布式(Distributed):引入多个服务器,协同配合完成一系列的工作。一般指物理上的多个主机。

集群(Cluster):引入多个服务器,协同配合完成一系列的工作。一般指逻辑上的多个主机。

主(Master)/ 从(Slave):分布式系统中一种比较典型的结构。多个服务器节点,其中一个是主,另外的是从。从节点的数据要从主节点这里同步过来。

中间件(Middleware):和业务无关的服务(功能更通用的服务)。如数据库,缓存,消息队列.....

关于分布式系统的一些评价指标:

可用性(Availability):系统整体可用的时间/总的时间

响应时长(Response Time RT):衡量服务器的性能。处理一次请求花费多少时间。

吞吐(Throughput)vs 并发(Concurrent):衡量系统处理请求的能力。也是衡量性能的一种方式。

以上,关于分布式系统,希望对你有所帮助。


http://www.ppmy.cn/server/121329.html

相关文章

构建自己的文生图工具:Python + Stable Diffusion + CUDA

构建自己的文生图工具:Python Stable Diffusion CUDA 前言概述环境搭建安装PyTorch安装Stable Diffusion编写Python代码结论结语 前言 在这个数字化和人工智能飞速发展的时代,图像生成技术正逐渐成为现实。想象一下,只需输入几个关键词&…

[ffmpeg] 录制

整理 ffmpeg 录制用到的一些 API,以及一些理解 API调用 常用API AVFormatContext *avformat_alloc_context(void); // 创建 avformat 上下文结构体 void avformat_free_context(AVFormatContext *s);// int avformat_alloc_output_context2(AVFormatContext **c…

我的AI工具箱Tauri版-VideoClipMixingCut视频批量混剪

本教程基于自研的AI工具箱Tauri版进行VideoClipMixingCut视频批量混剪。 VideoClipMixingCut视频批量混剪 是自研AI工具箱Tauri版中的一款强大工具,专为自动化视频批量混剪设计。该模块通过将预设的解说文稿与视频素材进行自动拼接生成混剪视频,适合需要…

NAS求变,“0成本、低门槛”的鲁大师能否脱颖而出?

互联网科技的高速发展,推动了全球信息爆炸的进程。如何高效地存储和使用这些海量数据成了困扰企业、乃至个人的一大难题。从U盘、到移动硬盘、再到各种网云盘、以及愈发大众化的NAS……存储解决方案也随着个人及家庭数据存储需求的不断增长而发展着。如今&#xff0…

LabVIEW提高开发效率技巧----使用事件结构优化用户界面响应

事件结构(Event Structure) 是 LabVIEW 中用于处理用户界面事件的强大工具。通过事件驱动的编程方式,程序可以在用户操作时动态执行特定代码,而不是通过轮询(Polling)的方式不断检查界面控件状态。这种方式…

ansible批量安装postgresql软件

本文为杭州云贝教育 刘老师 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 随着分布式系统和大规模应用的普及,自动化部署和管理变得越来越重要。Ansible 是一种流行的自动化工具,它…

多态的使用和原理(c++详解)

一、多态的概念 多态顾名思义就是多种形态,它分为编译时的多态(静态多态)和运行时的多态(动态多态),编译时多态(静态多态)就是函数重载,模板等,通过不同的参数…

C#常用数据结构栈的介绍

定义 在C#中&#xff0c;Stack<T> 是一个后进先出&#xff08;LIFO&#xff0c;Last-In-First-Out&#xff09;集合类&#xff0c;位于System.Collections.Generic 命名空间中。Stack<T> 允许你将元素压入栈顶&#xff0c;并从栈顶弹出元素。 不难看出&#xff0c;…