浅谈分布式系统


目录

  • 一、单机架构
  • 二、分布式架构
    • 1、应用服务与数据库分离
    • 2、负载均衡
    • 3、数据库读写分离
    • 4、引入缓存
    • 5、数据库分库分表
    • 6、引入微服务


一、单机架构

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

在这里插入图片描述

绝大多数公司的产品,都是这种单机架构。现在计算机硬件发展迅速,哪怕只有一台服务器,但是这台服务器性能很好,可以支持非常高的并发,非常大的数据存储。单机架构足以支撑。

二、分布式架构

一台主机的硬件资源是有上限的,包括不限于:CPU、内存、硬盘、网络…等等。服务器每次收到一个请求,都是需要消耗上述的一些资源的。如果同一时刻,处理的请求多了就可能会导致某个硬件资源不够用了。无论是那个方面不够用了,都可能会导致服务器处理请求的时间变得很长,甚至于处理出错。而一台主机上面能增加的硬件资源是有限的,取决于主板的拓展能力。如果一台主机拓展到了极限还是不够,就只能引入多台主机了。一旦引入了多台主机,系统就可以称作为“分布式系统”。引入分布式,一定是万不得已。

1、应用服务与数据库分离

在这里插入图片描述

针对不同的服务配备不同的服务器,例如应用服务器里面可能会包含很多的业务逻辑,会占用大量的CPU资源。而数据库服务器,则需要更大的硬盘空间,更快的数据访问速度,可以配备更大的硬盘服务器。

2、负载均衡

假设在上述情况下,应用服务器还是没有抗住,就需要再引入更多的应用服务器来解决上述问题。

在这里插入图片描述

用户的请求,会先到达负载均衡器/网关服务器。假设现在有1w个用户请求,有2个应用服务器,此时按照负载均衡的方式,就可以让每个应用服务器承担5k的访问量。负载均衡器对于请求量的承担能力,是远远超过应用服务器的。负载均衡器是分配工作,不需要执行任务。

3、数据库读写分离

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

在这里插入图片描述

实际应用场景种,读的频率是远高于写的频率。主服务器一般是一个,从服务器要有很多个(一主多从)。从节点的数据,要从主节点这同步过来,以主节点为主。

4、引入缓存

数据库天然就有个问题,那就是响应速度慢。我们可以把数据区分为“冷热”数据,热点数据放到缓存中,缓存的访问速度往往比数据库快很多。

在这里插入图片描述

缓存服务器中会存放一些小部分的热点数据,热点数据是会被频繁访问到的数据。这里的缓存服务器,就可以用Redis,从数据库存储的仍然是全量数据。这时候,缓存服务器就帮数据库服务器缓解了压力。

5、数据库分库分表

引入分布式系统,不光要能够去应对更高的请求量(并发量),同时也要能应对更大的数据量。一台主句存不下,就需要多台主机来存储。针对数据库进行进一步的拆分,分库分表。引入多个数据库服务器,每个数据库服务器存储一个或者一部分的数据库。

在这里插入图片描述

具体如何分库分表,要结合实际的业务场景来展开。业务至关重要,技术知识给业务提高支持。业务决定了技术。

6、引入微服务

前面的应用服务器通常都是一个服务器程序,其中包含了很多的业务逻辑,这可能导致单个服务器的代码变得越来越复杂。为了便于代码的维护,可以将这样一个复杂的服务器拆分为更多、功能更单一但更小的服务器,这就是所谓的微服务。

在这里插入图片描述

引入微服务的代价:

  1. 系统的性能会下降:拆除更多的服务,多个功能之间要更依赖网络通信,网络通信的速度可能会比硬盘慢。
  2. 系统复杂程度更高,可用性收到影响:服务器更多了,出问题的概率更大了。

引入微服务的优势:

  1. 解决了人的管理问题。
  2. 使用微服务,可以更方便于功能的复用。
  3. 给不同的服务进行不同的部署。

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

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

相关文章

[论文笔记]REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS

引言 今天带来一篇经典论文REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS的阅读笔记,论文中文意思是 在语言模型中协同推理和行动。 虽然大型语言模型(LLMs)在语言理解和互动决策任务中展现出强大的能力,但它们在推理(例如思维链提示)和…

Rust 中 Mutex 的用法

在 Rust 中,Mutex(互斥锁)是用于同步并发访问共享资源的机制。Rust 标准库中的 Mutex 结构体位于 std::sync::Mutex 中,它提供了线程安全的数据访问。Mutex 保证了在同一时间只有一个线程可以访问被锁定的数据。 以下是 Mutex 的…

画图工具之PlantUML插件使用

文章目录 1 PlantUML插件1.1 引言1.2 什么是PlantUML1.3 PlantUML插件1.3.1 IntelliJ IDEA中插件1.3.2 VS Code中插件1.3.3 使用例子 1.4 PlantUML时序图语法1.4.1 声明参与者1.4.2 消息传递1.4.2.1 同步消息1.4.2.2 异步消息1.4.2.3 返回消息1.4.2.4 自调用 1.4.3 生命线&…

比特米盒2代刷入ARMBIAN

概述 因为最近在整家庭NAS,类似魔百盒之类的机顶盒无法内置硬盘,所以将目光盯上了比特米盒、私家云以及和逸云,海鲜市场一番对比下来也就比特米盒(CM2-B)的性价比最高,而且还支持双盘位,所以采…

