分布式架构

news2024/11/18 0:19:30

目录

一、前言

二、分布式架构的发展历史

三、分布式架构发展的里程碑

四、分布式系统的意义

五、分布式架构的常见概念

六、分布式领域中冯诺依曼模型的变化

七、分布式系统的难点

八、总结


一、前言

​  我们都知道,当今无论在BAT这样的大公司,还是各种各样的小公司,甚至是传统行业刚转互联网的企业都开始使用分布式架构,那么什么叫分布式架构呢?分布式架构有什么好处呢?分布式架构经过了怎样的发展呢?是哪家企业开启了分布式架构的时代呢?读完本文,你就会得到这些答案,下面让我们一起来开启分布式概述的奇妙之旅吧!

二、分布式架构的发展历史

​  1946年2.14日,那是一个浪漫的情人节 , 世界上第一台电子数字计算机在美国宾夕法尼亚大学诞生了,她的名字叫ENIAC。这台计算机占地170平米、重达 30 吨,每秒可以进行 5000 次加法运算。

​  第一台电子计算机诞生以后,就意味着一个日新月异的 IT 时代到来了。单台计算机的性能不断得到提升,从最早的 8 位 CPU 到现在的 64 位 CPU;从早期的 MB 级内存到现在的 GB 级别内存;从慢速的机械存储到现在的固态 SSD 硬盘存储。

​  ENIAC 之后,电子计算机就进入了 IBM 主导的大型机时代。1964 年 4 月 7 日,在吉恩.阿姆达尔(IBM 大型机之父, 被认为是有史以来最伟大的计算机设计师之一)的带领下,耗费 50 亿美元,历时三年,第一台 IBM 大型机 SYSTEM/360 诞生了。这使得 IBM 在 20 世纪 50~60 年代统治着整个大型计算机工业,奠定了 IBM 计算机帝国的基础。IBM 大型机曾支撑美国航天登月计划,IBM 主机一直服务于金融等核心行业的关键领域。由于超强的计算能力和高可靠性,即使在 X86 和云计算高速发展的背景下,IBM 的大型机依然牢牢占据着一定的高端市场份额。

​ 20 世纪 80 年代,在大型机霸权的时代下,计算机的架构同时向两个方向发展:

  • 以 CISC (微处理器执行的计算机语言指令集) CPU 为架构的面向个人、价格便宜的PC。
  • 以 RISC (精简指令集计算机) CPU 为架构的面向企业、价格昂贵的小型 UNIX 服务器。

三、分布式架构发展的里程碑

​  大型主机凭借着大型机超强的计算和 I/O 处理能力、安全性、 稳定性等,在很长一段时间内,大型机引领着计算机行业及商业计算领域的发展。而集中式的计算机系统架构也渐渐成为了主流。但是随着社会的发展,这种架构越来越难以适应企业的需求,比如说:

  • 大型主机复杂性高,培养一个能够熟练运维大型主机的人成本很高。
  • 大型主机很贵,一般只有土豪机构(政府、电信、金融)才能用得起。
  • 会有单点问题,一旦大型主机出现故障,那整个系统就将处于不可用的状态。而对于大型机的使用机构来说,这种不可用导致的损失是非常具大的。
  • 由于科技的进步、技术的发展,PC 机性能得到了不断提升,所以很多企业放弃大型机改用小型机及普通 PC 来搭建系统架构。

阿里巴巴发起的"去 IOE"运动开启新时代

​  IOE 指的是 IBM 小型机、Oracle 数据库、EMC 的高端存储。阿里巴巴2009 年“去 IOE”战略技术总监透露,截止到 2013 年 5 月 17 日阿里巴巴最后一台 IBM 小型机在支付宝下线。

为什么要去 IOE?

​  随着业务的快速发展,阿里巴巴业务量和数据量呈爆发性增长,传统集中式 Oracle 数据库架构在系统的扩展性方面遭遇到了瓶颈。 传统的商业数据库软件(Oracle,DB2)多以集中式架构为主, 那么这些传统数据库软件的最大特点就是将所有的数据都集中在 一个数据库中,只能依靠大型高端设备来提供高处理能力和扩展性。 集中式数据库的扩展性主要采用向上扩展(Scale up)的方式, 通过增加 CPU、内存、磁盘等方式提高系统处理能力。这种集中式数据库的架构,使得数据库成为了整个系统的瓶颈,已经越来越不能适应海量数据对计算能力的要求。

