【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?

news2024/10/6 0:30:29

在这里插入图片描述

文章目录

  • 5.何为分布式?分布式锁?和微服务关系?
    • 5.1何为分布式?
      • 5.1.1定义
      • 5.1.2例子
      • 5.1.3优缺点
        • (1)优点
        • (2)缺点
    • 5.2何为分布式锁?
      • 5.2.1定义
      • 5.2.2必要性
    • 5.3区分分布式和微服务
      • 5.3.1区分点
      • 5.3.2举例

5.何为分布式?分布式锁?和微服务关系?

5.1何为分布式?

5.1.1定义

  1. 分布式系统是由多台计算机或设备共同工作通过网络进行通信和协作,以实现一个统一的目标或完成一个共同的任务。
  2. 想象一下,如果把一个任务分解成多个小任务,然后由不同的人分工合作完成,这就像是分布式系统的工作方式。
  3. 分布式系统就是将一个大任务分解成多个小任务由多台设备共同协作完成,以提高系统的性能和可靠性,这就好像是一个由多个人组成的团队一起完成一项任务一样。

5.1.2例子

  1. 组织一个大型派对。如果你自己负责所有准备工作,比如购买食物、装饰场地、发送邀请等,可能会非常辛苦而且效率低下。但如果你将任务分配给一些朋友,比如让其中一人负责食物购买、另一人负责场地布置、再另一人负责发送邀请,那么整个派对的准备工作就会变得更加高效和顺利。这就好像是一个分布式系统,各个部分(人)通过协作完成了一个共同的目标(派对)。
  2. 在计算机领域,分布式系统也是类似的道理。它将任务分配给多台计算机或设备,每台设备完成一部分工作,然后将结果汇总或交换信息,最终完成整个任务。这种分工合作的方式能够提高系统的性能、可靠性和扩展性,使得系统能够应对更大的负载和更复杂的任务。

5.1.3优缺点

(1)优点
  1. 高可用性 分布式系统通过将数据和计算分布在多个节点上,可以提高系统的可用性。即使某个节点或部分节点发生故障,系统仍然可以继续运行,从而保证了系统的可靠性和持续可用性。

  2. 扩展性 随着业务的增长和用户规模的扩大,单一节点往往无法满足系统的需求。分布式系统可以通过增加节点或者扩展集群规模来实现水平扩展,从而满足系统的性能需求。

  3. 容错性 在分布式系统中,由于存在多个节点,即使部分节点发生故障,系统仍然可以继续运行。通过数据的冗余备份和故障转移等机制,分布式系统能够提高容错性,减少单点故障对系统造成的影响。

    图片描述

  4. 地理分布: 分布式系统允许将数据和计算分布在不同地理位置的节点上,从而实现数据的就近访问和处理,提高数据传输的效率和响应速度。

(2)缺点

凡事具有两面性,分布式服务带来很多好处的同时肯定还会带来麻烦,主要从 3 方面考虑。

  1. 分布式服务依赖网络
    服务器间通讯依赖网络,不可靠网络包括网络延时,丢包、中断、异步,一个完整的服务请求依赖一连串服务调用,任意一个服务节点网络出现问题,都可能造成本次请求失败。
  2. 维护成本高
    传统单体式服务只需要维护一个站点就可以。
    分布式服务系统被拆分成若干个小服务,服务从 1 变为几十个上百个服务后,增加运维成本。
  3. 一致性,可用性,分区容错性无法同时满足
    这个是最主要的,这三种特性就是平时说的 CAP 定理,在分布式系统中,这三种特性最多只能满足两种,无法同时满足,需要根据实际情况去调整牺牲掉其中哪个。

5.2何为分布式锁?

5.2.1定义

  1. 分布式锁是一种用于在分布式系统中实现互斥访问的机制
  2. 它允许多个进程或线程在不同的节点上同步访问共享资源,确保在任何时刻只有一个进程或线程可以持有锁,并且能够安全地释放锁,以避免资源竞争和数据不一致的问题。

5.2.2必要性

  1. 数据一致性:在分布式系统中,多个节点可能同时访问共享资源,如果不加控制地进行访问,可能会导致数据不一致的问题,例如脏数据或冲突写入。使用分布式锁可以确保在任何时刻只有一个节点可以修改共享资源,从而保证数据的一致性。
  2. 避免竞态条件:在并发访问的情况下,如果没有适当的锁机制,可能会出现竞态条件,导致不确定的执行结果或错误的行为。分布式锁可以有效地避免这种情况的发生,确保对共享资源的安全访问。
  3. 防止资源过度消耗:在高并发环境下,如果没有锁机制限制对某些资源的访问,可能会导致资源过度消耗或系统崩溃。通过分布式锁可以对资源的访问进行合理的限制和调度,从而保护系统的稳定性和可靠性。

