浅谈分布式系统


目录

  • 一、单机架构
  • 二、分布式架构
    • 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)在语言理解和互动决策任务中展现出强大的能力,但它们在推理(例如思维链提示)和…

画图工具之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 生命线&…

【大模型】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…

Leetcode刷题2

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

WSL调用docker

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

java的unsafe

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

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

go 环境配置 下载安装包 官网(https://go.dev/dl/) 下载地址(国内)(https://golang.google.cn/dl/) 根据自己的操作系统选择下载即可 下载后安装 记住地址 比如: D:\work\devtool\go 配置系统环境变量 PATH 指向 go 的安装 bin 目录 比如: 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;根据⼀个范围查找元素的操作。但…

Unity实现TableView

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

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

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

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;对人工智能、机器学习、进化…

C++中获取int最大与最小值(补)

上文中&#xff0c;我们学习了C中获取int最大与最小值的两种方法&#xff1a;C库和移位运算&#xff0c;这篇文章将解决在移位运算中遇到的各种报错&#xff0c;并提出一种新的生成int最值的方法 上文链接&#xff1a;http://t.csdnimg.cn/cn7Ad 移位运算取最值常见报错 Dev…

汇编语言(STC89C52)

指令是计算机计算CPU根据人的意图来执行某种操作的命令。一台计算机所执行的全部指令的集合&#xff0c;称为这个CPU的指令系统。而想要使计算机按照人们的要求完成一项工作&#xff0c;就必须让CPU按顺序执行预设的操作&#xff0c;即逐条执行人们编写的指令。这种按照人民要求…

C++ 写的_string类,兼容std::string, MFC CString和 C# 的string

代码例子&#xff1a; using namespace lf; int main() { CString s1 _t("http://www.csdn.net"); _string s2 s1; CString s3 s2; _pcn(s1); _pcn(s2); _pcn(s3); return 0; } 输出&#xff1a; _Str.h /***************************************…

网创教程:WordPress插件网创自动采集并发布

网创教程&#xff1a;WordPress插件网创自动采集并发布 使用插件注意事项&#xff1a; 如果遇到404错误&#xff0c;请先检查并调整网站的伪静态设置&#xff0c;这是最常见的问题。需要定制化服务&#xff0c;请随时联系我。 本次更新内容 我们进行了多项更新和优化&#x…

深入解析kube-scheduler的算法自定义插件

目录 ​编辑 一、问题引入 二、自定义步骤 三、最佳实践考虑 一、问题引入 当涉及到 Kubernetes 集群的调度和资源分配时&#xff0c;kube-scheduler 是一个关键组件。kube-scheduler 负责根据集群的调度策略&#xff0c;将 Pod 分配到适当的节点上。kube-scheduler 默认使…

pyqt6入门案例

效果预览 hello.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Dialog</class><widget class"QDialog" name"Dialog"><property name"geometry"><…

android studio接入facebook踩坑1

今天在接入facebook第三方登录的时候&#xff0c;点击登录按钮&#xff0c;APP闪退&#xff0c;并报错 java.lang.RuntimeException Failure delivering result ResultInfo{whonull,request64206,result-1} 新文章链接https://lengmo714.top/facebook1.html 如下图&#xff1a;…

html多节点生成图片并导出zip包

html多节点生成图片并导出zip包 背景 在做项目时遇到一个要将html节点展示的图片列表统一导出为zip包的需求。 难点 将html节点生成图片将多张图片加入zip包中&#xff0c;然后下载 解决html生成图片问题 参考html截图的思路使用 pnpm add html-to-image如何将图片资源生成z…