点击上方蓝色字体,选择“设为星标”

优质文章,及时送达

故事从一次内部分享开始,我们每周组织组内分享,会分享一些技术,中间件,研发流程规范或者业务系统架构等内容,在进行了一系列中间件技术分享之后,会发现其中提及一系列通用的概念,这些是分布式系统所共有的,所以我们简单聊聊分布式概念。

什么是分布式系统呢?

从百度百科得到:

分布式系统是建立在网络之上的软件系统,拥有软件特性,所以分布式系统具有高度内聚性,和透明性。是建设于网络之上的高层软件,而不是硬件。

是不是看起来很拗口难以理解,简单的说:

分布式系统是一组独立的计算机以网络链接组成的服务系统,对用户来说是一个统一的体系。

因为分布式系统建立在网络之上,由多个独立操作系统组成,所以分布式系统对比独立部署并运行于单一操作系统之上的软件系统来说存在要解决通信和共识等问题。

分布式系统特点

分布式系统是多个服务器通过网络互联而构建的松耦合系统,其具备以下特点:

  1. 分布式:分布式由多台计算机组成,在地域上是独立分散的,可以分散在一个单位,一个城市,一个国家,或是全球范围内。整个系统的统一功能是分散在多个节点上实现的,因而分布式系统具有数据处理的分布式特性。

  2. 自治性:分布式系统各个节点包含自己独有的cpu和内存,具备独立的处理数据能力。一般来说每个节点是对等的,没有主次之分,可以自治的进行任务处理,还可以通过网络传输信息,协同完成任务处理。

  3. 并行性:一个大的任务可以按规则划分到多个计算节点上进行独立的子任务支持,体现了并行性。

  4. 全局性:分布式系统必须存在一个单一的,全局的通信机制,使得任何一个进程都能和其他进程通信,并且不区分本地通信和远程通信。在一个分布式集群中,往往所有机器具有统一的系统调用能力。

在不同的抽象层次上来说,分布式系统中每一个物理机,虚拟机,docker镜像,独立进程都可以认为是一个节点。

分布式系统可以很好的解决单机系统带来的资源限制问题,但其也存在特有缺点。

由于一个大型集群中,机器数量众多,每天集群中机器宕机都在发生,一般在机器宕机之后,通过健康检查和负载均衡机制将流量切割迁移。故障机器可能是由于fullgc等问题造成,之后会慢慢恢复。也可能因为机器磁盘或是物理问题导致,需要人工介入。

分布式系统中,节点之间通过网络互通互联。由于网络不稳定因素存在,所以数据丢包,消息丢失时有发生,节点之间可能无法进行通信,也就是出现了所谓的网络分化,这里我们一般引入CAP进行系统分析。

网络传输同样会造成信息乱序问题,也就是网络传输过程中A节点发送给B节点的消息,在B节点接受消息时并不一定和A发送给B的顺序一样。这种情况可能造成业务上的问题,网络传输层次上我们可以了解下TCP的处理方式,业务上我们可以采用创建全局唯一发号器和业务幂等来处理乱序带来的如:消息的无效,信息的过期等业务问题。

分布式系统中,节点之间通信不像单机系统那样非成功即失败,我们考虑到网络不确定性带来的问题,所以分布式场景下存在“分布式三态”的概念。也就是说A节点调用B节点,可能是B节点返回成功,或是B节点返回失败,还有就是因为网络问题而产生的超时状态,针对这种问题我们一般采用“failfast”,“retry+幂等”等方式。

分布式网络中,通过负载均衡我们可以将请求将负载到不同节点进行数据处理,在进行数据查询时同样可能会负载到不同的节点进行数据获取。这个问题场景其实是值得深入讨论的,不同的业务要求,不同的业务容错场景存在不同的解决方案。我们可以从其他节点获取数据,也可以在数据保存时要求一定的数据一致性等级处理,在完成多节点数据复制,才响应客户端。

正是由于分布式系统存在这样那样的异常问题,我们在进行分布式系统设计过程中需要面向异常进行系统架构设计,尽早在设计阶段考虑到可能遇到的异常问题,以进行容错的异常处理。