四、分布式系统的意义

之所以要发展分布式系统架构,是因为单机系统存在着如下诸多缺点等待被解决:

  1. 升级单机处理能力的性价比越来越低

    我们知道单机的处理能力主要依靠 CPU、内存、磁盘。通过升级硬件来这种垂直扩展的方式来提升性能,成本会越来越高。性价比会越来越低。

  2. 单机处理能力存在瓶颈

    并且单机处理能力存在瓶颈,CPU、内存、磁盘都会有自己的性能瓶颈, 就算你是土豪不惜成本去提升硬件,但是硬件的发展速度和性能也还是有限制的。

  3. 稳定性和可用性这两个指标很难达到

  4. 最后就是单机系统存在可用性和稳定性的问题,这两个指标又是我们亟待要去解决的问题。

五、分布式架构的常见概念

1.集群

​  小张开了一家小饭店,刚开始的时候店里只有一个厨师,切菜洗菜备料炒菜全干。后来由于饭香甜可口,人流量越来越多了,一个厨师忙不过来了,小张又请了两个厨师,那么这时候三个厨师炒一样的菜,做相同的切菜洗菜备料炒菜等工作,那这三个厨师的关系是集群。也就意味着来一个顾客,只有其中的一个厨师会为这个顾客服务。

2.分布式

​  又经过一段时间,店里的生意更加火爆了,小张为了让厨师们能专心炒菜,把菜做到极致,又请了个配菜师负责切菜、备菜、备料,那么厨师和配菜师的关系是分布式,后来一个配菜师也忙不过来了,小张就又请了两个配菜师,三个配菜师关系也是集群。

3.节点

​  节点是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的项目中,一个节点表示的是一个操作系统上的进程。 那这里的每一个配菜师和厨师都是一个节点。

4.副本机制

​  副本(replica/copy)是指在分布式系统中为数据或服务提供的冗余。 数据副本指在不同的节点上持久化同一份数据,当某一个节点出现数据丢失时,可以从副本上恢复数据。数据副本是分布式系统中解决数据丢失问题的唯一手段。 服务副本表示多个节点提供相同的服务,通过主从关系来实现服务高可用的方案。

5.中间件

​  中间件位于操作系统提供的服务之外,但又不属于应用,他是位于应用和系统层之间的、为开发者方便的处理通信、输入输出的一类软件,能够让用户只关心自己应用的部分。

六、分布式领域中冯诺依曼模型的变化

  上图是经典理论-冯.诺依曼体系,计算机硬件由运算器、 控制器、存储器、输入设备、输出设备五大部分组成。不管架构怎么变化,计算机仍没有跳出该体系的范畴。

  • 输入设备的变化

    分布式系统架构中,输入设备可以分两类:第一类是互相连接的多个节点,在接收其他节点传来的信息作为该节点的输入;另一种就是传统意义上的人机交互的输入设备了。

  • 输出设备的变化

    分布式系统架构中,输出也分两类,一种是系统中的节点向其他节点传输信息时,该节点可以看作是输出设备;另一种就是传统意义上的人际交互的输出设备,比如用户的终端。

  • 控制器的变化

    在单机中,控制器指的是 CPU 中的控制器,在分布式系统中,控制器主要的作用是协调或控制节点之间的动作和行为; 比如硬件负载均衡器;LVS 软负载;规则服务器等等。

  • 运算器

    分布式系统中,运算器是由多个节点来组成的。运用多个节点的计算能力来协同完成整个计算任务。

  • 存储器

    分布式系统中,我们需要把承担存储功能的多个节点组织在一起, 组成一个整体的存储器;比如数据库、redis(key-value 存储) 。

