【分布式系统学习】之分布式入门理解

news2024/11/26 4:27:37

目录

    • 1、问:谈谈对分布式系统的理解
    • 2、问:那分布式系统环境下各自有什么优缺点?
      • 2.1 优点
      • 2.2 缺点
    • 总结:

1、问:谈谈对分布式系统的理解

答:
分布式系统通俗来说:就是将计算能力和数据存储能力分散在不同服务器上,通过网络连接组成的一个整体的服务,不同服务器可能是物理机,也可能是虚拟机,可以理解成一种解决方案。
举例:

比如,美团外卖,用户角度去看这就是一个能叫外卖的 APP,选商品,提单付款,等待配送后订单完成,如果从系统开发工程师角度去看,这个小小的 APP 后面却是一个非常庞大的系统,你点一次外卖,后台会经过几十次上百次服务调用才能完成整个流程。从大的角度去看,包括商品管理系统,订单系统,支付系统,结算系统,商家系统,配送系统,风控系统等等。每一个子系统又能分成若干个微服务,各个系统逻辑上构成一个整体统一对外服务。

  • 分布式系统就是将一个大的服务拆分成几十个甚至上百个微小的服务。
    如果把单体架构服务器比做篮子,那代码就是鸡蛋,不要让所有鸡蛋别装在一个篮子里,也方便大家分工开发,代码不在一个项目里,也不会冲突;解决传统单体服务架构带来的各种问题:代码数量庞大、迭代测试维护困难、一处改动测试不到位造成整个服务瘫痪等;

举例:
比如阿里的 Dubbo,还有 Spring 全家桶里的 Spring Cloud,都是解决分布式微服务架构的优秀框架。

2、问:那分布式系统环境下各自有什么优缺点?

答:

2.1 优点

从 4 个方面说:

- 系统可用性提升

一个系统全年可用时间在 99.999%,5 个 9 的服务可用率在设计合理的分布式系统中并不是一个触不可及的数字。
传统的集中式计算或集中式存储在遇见单点故障时很容易造成整个服务不可用,分布式下的服务体系,单台机器有故障,不致于造成整个服务不可用。

- 系统并发能力提升

请求通过 Nginx 负载均衡被分发到不同的服务器上,运行同样代码的服务器可以有 1 台或 N 台,通常情况下会根据实际用户访问量随时增加机器,无论是数据库或者服务,都可以做到随时水平扩展。
比如双 11 活动,平时订单少 50 台机器就够了,到了 11 订单量剧增,服务器增加到 100 台,每台机器之间相互独立,互不影响。

- 系统容错能力提升

举例:如下图
手里有笔,能给面试官随便画画)

同一组服务分别部署在北京上海杭州,杭州的机房突发断电或者火灾,杭州机房的流量会被自动分发到北京和上海的机房,不影响用户使用。

- 低延迟

参考上一个图,北京的用户请求自动分发到北京,上海的用户请求被分发到上海,服务器会根据用户的 IP 选择距离自己最近的机房,降低网络延迟。
面试官:嗯,基本覆盖全面了,继续说说缺点。

2.2 缺点

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

- 分布式服务依赖网络

服务器间通讯依赖网络,不可靠网络包括网络延时,丢包、中断、异步,一个完整的服务请求依赖一连串服务调用,任意一个服务节点网络出现问题,都可能造成本次请求失败。

- 维护成本高

传统单体式服务只需要维护一个站点就可以。
分布式服务系统被拆分成若干个小服务,服务从 1 变为几十个上百个服务后,增加运维成本。

- 一致性,可用性,分区容错性无法同时满足(CAP原理)

这个是最主要的,这三种特性就是平时说的 CAP 定理,在分布式系统中,这三种特性最多只能满足两种,无法同时满足,需要根据实际情况去调整牺牲掉其中哪个。

如果能意识到 CAP 问题那就更好了,关于 CAP详见这篇博客 CAP原理详解