无状态服务体系下,请求可以被随机或是以哈希,一致性哈希等方式负载到不同到节点进行数据处理。节点异常可以随意的将问题节点下线和新节点扩容。但是对于有状态的分布式节点我们就不能简单的,随意的对分布式节点进行上下线操作了。

为解决分布式系统下有状态节点的数据完整性或叫做安全性的要求,我们一般采用多副本方式。

副本(replication)指的是在分布式系统中为数据节点或是数据单元进行的冗余。

数据副本一般分散放在多个节点之上,以提供更好的安全性,这样在某一个持有数据副本的节点宕机或是数据丢失之后,可以去其他持有副本的节点之上获取数据。所以给数据做副本是分布式系统解决数据丢失的常用手段。

除了数据安全性提升之外,多副本也可以提升系统查询吞吐能力,当然这个需要看分布式系统怎么设计了。

在副本设计上,我们首要需要考虑的是如何将数据正确的复制到其他数据副本之上,以满足副本数据和原始数据信息一致的要求。

对于数据和副本之间数据一致性上我们有以下几种实现方式:

  1. 强一致性:也就是说对于数据访问者而言,访问分布式网络下任意节点下的数据副本都可以读到最新更新的数据信息。实现强一致的数据复制会牺牲系统的并发能力和吞吐能力,实现方案上也较为复杂,业务上一般不采用这种方式。

    这里抛出一个问题,是否有真正的数据强一致要求呢?还是都可以通过最终一致性搞定。

  2. 单调一致性:意思是数据访问者一旦读取到某个数据副本最新的值,就不会在读到比这个副本值旧的值了。这个概念提出是为了满足以数据访问者视角来说的数据一致性。

  3. 会话一致性:数据访问者在一次会话之内一旦读取到最新数据副本之后就不会再读取到比这个数据旧的值了,听起来是不是和上面的很类似。区别在于这里要求的是一次会话,如果同一个数据访问者发起多次会话可能就不满足这个一致性要求了,其并不对多次会话一致性提供保障,所以它是弱与上面情况的一种一致性实现。

  4. 最终一致性:其要求一旦数据在某个副本更新成功,最终在各个副本上都可以访问到最终数据,以达到最终完全一致的状态,但是完整一致性的这个时间不做承诺。最终一致性一般是我们做分布式系统设计时采用的方案,而这个最终一致性的时间承诺来自于每个系统,中间件的SLA。

  5. 弱一致性:说的是数据更新成功之后,并不能在一个确定的时间内读到更新之后的值,也不承诺其他副本可以获取最新的值。所以弱一致性在真实场景中很难被系统所采纳。

分布式系统的副本机制很好的提升了分布式系统的高可用性,针对不同等级的一致性要求可以采用不同的解决方案,越是强一致性的模型对用户来说越友好,当然实现成本也更高。

对于单机系统服务来说,我们考量系统的指标常来自于单机资源所带来的指标,比如内存,cpu,磁盘io等指标。分布式系统的性能指标则不一样:

  • 系统吞吐能力,一般以系统每秒处理总数据量形容。

  • 系统延迟能力,指的是完成一次任务处理所需要的时间。

  • 系统并发能力,系统可以一起合作完成一项任务的能力,通常以QPS来衡量。

不同系统对于以上性能指标有不同的侧重,高吞吐系统往往难以做到低延迟,系统任务执行时间较长的系统,也难以承载更高的QPS。

分布式系统中每个节点都可能因为各种原因不能提供服务,所以系统可用性是系统很重要的指标之一。通过计算系统正常提供服务和停服的时间占比计算得来,我们所说的可用性几个9就是这个道理。

可扩展性并不是系统性能指标之一,但是对于分布式系统的设计上,我们期望实现分布式系统的线性扩展。通过系统扩展我们可以提供更大规模的吞吐,提升集群整体存储容量,提升集群计算能力。

一口气没有条理的聊了分布式系统的一些概念,分布式概念还有很多,我们以后慢慢道来。