七、分布式系统的难点

  毫无疑问,分布式系统对于集中式系统而言,在实现上会更加 复杂。分布式系统将会是更难理解、设计、构建 和管理的,同 时意味着应用程序的根源问题更难发现。

  • 三态

    在集中式架构中,调用一个接口返回的结果只有两种, 成功或失败。但是在分布式架构中,会出现“超时”这个状态。

  • 分布式事务

    ​ 这其实是一个老生常谈的问题,我们都知道事务就是一系列操作的原子性保证,在单机的情况下,我们能够依靠本机的数据库连接和组件很轻易的做到事务控制,但在分布式架构下,业务原子性操作很可能是跨服务的,这样就会导致分布式事务。比如 A 、B 操作分别是在不同服务下的同一个事务内的操作,A 调用 B,如果A可以清楚的知道 B 是否成功提交从而控制自身提交还是回滚,但我们知道在分布式系统调用中会出现一个新状 态就是超时,就是 A 并无法知道 B 是成功还是失败,这个时候 A 是提交本地事务还是执行回滚呢?这其实是一个很难的问题,如果要强行保证事务一致性,可以采取分布式锁,但那样会增加系统复杂度而且会增大系统的开销,而且事务跨越的服务越多, 消耗的资源越大,性能越低,那么最好的解决方案就是避免分布式事务。 还有一种解决方案就是重试机制,但是重试如果不是查询接口, 久必然涉及到数据库的变更,如果第一次调用成功但是没返回成功结果,那调用方第二次调用对调用方来说依然是重试,但是此时对于被调用方来说是重复调用,例如 A 向 B 转账,A-100,B + 100,这样会导致 A 扣了 100,而 B 增加 200。这样的结果并不是我们期望的,因此需在要写入的接口做幂等设计(多次调用和单次调用是一样的效果)。通常可以设置一个唯一键,在写入的时候查询是否已经存在,避免重复写入。但是幂等设计的一 个前提就是服务高可用,否则无论怎么重试都不能调用返回一个明确的结果,那调用方会一直等待,虽然可以限制重试的次数, 但是这已经进入异常状态了,甚至到了极端情况还需要人肉补偿处理。其实根据 CAP 和 BASE 理论,不可能在高可用分布式情况下做到一致性,一般都是最终一致性保证。

  • 负载均衡

    ​ 为了达到服务高可用,每个服务至少是部署两台机器,因为互联网公司一般使用可靠性不是很高的普通机器, 长期运行宕机概率很高,所以两台机器能够大大降低服务不可用的可能性,而大型项目往往会采用十几台甚至上百台来部署一 个服务,这不仅是保证服务的高可用,更是为了提升服务的 QPS, 但是这样又带来一个问题,一个请求过来到底路由到哪台机器呢? 路由算法很多,有 DNS 路由,如果 session 在本机,还会根据用户 id 或则 cookie 等信息路由到固定的机器,当然现在应用服务器为了扩展的方便都会设计为无状态的,session 会保存到专有的 session 服务器,所以一般不会涉及到拿不到 session 问 题。那路由规则是随机获取么?这是一个方法,但是据我所知, 实际情况肯定比这个复杂得多,在一定范围内随机,但是在大范围也会分为很多个域,比如如果为了保证异地多活的多机房, 夸机房调用的开销太大,肯定会优先选择同机房的服务,这个 要参考具体的机器分布来考虑。

  • 一致性

    数据被分散或者复制到不同的机器上,如何保证各台主机之间的数据一致性将成为一个难点。

  • 故障的独立性

    ​ 分布式系统由多个节点组成,整个分布式系统完全出问题的概率是存在的,但是在实践中出现更多的是某个节点出问题,其他节点都没问题。这种情况下我们实现分布式系统时需要考虑得更加全面些。

八、总结

​  通过本文分布式系统的概述,我们就对分布式有了一个很直观的了解,里面涉及到的技术还是蛮多的,后面的文章中,我们一点点的来啃这些硬骨头。为我们的成长加油点赞吧~ 下篇博文我们来聊分布式架构的演进过程怎么样?评论区等你

简述

业界主流(O:Open Source): Thrift(O), Avro-RPC(O), Hessian(O), gRPC(O), Dubbo(O), HSF, Coral Service(亚马逊), DSF(华为),Zookeeper 

分布式服务框架包括: RPC组件, 配置化服务发布, 基于服务注册中心的订阅和发布, 服务治理

RPC 组件: 通信框架, 编码, 协议栈

涉及到的技术: Socket 通信, 多线程, 协议栈 -> Netty

关键字: 长连接, NIO(多路复用)