5.3区分分布式和微服务

​ 分布式系统是由多台计算机或设备共同工作,通过网络进行通信和协作,以实现一个统一的目标或完成一个共同的任务的系统。它强调的是系统内部的组织结构和通信方式,以及如何将任务分解并分配给多个计算机或设备来提高系统的性能、可靠性和扩展性。分布式系统可以包括分布式存储系统、分布式计算系统、分布式数据库等。

​ 微服务是一种架构风格,将应用程序构建为一组小型、独立部署的服务,每个服务都围绕着特定的业务功能进行设计和构建,并通过轻量级的通信机制(通常是HTTP API)相互通信。微服务架构的核心理念是将大型单体应用程序拆分为多个小型服务,每个服务都可以独立开发、部署和扩展,从而提高开发速度、灵活性和可维护性。

5.3.1区分点

  1. 范围不同
    • 分布式系统是一种系统架构模式,强调系统内部的组织结构和通信方式
    • 而微服务是一种架构风格,强调将应用程序构建为一组小型、独立部署的服务
  2. 关注点不同
    • 分布式系统关注整个系统的组织和通信方式,以提高系统的性能、可靠性和扩展性;
    • 微服务关注的是如何将应用程序拆分为小型、独立部署的服务,以提高开发速度、灵活性和可维护性。
  3. 实现方式不同
    • 分布式系统可以采用各种架构和技术实现,包括分布式计算、分布式存储、分布式数据库等;
    • 微服务通常使用轻量级的通信机制(如HTTP API) 来实现服务之间的通信,每个服务可以使用不同的技术栈和编程语言。

5.3.2举例

假设你正在建立一个在线电子商务平台:

  1. 分布式系统 在这个电子商务平台中,你可能会使用分布式系统来处理不同方面的需求,比如订单管理、用户认证、商品搜索等。分布式系统将这些不同的功能模块分布在多个节点上,以实现高可用性、扩展性和容错性。例如,你可以有一个节点用于订单管理,另一个节点用于用户认证,而另一个节点用于商品搜索。这些节点可以通过网络通信来进行协作和数据交换。
  2. 微服务架构 在这个电子商务平台中,你可能会使用微服务架构来组织和管理这些不同的功能模块。每个功能模块都可以作为一个独立的微服务,具有自己的数据存储、业务逻辑和用户界面。例如,你可以有一个订单管理微服务、一个用户认证微服务和一个商品搜索微服务。每个微服务都可以独立部署、扩展和更新,从而实现灵活性和敏捷性。

因此,分布式系统强调的是系统的架构和部署方式,即将系统的不同组件分布在多个节点上,而微服务架构则强调的是系统的设计和组织方式,即将系统拆分成多个小型、独立的服务单元。在实践中,微服务架构通常会使用分布式系统来实现。

在这里插入图片描述

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

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

相关文章

ISIS的基本概念

1.ISIS概述 IS-IS是一种链路状态路由协议,IS-IS与OSPF在许多方面非常相似, 例如运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此,然后建立邻接关系,并交互链路状态信息。 CLNS由以下三个部分组成: CLNP&#xf…

Python | Leetcode Python题解之第73题矩阵置零

题目: 题解: class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:m, n len(matrix), len(matrix[0])flag_col0 Falsefor i in range(m):if matrix[i][0] 0:flag_col0 Truefor j in range(1, n):if matrix[i][j] 0:matrix[i]…

OpenSSL实现AES-CBC加解密,可一次性加解密任意长度的明文字符串或字节流(QT C++环境)