分布式概念-分布式系统是什么?相关推荐

  1. SOA、ESB、微服务、分布式概念及专业名词阐述

    SOA.ESB.微服务概念 1 SOA 面向服务 SOA全称:Service Oriented Architecture,面向服务框架.它是一种设计理念,其中包含多个服务,服务之间通过相互依赖最终提供 ...

  2. 分布式概念-如何访问到分布式系统中的服务

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 之前的文章我们介绍了什么是分布式系统,以及分布式系统的一些特点和存在的问题. 我们知道的分布式系统是多台计算机通过网络链接, ...

  3. java分布式 mq_分布式系统消息中间件—RabbitMQ的使用进阶篇

    前言: 这篇文章主要总结一下RabbitMQ在日常项目开发中比较常用的几个特性. 一. mandatory 参数 上一篇文章中我们知道,生产者将消息发送到RabbitMQ的交换器中通过RoutingK ...

  4. 聊聊分布式事务分布式系统事务一致性解决方案

    事务就是一个会话过程中,对上下文的影响是一致的,要么所有的更改都做了,要么所有的更变都撤销掉.就要么生,要么死.没有半死不死的中间不可预期状态. 参考下薛定谔的猫. 事务是为了保障业务数据的完整性和准 ...

  5. 分布式概念扫盲(Byzantine generals problem/CAP/TPC/TCC)

    The Byzantine Generals Problem 问题描述 参考维基百科:拜占庭将军问题 投票 Situation1 A:1,B:1,C:0 A收到的指令1和0的比例为:2:1 B收到的指 ...

  6. 分布式概念-分布式事务,并发处理协议

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 提到分布式系统,分布式事务是经常被大家提起的话题,也是经常在我们编码或是系统设计时遇到的问题,很常见. 如果让大家说一种解决 ...

  7. 分布式概念-中心化副本控制机制

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 前面的文章提到过副本是分布式系统中提升数据可用性,数据容错性,以及读吞吐的主要方式,对于多个副本数据一致性处理就是比较复杂且 ...

  8. 分布式锁 分布式系统

    Zookeeper 实现分布式锁 Zookeeper 是一种提供"分布式服务协调"的中心化服务,正是 Zookeeper 的以下两个特性,分布式应用程序才可以基于它实现分布式锁功能 ...

  9. [分布式]:分布式系统的CAP理论

    2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP.之后, ...

最新文章

  1. 谢文: 三网融合还是三网凑合(转一篇好文)
  2. python开发好学吗-Python人工智能开发难学吗
  3. git学习------gt;Git 分支管理最佳实践
  4. 《剑指offer》第九题(用两个栈实现队列)
  5. POJ 3181 Dollar Dayz DP
  6. Centos7 安装Mysql5.7
  7. 灵活强大的构建系统Gradle
  8. jsp引用带参数的js文件,例如 script src=a.js?ctxpath=${base
  9. selenium java api_selenium_java常用API操作
  10. Filter 敏感词汇过滤案例
  11. 【Multisim仿真】10秒倒计时8路抢答器
  12. VS,VAX一些快捷键记录
  13. fences卸载_【设置方法】win10系统卸载fences的学习
  14. 1.(4)数据结构之链表的操作,判空,求长度,排序
  15. 深入Scala系列之一组件重用
  16. STM32 HAL库学习笔记-(SPI驱动ADXL345)
  17. leedcode每日一题:860. 柠檬水找零
  18. killall杀死nginx顽固进程
  19. 酷狗音乐动态壁纸脱离酷狗音乐独立运行
  20. 美通企业日报 | 内容质量是亚太媒体最重视的指标;“豆蔻青”将成2020年度色彩...

热门文章

  1. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2
  2. 【每日DP】day 9、P1156 垃圾陷阱(神奇的背包,时间节点处理)难度⭐⭐⭐
  3. win10 android 登录,Microsoft现在允许您在Win10中运行Android应用程序
  4. java 封装事务_Spring之路(36)–事务很重要吗?Spring为何要封装事务?Spring事务有陷阱吗?...
  5. Rosalind: 兔子与递归
  6. LoadRunner v12.55发布,大量新增功能,各协议得到优化改进
  7. Spring4-JdbcDaoSupport-查询单列
  8. 【Python学习笔记】注释,代码块,多行输出,忽略转义符的输出
  9. 一张图带你看清2014年就业形势-管理专业排名第一,就业难
  10. 第三方支付接口的技术比较研究