1.SOA架构和微服务架构的区别
首先SOA和微服务架构一个层面的东西,而对于ESB和微服务网关是一个层面的东西,一个谈到是架构风格和方法,一个谈的是实现工具或组件。

 1.SOA(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务 通常以独立的形式存在与操作系统进程中。各个服务之间 通过网络调用。

 2.微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

 微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想
 

3.SOA架构特点:

系统集成:站在系统的角度,解决企业系统间的通信问 题,把原先散乱、无规划的系统间的网状结构,梳理成 规整、可治理的系统间星形结构,这一步往往需要引入 一些产品,比如 ESB、以及技术规范、服务管理规范; 这一步解决的核心问题是【有序】

系统的服务化:站在功能的角度,把业务逻辑抽象成 可复用、可组装的服务,通过服务的编排实现业务的 快速再生,目的:把原先固有的业务功能转变为通用 的业务服务,实现业务逻辑的快速复用;这一步解决 的核心问题是【复用】

业务的服务化:站在企业的角度,把企业职能抽象成 可复用、可组装的服务;把原先职能化的企业架构转变为服务化的企业架构,进一步提升企业的对外服务能力;“前面两步都是从技术层面来解决系统调用、系统功能复用的问题”。第三步,则是以业务驱动把一个业务单元封装成一项服务。这一步解决的核心问题是【高效】

4.微服务架构特点:


1.通过服务实现组件化

开发者不再需要协调其它服务部署对本服务的影响。
2.按业务能力来划分服务和开发团队

开发者可以自由选择开发技术,提供 API 服务
3.去中心化

每个微服务有自己私有的数据库持久化业务数据
每个微服务只能访问自己的数据库,而不能访问其它服务的数据库
某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其它微服务的数据库,而是通过对于微服务进行操作。
数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。


4.基础设施自动化(devops、自动化部署)

的Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)

5.主要区别:

功能

SOA

微服务

组件大小

大块业务逻辑

单独任务或小块业务逻辑

耦合

通常松耦合

总是松耦合

公司架构

任何类型

小型、专注于功能交叉团队

管理

着重中央管理

着重分散管理

目标

确保应用能够交互操作

执行新功能、快速拓展开发团队

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

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

相关文章

Install Linux on Windows with WSL2 (使用 WSL2 在 Windows 上安装 Linux)

Install Linux on Windows with WSL2 (使用 WSL2 在 Windows 上安装 Linux)https://learn.microsoft.com/en-us/windows/wsl/ 在 Windows 上运行 Linux - 在 Windows 11 上运行 Ubuntu 20.04 LTS Developers can access the power of both Windows and Linux at the same tim…

实验十三、阻容耦合共射放大电路的频率响应

一、题目 利用 Multism 从以下几个方面研究图1所示的阻容耦合共射放大电路的频率响应。图1阻容耦合共射放大电路图1\,\,阻容耦合共射放大电路图1阻容耦合共射放大电路(1)设 C1C210μFC_1C_210\,\textrm{μF}C1​C2​10μF,分别测试它们所确定…

6万字电力行业系统解决方案光伏电站综合安防系统解决方案

【版权声明】本资料来源网络,知识分享,仅供个人学习,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间删除!完整资料领取见文末,部分资料内容: 目录 第 一 章背景与需求 1.1行…

2023年收银管理系统排行榜新鲜出炉

随着新零售的模式普及,越来越多的零售店选择了用收银系统代替收银机。因为收银系统不仅具备收银等功能,其实还有各种店铺数据管理功能、经销商信息管理,销售数据分析等许多功能等。所以如果想清晰地知道门店每天盈利情况和库存情况和采购过程…

这些小众却足够惊艳的素材库,你知道吗?

推荐几个我经常使用的网站,绝对够惊艳。 1、菜鸟图库(免费设计素材) https://www.sucai999.com/?vNTYxMjky 这是一个为新手设计师提供免费素材的设计网站,站内有超多平面模板、海报、UI设计、电商设计等相关素材,质…

JS设计模式

文章目录1 什么是设计模式?2 发布-订阅模式2.1 DOM事件2.2 基于Broadcast Channel实现跨页面通信2.3 基于localStorage实现跨页面通信2.4 使用 Vue 的 EventBus 进行跨组件通信2.4 使用 React 的 EventEmitter 进行跨组件通信3 装饰器模式3.1 React 高阶组件 HOC3.2…

MySql图形化界面工具--DataGrip安装和使用

一、下载安装 1、官网下载安装包,双击开始安装 2、点击next,一步一步的完成安装 3、选择DataGrip的安装目录,然后选择下一步 4、下一步,执行安装 二、使用 1、添加数据源 配置以及驱动jar包下载完毕之后,…