【大模型】fineturn Q-wen

github上下载qwen1_5源码 修改finetun.sh 然后在路径qwen1_5/examples/sft下修改finetun.sh, 内容如下 #!/bin/bash export CUDA_DEVICE_MAX_CONNECTIONS1 DIRpwd# Guide: # This script supports distributed training on multi-gpu workers (as well as single-worker trai…

批处理--将指定磁盘根目录所有隐藏的文件(包括文件夹)去除隐藏属性

如下是实现的脚本:-------------------------------------------------- :loopcd / set /p driverName"请输入驱动器盘符(例如:C或c):"%driverName%: dir /AH %driverName%: pausefor /f "delims"…

Leetcode刷题2

文章目录 前言寻找两个正序数组的中位数1️⃣ 双指针快速排序2️⃣ 第k小数解法 Z 字形变换1️⃣ 个人解法2️⃣巧妙解法13️⃣巧妙解法2 字符串转换整数 (atoi)1️⃣ 常规方法2️⃣ 作弊方法😫 整数转罗马数字1️⃣ 常规方法:按照给定规则写出判断条件即…

前端面试题日常练-day32 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末。 1. 在jQuery中,以下哪个选项用于获取元素的文本内容? a) text() b) html() c) val() d) attr() 2. jQuery中,以下哪个选项用于在元素上添加一个自定义数据属性…

感动心灵的声音——带情绪的AI配音技术在影视和广告领域的应用

近年来,随着人工智能技术的飞速发展,带情绪的AI配音技术作为其中一项重要应用,正逐渐在影视和广告行业展现其独特的魅力和应用价值。传统的配音工作不仅需要具备优秀的嗓音和表演能力,还要求配音演员能够准确捕捉并表达角色的情感…

WSL调用docker

WSL(windows subsystem linux)是window系统的原生linux子系统,用于代码开发很方便。 希望在wsl里面运行docker,首先要安装docker在WSL中使用,大部分人的第一想法肯定是用以下命令行安装(个人不推荐&#x…

java的unsafe

在Java中,sun.misc.Unsafe 是一个强大且危险的类,它提供了一些直接操作内存、对象和线程的底层功能。这个类通常不鼓励普通开发者使用,因为它绕过了Java语言的一些安全性和内存管理机制,可能会导致难以追踪的错误和安全漏洞。 Un…

前端生成二维码

直接img标签显示 npm i use_qrcode npm包地址 <img :src"qrcode" alt"QR Code" /> const txt: any ref(https://baidu.com) const qrcode useQRCode(txt) const qrcodeLogo useQRCode(txt, { logoSrc: https://www.antdv.com/assets/logo.1ef800…

2.go环境配置与开发工具选择

go 环境配置 下载安装包 官网(https://go.dev/dl/) 下载地址(国内)(https://golang.google.cn/dl/) 根据自己的操作系统选择下载即可 下载后安装 记住地址 比如&#xff1a; D:\work\devtool\go 配置系统环境变量 PATH 指向 go 的安装 bin 目录 比如&#xff1a; D:\work…

若依前端vue实现 输入框下拉选择加搜索用户

探索代码以及详细的注解 <template><div><el-select v-model"selectedUserId" filterable placeholder"选择用户" change"handleChange"><el-optionv-for"user in filteredUsers":key"user.userId":l…

集合框框框地架

这一次来介绍一下常用的集合&#xff1a; 首先是两种集合的《家庭系谱图》&#xff1a; 接下来介绍一下集合的种类&#xff1a; Collection Set SetTreeSet&#xff1a;基于红⿊树实现&#xff0c;⽀持有序性操作&#xff0c;例如&#xff1a;根据⼀个范围查找元素的操作。但…

如何使用纯原生的ADO.NET技术进行数据读取

目录 1. 引用命名空间 2. 创建连接字符串 3. 打开数据库连接 4. 执行SQL查询 5. 读取结果集 6. 处理异常和关闭连接 1. 引用命名空间 在代码文件中引用几个关键的System.Data.SqlClient命名空间&#xff0c;这些命名空间包含了用于数据库操作的类。 using System.Data.Sq…

Unity实现TableView

基于Scrollview封装的TableView&#xff0c;实现对视野外的Cell回收利用&#xff0c;减少创建Cell的开销。 核心逻辑如下&#xff1a; /***************************************动态使用cell核心逻辑开始 **************************************///计算所有cell的坐标信息 …

利用java8 的 CompletableFuture 优化 Flink 程序,性能提升 50%

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

flume sink 简介及官方用例

1、HDFS Sink 此sink将事件写入 Hadoop 分布式文件系统 &#xff08;HDFS&#xff09; 中。它目前支持创建文本和序列文件。它支持两种文件类型的压缩。可以根据经过的时间或数据大小或事件数定期滚动文件&#xff08;关闭当前文件并创建一个新文件&#xff09;。它还按事件起…

AI图书推荐:用100个ChatGPT提示词掌握Python编程

《用100个ChatGPT提示词掌握Python编程》&#xff08;ChatGPT:Your Python Coach Mastering the Essentials in 100 Prompts&#xff09; 塞尔吉奥罗哈斯-加莱亚诺&#xff08;Sergio Rojas-Galeano&#xff09;是一位热情的计算机科学家&#xff0c;对人工智能、机器学习、进化…