总结:

  1. 分布式系统,就是把整个业务系统拆分成很多的服务,服务之间代码都没有冲突,服务可以自治,每个服务到技术也可以自己选型,只要遵循统一的服务调用协议就可以了。每次发布如果就改动一个服务那就上线一个服务,不用所有人一起联调,这样每次发布牵扯到的改动影响也是可控的。不像传统单体架构服务,动辄几百万行代码融在一起。
  2. 分布式系统总结来说是将数据存储能力和计算能力分布到不同的服务器上,作为一个整体对外服务。目的在于解决单台机器的故障问题,单机计算和 IO 性能问题,以及单机存储空间不足的问题。虽然单机故障的概率比较小,但是随着集群规模大了之后,集群宕机和磁盘损坏基本上是常态,分布式系统主要解决的是各种故障带来的问题。
  3. 分布式系统和微服务什么关系

关于分布式系统和微服务,两者都只是一种概念。如果你采用微服务,就意味着系统一定是分布式的,分布式系统具有的优缺点在微服务理都会体现;(可以理解:微服务是分布式系统的一种具体落地方案。)
在这里插入图片描述

分布式系统的优点:

  • 提升服务可用性
  • 稳定性
  • 提升系统并发能力
  • 提升系统容错能力
  • 低延迟

分布式系统缺点:

  • 依赖网络,会因为网络问题导致系统数据丢失或不一致性;
  • 系统复杂化,系统监控维护,版本迭代发布变得相对复杂,成本高;
  • 一致性,可用性,分区容错性无法同时满足。

参考博客:https://blog.csdn.net/qq_34272760/article/details/120714630

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

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

相关文章

springboot 2.7 oauth server配置源码走读一

springboot 2.7 oauth server配置源码走读 入口: 上述截图中的方法签名和OAuth2AuthorizationServerConfiguration类中的一个方法一样,只不过我们自己的配置类优先级比spring中的配置类低,算是配置覆盖,看下图所示: …

everything 本地文件搜索工具 完胜WIndows搜索 速度99% 超级给力

"Everything" 是一个 Windows 平台上的免费软件,它是一款功能强大的本地文件搜索工具。它允许用户在计算机上快速而准确地搜索文件和文件夹。以下是一些 "Everything" 的主要特点: 实时搜索: "Everything" 提供…

C++面向对象高级编程(侯捷)笔记2

侯捷C面向对象高级编程 本文是学习笔记,仅供个人学习使用,如有侵权,请联系删除。 如果你对C面向对象的组合、继承和委托不了解,对什么是拷贝构造、什么是拷贝赋值和析构不清楚,对类设计中的Adapter、pImpl、Template…

Linux的systemctl命令

Linux系统很多软件均支持使用systemctl命令控制:启动、停止、开机自启 形式: systemctl start | stop | status | enable | disable 服务名 enable : 自启动 disable : 关闭自启动 系统内置的服务比较多,比如: NetworkManage…

B01、运行时数据区概述-03

1、什么是内存 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。 2、线程共享和…

可狱可囚的爬虫系列课程 08:新闻数据爬取实战

前言 本篇文章中我带大家针对前面所学 Requests 和 BeautifulSoup4 进行一个实操检验。 相信大家平时或多或少都有看新闻的习惯,那么我们今天所要爬取的网站便是新闻类型的:中国新闻网,我们先来使用爬虫爬取一些具有明显规则或规律的信息&am…

华芯微特MCU之TIMER触发ADC

01 TIMER定时器之脉冲发送功能 我们今天详细讲解一下TIMER的ADC触发功能。 SWM190的TIMER2/3支持SAR ADC触发功能,此功能配置为定时器或脉冲发送均有效,可通过配置相应寄存器实现。 将SAR ADC CTRL寄存器中TRIG设置为TIMER2触发或TIMER3触发。TIMER可作…

GZ075 云计算应用赛题第5套

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷5 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenSt…