本篇博文讲述如何在Qt C的环境中使用OpenSSL实现AES-CBC-Pkcs7加/解密,可以一次性加解密一个任意长度的明文字符串或者字节流,但不适合分段读取加解密的(例如,一个4GB的大型文件需要加解密,要分段读取,每次…

牛客NC85 拼接所有的字符串产生字典序最小的字符串【中等 排序 Java/Go/C++】

题目 题目链接: https://www.nowcoder.com/practice/f1f6a1a1b6f6409b944f869dc8fd3381 思路 排序后直接拼接结果Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规…

学习软考----数据库系统工程师24

关系数据库设计基础知识 函数依赖 码 多值依赖 性质

Nginx+GateWay

目录 Nginx nginx如何配置负载均衡 负载均衡有哪些策略 1、轮询(默认) 2、指定权重 3、ip_hash(客户端ip绑定) 4、least_conn(最少连接) 5、fair 6、url_hash Nginx为什么效率高 gateway 使用gat…

招展工作的接近尾声“2024上海国际科技创新展会”即将盛大开幕

2024上海国际科技创新展会,即将于6月中旬在上海新国际博览中心盛大召开。随着招展工作的接近尾声,目前仍有少量余位可供各企业和机构预定。这一盛大的科技展会,将汇聚全球智能科技领域的精英,共同展示最新的科技成果,探…

c# - - - winform程序四个角添加圆角效果

winform 给窗体四个角添加圆角效果。 在窗体 Load 事件中添加如下代码: // 创建了一个圆角矩形的路径,并将其设置为控件的形状 System.Drawing.Drawing2D.GraphicsPath path new System.Drawing.Drawing2D.GraphicsPath(); int radius 30; path.AddAr…

将文本中的unicode字符替换成汉字

背景介绍 msql workbench导出数据库表的数据 导出的json数据 [{"english_id":1, "english_word":"ambition", "homophonic":"am-\u4ffa\uff0cbi-\u5fc5,tion-\u80dc\uff1a\u4ffa\u5fc5\u80dc", "chinese":&quo…

PWM 开发舵机SG90-硬件舵机实战

1.PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节…

Kafka分级存储概念(一)

Kafka分级存储及实现原理 概述 Kafka社区在3.6版本引入了一个十分重要的特性: 分级存储,本系列文章主要旨在介绍Kafka分级存储的设计理念、设计细节以及具体的代码实现 背景:为什么要有分级存储? 场景 作为一款具有高吞吐及高性能的消息中间件,Kafka被广泛应用在大数据、…

28 - 算术运算指令

---- 整理自B站UP主 踌躇月光 的视频 文章目录 1. ALU改进2. CPU 整体电路3. 程序4. 实验结果 1. ALU改进 此前的 ALU: 改进后的 ALU: 2. CPU 整体电路 3. 程序 # pin.pyMSR 1 MAR 2 MDR 3 RAM 4 IR 5 DST 6 SRC 7 A 8 B 9 C 10 D 11 DI 1…

Unity 性能优化之图片优化(八)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、可以提前和美术商量的事1.避免内存浪费(UI图片,不是贴图)2.提升图片性能 二、图片优化1.图片Max Size修改&#x…

OpenCampass评测实战 作业

按照如下教程文档操作即可:https://aicarrier.feishu.cn/wiki/NxUOwnLuvi0clykyzj7ccSHPndb

基于52单片机的AS608指纹密码锁电路原理图+源程序+PCB实物制作

目录 1、前言 2、实物图 3、PCB图 4、原理图 5、程序 资料下载地址:基于52单片机的AS608指纹密码锁电路原理图源程序PCB实物制作 1、前言 这是一个基于AS608STC89C52单片机的指纹识别和键盘密码锁。 里面包括程序,原理图,pcb图和实…

拉普拉斯丨独家冠名2024年度ATPV技术分论坛,助力产业科技持续创新

为了进一步促进行业技术交流,推进光伏行业发展及标准建设的进程,针对高效电池,领跑组件,新产品认证及应用等技术专题及国内外光伏标准的最新进程,由中国绿色供应链联盟光伏专委会(ECOPV)指导的2…

Linux安装Python3.9环境

大家好,今天给大家分享一下在Linux系统中安装Python3环境,Linux系统中自带的Python2尽量不要删除,删除后可能会导致系统出现问题。 关于Linux常用命令,可以参考:作为测试人员的Linux常用命令 一、下载Python3安装包 …

笔试强训Day17 字符串 前缀和

BC45 小乐乐改数字 题目链接&#xff1a;小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 思路&#xff1a; 水题一道 注意前导0. AC code&#xff1a; #include <iostream> #include<string> using namespace std; string a,b; int main() {cin >> a;for…

【Linux系列】tail查询使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Springboot集成Mybatispuls操作mysql数据库-03

MyBatis-Plus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强而不做改变。它支持所有MyBatis原生的特性&#xff0c;因此引入MyBatis-Plus不会对现有的MyBatis构架产生任何影响。MyBatis-Plus旨在简化开发、提高效率&#xff0c;…