浅谈分布式系统
单机架构
单机架构就是只有一台服务器,这台服务器负责所有的工作。
初期,在用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。

当前绝大部分公司的产品,都是这种单机架构。
分布式系统
如果业务进一步增长,用户量和数据量都水涨船高,一台主机难以应付的时候,就需要引入更多的硬件资源。而一台主机上能增加的硬件资源是有限的,一台主机拓展到极限了,就只能引入更多主机了。
一旦引入多台主机了,系统就可以称为是"分布式系统"。
注:引入分布式,是万不得已。引入分布式意味着系统的复杂程度会大大提高。
数据库与应用分离
我们选择了将应⽤和数据分离的做法,可以最小代价的提升系统的承载能⼒。
和之前架构的主要区别在于将数据库服务独⽴部署在同⼀个数据中⼼的其他服务器上,应⽤服务通过⽹络访问数据。

负载均衡
我们的系统受到了用户的欢迎,并且出现了爆款,单台应⽤服务器已经⽆法满⾜需求了。我们的
单机应⽤服务器⾸先遇到了瓶颈,摆在我们技术团队面前的有两种⽅案:
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):衡量系统处理请求的能力。也是衡量性能的一种方式。
以上,关于分布式系统,希望对你有所帮助。
相关文章:
浅谈分布式系统
单机架构 单机架构就是只有一台服务器,这台服务器负责所有的工作。 初期,在用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。 当…...
QT 自定义可拖动缩放的无边框窗口,可用于mainmindow, widget
1. 用于拖动,缩放的工具类 “WindowControl.h” #ifndef WINDOWCONTROL_H #define WINDOWCONTROL_H#include <QObject> #include <QRubberBand> #include <QStyleOptionFocusRect> #include <QStylePainter>class RubberBand; class Curs…...
鸿蒙 OS 开发零基础快速入门教程
视频课程: 东西比较多, 这里主要分享一些代码和案例. 开关灯效果案例: 开灯 开关灯效果案例: 关灯 Column 和 Row 的基本用法 Entry Component struct Index {State message: string 张三;build() {// 一行内容Row() {// 一列内容Column() {// 文本内容Text(this.mess…...
yolo介绍
YOLO(You Only Look Once)是一种目标检测算法。 一、主要特点 1. 速度快:YOLO 能够快速处理图像,实现实时目标检测。与其他一些目标检测算法相比,它在处理速度上具有明显优势,可以满足对实时性要求较高的应…...
传输层 II(TCP协议——协议的特点、报文段、连接管理)【★★★★】
(★★)代表非常重要的知识点,(★)代表重要的知识点。 一、TCP 协议的特点 TCP 是在不可靠的 IP 层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复问题。TCP 是 TCP/IP 体系中非…...
质量小议47 - AI写用例
试着用AI写测试用例 AI替代基础性工作,帮助人思考,将会是更全面、更细致 时替代还是辅助 提问:密码输入框 测试用例评价指标- 功能性 - 可靠性 - 易用性 - 效率- 可维护性 - 可移植性基本思路 - 输入:遵从设计逻辑 和 系…...
etcd 集群搭建与测试指南
etcd 集群搭建与测试指南 一、容器搭建 1. 拉取 etcd 镜像 首先,需要从 Docker Hub 拉取 etcd 的镜像: docker pull quay.io/coreos/etcd:v3.3.12. 创建自定义网络 为了设置容器的固定 IP,需要创建一个自定义网络: docker n…...
写毕业论文用什么软件?分享6款好用的AI论文写作软件网站
撰写毕业论文是一项既重要又具挑战性的任务,尤其是在当今数字化时代,AI写作工具已经成为大学生撰写毕业论文的重要辅助手段。这些工具不仅能够提高写作效率,还能帮助学生生成高质量的文稿。以下是六款备受推荐的AI写毕业论文软件,…...
【技术解析】wx.request 封装:优化小程序网络请求的最佳实践
在当今的小程序开发领域,网络请求是构建动态应用的核心。微信小程序提供的 wx.request API 虽然强大,但在面对复杂业务逻辑时,其直接使用方式可能会带来一系列问题。本文将深入探讨封装 wx.request 的必要性,并提供一套实用的封装…...
9.24 C++ 常成员,运算符重载
//my_string.cpp #include "my_string.h" #include <iostream> #include <cstring>using namespace std;My_string::My_string():size(15){this->ptr new char[size];this->ptr[0] \0; //表示串为空串this->len 0;}//有参构造My_…...
C#设计模式之访问者模式
总目录 前言 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为,如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,…...
一次RPC调用过程是怎么样的?
注册中心 RPC(Remote Procedure Call)翻译成中文就是 {远程过程调用}。RPC 框架起到的作用就是为了实现,调用远程方法时,能够做到和调用本地方法一样,让开发人员更专注于业务开发,不用去考虑网络编程等细节…...
鸭脖变“刺客”,啃不起了
撰文|ANGELICA 编辑|ANGELICA 审核|烨 Lydia 声明|图片来源网络。日晞研究所原创文章,如需转载请留言申请开白。 你有多久没吃卤味了? 2020年之后,人们对于几大卤味巨头的关注度正在下降。 …...
力扣 —— 删除有序数组中的重复项
题目思路 两个指针,一个是游标的功能,负责遍历整个数组,一个是定位器的功能,如果有相等的则表示定位器目前指向的元素是重复的,定位器不动,等待游标往下找到不重复的数填充进来,因为游标会遍历…...
rmdir :删除空文件夹
一、命令简介 在 Linux 系统中,rmdir 命令用于删除空目录(文件夹)。 二、命令参数 rmdir 目录 三、命令示例 删除名为 dir1 的空目录: rmdir dir1删除多个空目录: rmdir dir1 dir2 dir3注意事项…...
网络爬虫Request静态页面数据获取
在现代 Web 开发中,HTTP 请求(Request)是与服务器进行通信的核心操作。无论是在前端还是后端开发中,数据的获取、传递以及处理都离不开请求的应用。特别是在静态页面的数据获取中,使用请求可以将页面变得更加动态和互动,从而大大提升用户体验,使得页面内容更加丰富和灵活…...
网页聊天——测试报告——Selenium自动化测试
一,项目概括 1.1 项目名称 网页聊天 1.2 测试时间 2024.9 1.3 编写目的 对编写的网页聊天项目进行软件测试活动,揭示潜在问题,总结测试经验 二,测试计划 2.1 测试环境与配置 服务器:云服务器 ubuntu_22 PC机&am…...
mysql5.7常用操作命令手册
文章目录 前言一、关闭mysql服务1.mha节点,关闭MHA高可用2.主节点,摘掉vip,停掉mysql服务3.从节点,停掉mysql服务 二、启动mysql1.启动数据库顺序2.主节点,登陆数据库检查主库状态,将主库改成读写状态3.从节点启动配置数据库&…...
前端组件库Element UI 的使用
一、准备工作 1.确保安装了开发软件 VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js 和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行…...
【C++ 基础数学 】2121. 2615相同元素的间隔之和|1760
本文涉及的基础知识点 基础数学 LeetCode2121. 相同元素的间隔之和 难度分:1760 令2165,和此题几乎相等。 给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。 arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地,arr[i] 和…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