C++上位软件通过Snap7开源库访问西门子S7-200/合信M226ES数据块的方法

前言 上一篇文章中介绍了Snap7访问西门子S7-1200/S7-1500 DB块的方法,对于S7-200PLC是没有数据块访问的。S7-200PLC中Snap7只能通过访问MB块,VB块的方法进行和PLC之间的Snap7通信和数据交换。手头没有S7-200PLC故通过合信CTMC M226ES运动控制器进行测试&…

【CANopen】关于STM32中CanFestival的pdo应用

系列文章目录 文章目录 系列文章目录一、发送1、同步传输2、异步传输 二、接收 使用STM32F407单片机 pdo属于过程数据用来传输实时数据,即单向传输,无需接收节点回应。 一、发送 分为同步传输和异步传输。 1、同步传输 分为循环传输(周期…

看板表格样式,去掉element表格背景

<div class"ml-20"><el-input v-model.trim"queryParams.wipOrderNo" size"small" clearable style"width:150px" placeholder"请输入工单号" /><el-select class"ml-20" v-model"queryParam…

Ubuntu18.04配置静态ip

文章目录 查看网卡名、ip地址、网关切换root用户&#xff0c;进入配置文件配置静态IP 查看网卡名、ip地址、网关 首先查看网卡名、ip地址、网关&#xff0c;找到对应的网卡名并记录其地址 ifconfigroute -n切换root用户&#xff0c;进入配置文件 sudo -icd /etc/netplanvim …

服务器终端快速下载coco数据集

######解压到当前文件夹 sudo apt-get install aria2 aria2c -c <url> #<url>即为官网下载地址# url # download images http://images.cocodataset.org/zips/train2017.zip http://images.cocodataset.org/zips/val2017.zip# download annotations http://i…

CEC2017(Python):蜣螂优化算法DBO求解CEC2017

一、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem definitions and evaluation criteria for the CEC2017 special session and competition on single objective real-parameter numer…

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~

2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考&#xff1a;警告&#xff01;&#xff01;&#xff01;Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…

学习JavaEE的日子 day08 方法的重载,递归,万年历

day08 1.方法的重载 >理解&#xff1a;方法与方法之间的关系> 条件&#xff1a;> 1.方法必须在同一个类中> 2.方法名必须一致> 3.参数列表的个数或者类型不一致> 4.与返回值无关> 好处&#xff1a;系统会根据具体实参类型自动匹配到对应的方法…

【Bug】Android BottomNavigationView 图标黑色色块问题

最近在研究Android Jetpack组件&#xff0c;在使用Navigation配合底部导航栏时&#xff0c;发现一个奇怪的问题&#xff0c;如下&#xff1a; 说明&#xff1a;图标来源于Iconfont开源图标库 我的第三个图标变成了一个黑色色块&#xff0c;这个问题前两天我遇见过&#xff0c…

Java 跨平台实现

Java 跨平台实现 1. Java虚拟机&#xff08;JVM&#xff09;2. 中间代码&#xff08;字节码&#xff09;3. Write Once, Run Anywhere (WORA)4. Java 标准库5. 安全性与隔离6. Java Community Process (JCP) Java 的跨平台性主要是通过以下几个关键机制来实现的&#xff1a; 1…

安克创新与火山引擎数智平台开展合作:数据分析降门槛 数据协同破边界

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;消费电子品牌安克创新与火山引擎数智平台&#xff08;VeDI&#xff09;达成合作&#xff0c;双方将聚焦安克创新大数据平台的海量数据分析场景&…

听GPT 讲Rust源代码--compiler(4)

File: rust/compiler/rustc_codegen_gcc/src/back/mod.rs rust/compiler/rustc_codegen_gcc/src/back/mod.rs 文件是 Rust 编译器的源代码中的一个模块&#xff0c;主要负责与 GCC&#xff08;GNU 编译器集合&#xff09;相关的后端代码生成。 在 Rust 编译器的架构中&#xff…