Pod基本概念与Pod应用生命周期

Pod是一个逻辑抽象概念,kubernetes创建和管理的最小单元,一个Pod由一个容器或多个容器组成。特点:一个Pod可以理解为是一个应用实例,提供服务Pod中容器始终部署在一个Node上Pod中容器共享网络、存储资源Pod主要用法:运…

大件传输的9种方法

不知道你有没有试过用电子邮件进行大文件传输,由于文件大小的限制,往往会发送失败。同时,一些文件共享服务对传输的文件有大小限制,使得你无法与朋友分享电影片段或向客户展示你的工作样本。还有一些要求你注册一个账户&#xff0…

【JVM基础内容速查表】JVM基础知识 默认参数 GC命令 工具使用 JVM参数设置、说明、使用方法、注意事项等(持续更新)

目录一、JVM前置知识1. -X、-XX含义2. JVM参数值的类型和设置方式3. 查看GC时用到的命令和JVM参数4. 查看JVM默认参数二、垃圾收集器选择-XX:UseSerialGC-XX:UseParallelGC-XX:UseParallelOldGC-XX:UseParNewGC-XX:UseConcMarkSweepGC-XX:UseG1GC三、垃圾收集器特有参数1. ParN…

pyinstaller打包遇到的问题

1、ModuleNotFoundError: No module named ‘scipy.spatial.transform_rotaion_groups’ 解决办法:–hidden-import scipy.spatial.transform._rotation_groups 2、FileNotFoundError:[Errno 2] No such file or directory:‘C:\Users\Gw0021\AppData\Local\Temp\_M…

leaflet 选择一个marker,点击后设置其为中心点(070)

第070个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中引用geojson文件,显示marker,点击某个marker后,设置其为中心点,并panTo到中心点。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共81行)相…

【数据库】MySQL 索引视图详解

目录 MySQL索引视图 视图 一,什么是视图 二,为什么需要视图 三,视图的作用和优点 四,创建视图 案例: 五,视图使用规则 六, 修改视图 1,修改列名 2,创建复杂视图…

把盏言欢,款款而谈,当WorkPlus接入了ChatGPT机器人

ChatGPT到底有多火? “谷歌AI聊天机器人出错,市值一夜蒸发7172亿”;“百度类ChatGPT项目‘文心一言’或将直接接入百度搜索”;“阿里确认正研发类ChatGPT产品,目前处于内测阶段”;“网易有道将推出教育场景…

电脑技巧:分享六个小众且非常实用的工具

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️荣誉: CSDN博客专家、数据库优质创作者🏆&…

黑马】后台管理-路由懒加载

当打包构建项目时, JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。具体需要 3 步:① 安装 babel/plugin-synt…

【Big Data】Hadoop--MapReduce经典题型实战(单词统计+成绩排序+文档倒插序列)

🍊本文使用了3个经典案例进行MapReduce实战 🍊参考官方源码,代码风格较优雅 🍊解析详细 一、Introduction MapReduce是一个分布式运算程序的编程框架,核心功能是将用户写的业务逻辑代码和自身默认代码整合成一个完整的…

震源机制沙滩球(focal mechanism beach ball)绘制之傻瓜式教程

目录 1. 断层的定义 2. 绘制流程 3. 更多示例 沙滩球的含义可阅读:震源机制(Focal Mechanisms)之沙滩球(Beach Ball)_ddd...e_bug的博客-CSDN博客 1. 断层的定义() 走向(strike):正北方顺时针旋转到走向…

第五十四章 DFS进阶(二)——迭代加深

第五十四章 DFS进阶(二)——迭代加深一、DFS的缺陷二、迭代加深1、什么是迭代加深2、复杂度分析3、算法步骤三、例题1、问题2、分析3、代码一、DFS的缺陷 我们知道DFS是一条路走到黑,直到将整条路走完以后才会回头。 这就导致了一个问题&am…

dynamic-Echonet左心室语义分割——学习记录

1简单介绍 1.1 论文简介 论文地址Video-based AI for beat-to-beat assessment of cardiac function 数据集地址:here获取好像还挺麻烦的。需要在网站上填写并申请数据集,斯坦福那边会发邮件并拉入一个box组,就可以访问公开的超声心动数据集…