分布式 订阅
分布式直流电源应用范围:小型开关站、环网柜、箱式变电站和用户终端,为二次控制线路、一次开关设备(弹簧机构真空断路器、电动负荷开关等)、通讯光端机等提供直流电源。 展开全文
分布式直流电源应用范围:小型开关站、环网柜、箱式变电站和用户终端,为二次控制线路、一次开关设备(弹簧机构真空断路器、电动负荷开关等)、通讯光端机等提供直流电源。
信息
频    率
50Hz±10%
工组环境温度
-10℃~+45℃
外文名
DC Power
交流输入电压
85~265VAC
中文名
分布式直流电源
分布式直流电源应用范围
分布式直流电源 [1]  主要应用于各种型号的开关设备内,为主开关(断路器、负荷开关等)和二次保护装置提供可靠的直流操作电源。
收起全文
精华内容
参与话题
问答
  • 分布式架构知识梳理

    万次阅读 多人点赞 2019-04-21 18:55:01
    1、何为分布式何为微服务? 2、为什么需要分布式? 3、分布式核心理论基础,节点、网络、时间、顺序,一致性? 4、分布式是系统有哪些设计模式? 5、分布式有哪些类型? 6、如何实现...

    1.问题

    • 1、何为分布式何为微服务?

    • 2、为什么需要分布式?

    • 3、分布式核心理论基础,节点、网络、时间、顺序,一致性?

    • 4、分布式是系统有哪些设计模式?

    • 5、分布式有哪些类型?

    • 6、如何实现分布式?

    2.关键词

    节点,时间,一致性,CAP,ACID,BASE,P2P,机器伸缩,网络变更,负载均衡,限流,鉴权,服务发现,服务编排,降级,熔断,幂等,分库分表,分片分区,自动运维,容错处理,全栈监控,故障恢复,性能调优

    3.全文概要

    随着移动互联网的发展智能终端的普及,计算机系统早就从单机独立工作过渡到多机器协作工作。计算机以集群的方式存在,按照分布式理论的指导构建出庞大复杂的应用服务,也已经深入人心。本文力求从分布式基础理论,架构设计模式,工程应用,部署运维,业界方案这几大方面,介绍基于MSA(微服务架构)的分布式的知识体系大纲。从而对SOA到MSA进化有个立体的认识,从概念上和工具应用上更近一步了解微服务分布式的本质,身临其境的感受如何搭建全套微服务架构的过程。

    4.基础理论

    4.1SOA到MSA的进化

    SOA面向服务架构

    由于业务发展到一定层度后,需要对服务进行解耦,进而把一个单一的大系统按逻辑拆分成不同的子系统,通过服务接口来通讯,面向服务的设计模式,最终需要总线集成服务,而且大部分时候还共享数据库,出现单点故障的时候会导致总线层面的故障,更进一步可能会把数据库拖垮,所以才有了更加独立的设计方案的出现。

    MSA微服务架构

    微服务是真正意义上的独立服务,从服务入口到数据持久层,逻辑上都是独立隔离的,无需服务总线来接入,但同时增加了整个分布式系统的搭建和管理难度,需要对服务进行编排和管理,所以伴随着微服务的兴起,微服务生态的整套技术栈也需要无缝接入,才能支撑起微服务的治理理念。

    4.2节点与网络

    节点

    传统的节点也就是一台单体的物理机,所有的服务都揉进去包括服务和数据库;随着虚拟化的发展,单台物理机往往可以分成多台虚拟机,实现资源利用的最大化,节点的概念也变成单台虚拟机上面服务;近几年容器技术逐渐成熟后,服务已经彻底容器化,也就是节点只是轻量级的容器服务。总体来说,节点就是能提供单位服务的逻辑计算资源的集合。

    网络

    分布式架构的根基就是网络,不管是局域网还是公网,没有网络就无法把计算机联合在一起工作,但是网络也带来了一系列的问题。网络消息的传播有先后,消息丢失和延迟是经常发生的事情,我们定义了三种网络工作模式:

    同步网络

    • 节点同步执行

    • 消息延迟有限

    • 高效全局锁

    半同步网络

    • 锁范围放宽

    异步网络

    • 节点独立执行

    • 消息延迟无上限

    • 无全局锁

    • 部分算法不可行

      常用网络传输层有两大协议的特点简介:

    TCP协议

    • 首先tcp尽管其他可以更快

    • tcp解决重复和乱序问题

    UDP协议

    • 常量数据流

    • 丢包不致命

    4.3时间与顺序

    时间

    慢速物理时空中,时间独自在流淌着,对于串行的事务来说,很简单的就是跟着时间的脚步走就可以,先来后到的发生。而后我们发明了时钟来刻画以往发生的时间点,时钟让这个世界尽然有序。但是对于分布式世界来说,跟时间打交道着实是一件痛苦的事情。分布式世界里面,我们要协调不同节点之间的先来后到关系,但是不同节点本身承认的时间又各执己见,于是我们创造了网络时间协议(NTP)试图来解决不同节点之间的标准时间,但是NTP本身表现并不如人意,所以我们又构造除了逻辑时钟,最后改进为向量时钟:

    NTP的一些缺点,无法完全满足分布式下并发任务的协调问题

    • 节点间时间不同步

    • 硬件时钟漂移

    • 线程可能休眠

    • 操作系统休眠

    • 硬件休眠

    逻辑时钟

    • 定义事件先来后到

    • t’ = max(t, t_msg + 1)

     

    向量时钟

    • t_i’ = max(t_i, t_msg_i)

    原子钟

    顺序

    有了衡量时间的工具,解决顺序问题自然就是水到渠成了。因为整个分布式的理论基础就是如何协商不同节点的一致性问题,而顺序则是一致性理论的基本概念,所以前文我们才需要花时间介绍衡量时间的刻度和工具。

    4.4一致性理论

    说到一致性理论,我们必须看一张关于一致性强弱对系统建设影响的对比图:

    该图对比了不同一致性算法下的事务,性能,错误,延迟的平衡。

    强一致性ACID

    单机环境下我们对传统关系型数据库有苛刻的要求,由于存在网络的延迟和消息丢失,ACID便是保证事务的原则,这四大原则甚至我们都不需要解释出来就耳熟能详了:

    • Atomicity:原子性,一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

    • Consistency:一致性,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

    • Isolation:隔离性,数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

    • Durabilit:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

    分布式一致性CAP

    分布式环境下,我们无法保证网络的正常连接和信息的传送,于是发展出了CAP/FLP/DLS这三个重要的理论:

    • CAP:分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition)。

    • FLP:在异步环境中,如果节点间的网络延迟没有上限,只要有一个恶意的节点存在,就没有算法能在有限的时间内达成共识。

    • DLS:

      (1)在一个部分同步网络的模型(也就是说:网络延时有界限但是我们并不知道在哪里)下运行的协议可以容忍1/3任意(换句话说,拜占庭)错误;

      (2)在一个异步模型中的确定性的协议(没有网络延时上限)不能容错(不过这个论文没有提起随机化算法可以容忍1/3的错误);

      (3)同步模型中的协议(网络延时可以保证小于已知d时间)可以,令人吃惊的,达到100%容错,虽然对1/2的节点出错可以发生的情况有所限制

    弱一致性BASE

    多数情况下,其实我们也并非一定要求强一致性,部分业务可以容忍一定程度的延迟一致,所以为了兼顾效率,发展出来了最终一致性理论BASE,BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)

    • 基本可用(Basically Available):基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

    • 软状态(Soft State):软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。

    • 最终一致性(Eventual Consistency):最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

    一致性算法

    分布式架构的核心就在一致性的实现和妥协,那么如何设计一套算法来保证不同节点之间的通信和数据达到无限趋向一致性,就非常重要了。保证不同节点在充满不确定性网络环境下能达成相同副本的一致性是非常困难的,业界对该课题也做了大量的研究。

    首先我们要了解一致性的大前提原则(CALM):

    CALM原则的全称是 Consistency and Logical Monotonicity ,主要描述的是分布式系统中单调逻辑与一致性的关系,它的内容如下,参考consistency as logical monotonicity

    • 在分布式系统中,单调的逻辑都能保证 “最终一致性”,这个过程中不需要依赖中心节点的调度

    • 任意分布式系统,如果所有的非单调逻辑都有中心节点调度,那么这个分布式系统就可以实现最终“一致性”

    然后再关注分布式系统的数据结构CRDT(Conflict-Free Replicated Data Types):

    我们了解到分布式一些规律原则之后,就要着手考虑如何来实现解决方案,一致性算法的前提是数据结构,或者说一切算法的根基都是数据结构,设计良好的数据结构加上精妙的算法可以高效的解决现实的问题。经过前人不断的探索,我们得知分布式系统被广泛采用的数据结构CRDT。

    参考《谈谈CRDT》,A comprehensive study of Convergent and Commutative Replicated Data Types

    • 基于状态(state-based):即将各个节点之间的CRDT数据直接进行合并,所有节点都能最终合并到同一个状态,数据合并的顺序不会影响到最终的结果。

    • 基于操作(operation-based):将每一次对数据的操作通知给其他节点。只要节点知道了对数据的所有操作(收到操作的顺序可以是任意的),就能合并到同一个状态。

    了解数据结构后,我们需要来关注一下分布式系统的一些重要的协议HATs(Highly Available Transactions),ZAB(Zookeeper Atomic Broadcast):

    参考《高可用事务》,《ZAB协议分析》

    最后要学习的是业界主流的一致性算法

    说实话具体的算法我也还没完全搞懂,一致性算法是分布式系统最核心本质的内容,这部分的发展也会影响架构的革新,不同场景的应用也催生不同的算法

    • Paxos:《优雅的Paxos算法》

    • Raft :《Raft 一致性算法》

    • Gossip:《Gossip Visualization》

    这一节我们说完分布式系统里面核心理论基础,如何达成不同节点之间的数据一致性,下面我们将会讲到目前都有哪些主流的分布式系统。

    5.场景分类

    5.1文件系统

    单台计算机的存储始终有上限,随着网络的出现,多台计算机协作存储文件的方案也相继被提出来。最早的分布式文件系统其实也称为网络文件系统,第一个文件服务器在1970年代被发展出来。在1976年迪吉多公司设计出File Access Listener(FAL),而现代分布式文件系统则出自赫赫有名的Google的论文,《The Google File System》奠定了分布式文件系统的基础。现代主流分布式文件系统参考《分布式文件系统对比》,下面列举几个常用的文件系统

    • HDFS

    • FastDFS

    • Ceph

    • mooseFS

    5.2数据库

    数据库当然也是属于文件系统,主数据增加了事务,检索,擦除等高级特性,所以复杂度又增加了,既要考虑数据一致性也得保证足够的性能。传统关系型数据库为了兼顾事务和性能的特性,在分布式方面的发展有限,非关系型数据库摆脱了事务的强一致性束缚,达到了最终一致性的效果,从而有了飞跃的发展,NoSql(Not Only Sql)也产生了多个架构的数据库类型,包括KV,列式存储,文档类型等。

    • 列式存储:Hbase

    • 文档存储:Elasticsearch,MongoDB

    • KV类型:Redis

    • 关系型:Spanner

    5.3计算

    分布式计算系统构建在分布式存储的基础上,充分发挥分布式系统的数据冗余灾备,多副本高效获取数据的特性,进而并行计算,把原本需要长时间计算的任务拆分成多个任务并行处理,从而提高了计算效率。分布式计算系统在场景上分为离线计算,实时计算和流式计算。

    • 离线:Hadoop

    • 实时:Spark

    • 流式:Storm,Flink/Blink

    5.4缓存

    缓存作为提升性能的利器无处不在,小到CPU缓存架构,大道分布式应用存储。分布式缓存系统提供了热点数据的随机访问机制,大大了提升了访问时间,但是带来的问题是如何保证数据的一致性,引入分布式锁来解决这个问题,主流的分布式存储系统基本就是Redis了

    • 持久化:Redis

    • 非持久化:Memcache

    5.5消息

    分布式消息队列系统是消除异步带来一系列的复杂步骤的一大利器,多线程高并发场景先我们常常要谨慎的去设计业务代码,来保证多线程并发情况下不出现资源竞争导致的死锁问题。而消息队列以一种延迟消费的模式将异步任务都存到队列,然后再逐个消化。

    • Kafka

    • RabbitMQ

    • RocketMQ

    • ActiveMQ

    5.6监控

    分布式系统从单机到集群的形态发展,复杂度也大大提高,所以对整个系统的监控也是必不可少。

    • Zookeeper

    5.7应用

    分布式系统的核心模块就是在应用如何处理业务逻辑,应用直接的调用依赖于特定的协议来通信,有基于RPC协议的也有基于通用的HTTP协议。

    • HSF

    • Dubble

    5.8日志

    错误对应分布式系统是家常便饭,而且我们设计系统的时候本身就需要把容错作为普遍存在的现象来考虑。那么当出现故障的时候,快速恢复和排查故障就显得非常重要了。分布式日志采集存储和检索则可以给我提供有力的工具来定位请求链路中出现问题的环节。

    • 日志采集:flume

    • 日志存储:ElasticSearch/Solr,SLS

    • 日志定位:Zipkin

    5.9账本

    前文我们提到所谓分布式系统,是迫于单机的性能有限,而堆硬件却又无法无休止的增加,单机堆硬件最终也会遇到性能增长曲线的瓶颈。于是我们才采用了多台计算机来干同样的活,但是这样的分布式系统始终需要中心化的节点来监控或者调度系统的资源,即使该中心节点也可能是多节点组成。而区块链则是真正的区中心化分布式系统,系统里面才有P2P网络协议各自通信,没有真正意义的中心节点,彼此按照区块链节点的算力,权益等机制来协调新区块的产生。

    • 比特币

    • 以太坊

    6.设计模式

    上节我们列举了不同场景下不同分布式系统架构扮演的角色和实现的功能,本节我们更进一步归纳分布式系统设计的时候是如何考虑架构设计的,不同设计方案直接的区别和侧重点,不同场景需要选择合作设计模式,来减少试错的成本,设计分布式系统需要考虑以下的问题。

    6.1可用性

    可用性是系统运行和工作的时间比例,通常以正常运行时间的百分比来衡量。它可能受系统错误,基础架构问题,恶意攻击和系统负载的影响。分布式系统通常为用户提供服务级别协议(SLA),因此应用程序必须设计为最大化可用性。

    • 健康检查:系统实现全链路功能检查,外部工具定期通过公开端点访问系统

    • 负载均衡:使用队列起到削峰作用,作为请求和服务之间的缓冲区,以平滑间歇性的重负载

    • 节流:限制应用级别、租户或整个服务所消耗资源的范围

    6.2数据管理

    数据管理是分布式系统的关键要素,并影响大多数质量的属性。由于性能,可扩展性或可用性等原因,数据通常托管在不同位置和多个服务器上,这可能带来一系列挑战。例如,必须维护数据一致性,并且通常需要跨不同位置同步数据。

    • 缓存:根据需要将数据从数据存储层加载到缓存

    • CQRS(Command Query Responsibility Segregation):    命令查询职责分离

    • 事件溯源:仅使用追加方式记录域中完整的系列事件

    • 索引表:在经常查询引用的字段上创建索引

    • 物化视图:生成一个或多个数据预填充视图

    • 拆分:将数据拆分为水平的分区或分片

    6.3设计与实现

    良好的设计包括诸如组件设计和部署的一致性,简化管理和开发的可维护性,以及允许组件和子系统用于其他应用程序和其他方案的可重用性等因素。在设计和实施阶段做出的决策对分布式系统和服务质量和总体拥有成本产生巨大影响。

    • 代理:反向代理

    • 适配器:    在现代应用程序和遗留系统之间实现适配器层

    • 前后端分离:    后端服务提供接口供前端应用程序调用

    • 计算资源整合:将多个相关任务或操作合并到一个计算单元中

    • 配置分离:将配置信息从应用程序部署包中移出到配置中心

    • 网关聚合:使用网关将多个单独的请求聚合到一个请求中

    • 网关卸载:将共享或专用服务功能卸载到网关代理

    • 网关路由:使用单个端点将请求路由到多个服务

    • 领导人选举:通过选择一个实例作为负责管理其他实例管理员,协调分布式系统的云

    • 管道和过滤器:将复杂的任务分解为一系列可以重复使用的单独组件

    • 边车:将应用的监控组件部署到单独的进程或容器中,以提供隔离和封装

    • 静态内容托管:将静态内容部署到CDN,加速访问效率

    6.4消息

    分布式系统需要一个连接组件和服务的消息传递中间件,理想情况是以松散耦合的方式,以便最大限度地提高可伸缩性。异步消息传递被广泛使用,并提供许多好处,但也带来了诸如消息排序,幂等性等挑战

    • 竞争消费者:多线程并发消费

    • 优先级队列:    消息队列分优先级,优先级高的先被消费

    6.5管理与监控

    分布式系统在远程数据中心中运行,无法完全控制基础结构,这使管理和监视比单机部署更困难。应用必须公开运行时信息,管理员可以使用这些信息来管理和监视系统,以及支持不断变化的业务需求和自定义,而无需停止或重新部署应用。

    6.6性能与扩展

    性能表示系统在给定时间间隔内执行任何操作的响应性,而可伸缩性是系统处理负载增加而不影响性能或容易增加可用资源的能力。分布式系统通常会遇到变化的负载和活动高峰,特别是在多租户场景中,几乎是不可能预测的。相反,应用应该能够在限制范围内扩展以满足需求高峰,并在需求减少时进行扩展。可伸缩性不仅涉及计算实例,还涉及其他元素,如数据存储,消息队列等。

    6.7弹性

    弹性是指系统能够优雅地处理故障并从故障中恢复。分布式系统通常是多租户,使用共享平台服务,竞争资源和带宽,通过Internet进行通信,以及在商用硬件上运行,意味着出现瞬态和更永久性故障的可能性增加。为了保持弹性,必须快速有效地检测故障并进行恢复。

    • 隔离:将应用程序的元素隔离到池中,以便在其中一个失败时,其他元素将继续运行。

    • 断路器:处理连接到远程服务或资源时可能需要不同时间修复的故障。

    • 补偿交易:撤消一系列步骤执行的工作,这些步骤共同定义最终一致的操作

    • 健康检查:系统实现全链路功能检查,外部工具定期通过公开端点访问系统

    • 重试:通过透明地重试先前失败的操作,使应用程序在尝试连接到服务或网络资源时处理预期的临时故障

    6.8安全

    安全性是系统能够防止在设计使用之外的恶意或意外行为,并防止泄露或丢失信息。分布式系统在受信任的本地边界之外的Internet上运行,通常向公众开放,并且可以为不受信任的用户提供服务。必须以保护应用程序免受恶意攻击,限制仅允许对已批准用户的访问,并保护敏感数据。

    • 联合身份:将身份验证委派给外部身份提供商

    • 看门人:    通过使用专用主机实例来保护应用程序和服务,该实例充当客户端与应用程序或服务之间的代理,验证和清理请求,并在它们之间传递请求和数据

    • 代客钥匙:使用为客户端提供对特定资源或服务的受限直接访问的令牌或密钥。

    7.工程应用

    前文我们介绍了分布式系统的核心理论,面临的一些难题和解决问题的折中思路,罗列了现有主流分布式系统的分类,而且归纳了建设分布式系统的一些方法论,那么接下来我们将从工程角度来介绍真刀真枪搭建分布式系统包含的内容和步骤。

    7.1资源调度

    巧妇难为无米之炊,我们一切的软件系统都是构建在硬件服务器的基础上,从最开始的物理机直接部署软件系统,到虚拟机的应用,最后到了资源上云容器化,硬件资源的使用也开始了集约化的管理。本节从对比的是传统运维角色对应的职责范围,在devops环境下,开发运维一体化,我们要实现的也是资源的灵活高效使用。

    弹性伸缩

    过去软件系统随着用户量增加需要增加机器资源的话,传统的方式就是找运维申请机器,然后部署好软件服务接入集群,整个过程依赖的是运维人员的人肉经验,效率低下而且容易出错。微服务分布式则无需人肉增加物理机器,在容器化技术的支撑下,我们只需要申请云资源,然后执行容器脚本即可。

    • 应用扩容

      用户激增需要对服务进行扩展,包括自动化扩容,峰值过后的自动缩容

    • 机器下线

      对于过时应用,进行应用下线,云平台收回容器宿主资源

    • 机器置换

      对于故障机器,可供置换容器宿主资源,服务自动启动,无缝切换

    网络管理

    有了计算资源后,另外最重要的就是网络资源了。在现有的云化背景下,我们几乎不会直接接触到物理的带宽资源,而是直接的由云平台统一管理带宽资源,我们需要的是对网络资源的最大化应用和有效的管理。

    • 域名申请

      应用申请配套域名资源的申请,多套域名映射规则的规范

    • 域名变更

      域名变更统一平台管理

    • 负载管理

      多机应用的访问策略设定

    • 安全外联

      基础访问鉴权,拦截非法请求

    • 统一接入

      提供统一接入的权限申请平台,提供统一的登录管理

    故障快照

    在系统故障的时候我们第一要务是系统恢复,同时保留案发现场也是非常重要的,资源调度平台则需要有统一的机制保存好故障现场。

    • 现场保留

      内存分布,线程数等资源现象的保存,如JavaDump钩子接入

    • 调试接入

      采用字节码技术无需入侵业务代码,可以供生产环境现场日志打点调试

    7.2流量调度

    在我们建设好分布式系统后,最先受到考验的关口就是网关了,进而我们需要关注好系统流量的情况,也就是如何对流量的管理,我们追求的是在系统可容纳的流量上限内,把资源留给最优质的流量使用,而把非法恶意的流量挡在门外,这样节省成本的同时确保系统不会被冲击崩溃。

    负载均衡

    负载均衡是我们对服务如何消化流量的通用设计,通常分为物理层的底层协议分流的硬负载均衡和软件层的软负载。负载均衡解决方案已经是业界成熟的方案,我们通常会针对特定业务在不同环境进行优化,常用有如下的负载均衡解决方案

    • 交换机

    • F5

    • LVS/ALI-LVS

    • Nginx/Tengine

    • VIPServer/ConfigServer

    网关设计

    负载均衡首当其冲的就是网关,因为中心化集群流量最先打到的地方就是网关了,如果网关扛不住压力的话,那么整个系统将不可用。

    • 高性能

      网关设计第一需要考虑的是高性能的流量转发,网关单节点通常能达到上百万的并发流量

    • 分布式

      出于流量压力分担和灾备考虑,网关设计同样需要分布式

    • 业务筛选

      网关同设计简单的规则,排除掉大部分的恶意流量

    流量管理

    • 请求校验

      请求鉴权可以把多少非法请求拦截,清洗

    • 数据缓存

      多数无状态的请求存在数据热点,所以采用CDN可以把相当大一部分的流量消费掉

    流控控制

    剩下的真实流量我们采用不同的算法来分流请求

    • 流量分配

      • 计数器

      • 队列

      • 漏斗

      • 令牌桶

      • 动态流控

    • 流量限制

      在流量激增的时候,通常我们需要有限流措施来防止系统出现雪崩,那么就需要预估系统的流量上限,然后设定好上限数,但流量增加到一定阈值后,多出来的流量则不会进入系统,通过牺牲部分流量来保全系统的可用性。

      • QPS粒度

      • 线程数粒度

      • RT阈值

      • 限流策略

      • 限流工具 - Sentinel

    7.3服务调度

    所谓打铁还需自身硬,流量做好了调度管理后,剩下的就是服务自身的健壮性了。分布式系统服务出现故障是常有的事情,甚至我们需要把故障本身当做是分布式服务的一部分。

    注册中心

    我们网络管理一节中介绍了网关,网关是流量的集散地,而注册中心则是服务的根据地。

    • 状态类型

      第一好应用服务的状态,通过注册中心就可以检测服务是否可用

    • 生命周期

      应用服务不同的状态组成了应用的生命周期

    版本管理

    • 集群版本

      集群不用应用有自身对应的版本号,由不同服务组成的集群也需要定义大的版本号

    • 版本回滚

      在部署异常的时候可以根据大的集群版本进行回滚管理

    服务编排

    服务编排的定义是:通过消息的交互序列来控制各个部分资源的交互。参与交互的资源都是对等的,没有集中的控制。微服务环境下服务众多我们需要有一个总的协调器来协议服务之间的依赖,调用关系,K8S则是我们的不二选择。

    • K8S

    • Spring Cloud

      • HSF

      • ZK+Dubble

    服务控制

    前面我们解决了网络的健壮性和效率问题,这节介绍的是如何使我们的服务更加健壮。

    • 发现

      资源管理那节我们介绍了从云平台申请了容器宿主资源后,通过自动化脚本就可以启动应用服务,启动后服务则需要发现注册中心,并且把自身的服务信息注册到服务网关,也即是网关接入。注册中心则会监控服务的不同状态,做健康检查,把不可用的服务归类标记。

      • 网关接入

      • 健康检查

    • 降级

      当用户激增的时候,我们首先是在流量端做手脚,也就是限流。当我们发现限流后系统响应变慢了,有可能导致更多的问题时,我们也需要对服务本身做一些操作。服务降级就是把当前不是很核心的功能关闭掉,或者不是很要紧的准确性放宽范围,事后再做一些人工补救。

      • 降低一致性约束

      • 关闭非核心服务

      • 简化功能

    • 熔断

      当我们都做了以上的操作后,还是觉得不放心,那么就需要再进一步操心。熔断是对过载的一种自身保护,犹如我们开关跳闸一样。比如当我们服务不断对数据库进行查询的时候,如果业务问题造成查询问题,这是数据库本身需要熔断来保证不会被应用拖垮,并且访问友好的信息,告诉服务不要再盲目调用了。

      • 闭合状态

      • 半开状态

      • 断开状态

      • 熔断工具- Hystrix

    • 幂等

      我们知道,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。那么久需要对单次操作赋予一个全局的id来做标识,这样多次请求后我们可以判断来源于同个客户端,避免出现脏数据。

      • 全局一致性ID

      • Snowflake

    7.4数据调度

    数据存储最大的挑战就是数据冗余的管理,冗余多了效率变低而且占用资源,副本少了起不到灾备的作用,我们通常的做法是把有转态的请求,通过转态分离,转化为无状态请求。

    状态转移

    分离状态至全局存储,请求转换为无状态流量,比如我们通常会将登陆信息缓存至全局redis中间件,而不需要在多个应用中去冗余用户的登陆数据。

    分库分表

    数据横向扩展

    分片分区

    多副本冗余

    7.5自动化运维

    我们从资源申请管理的时候就介绍到devops的趋势,真正做到开发运维一体化则需要不同的中间件来配合完成。

    配置中心

    全局配置中心按环境来区分,统一管理,减少了多处配置的混乱局面

    • switch

    • diamend

    部署策略

    微服务分布式部署是家常便饭,如何让我们的服务更好的支撑业务发展,稳健的部署策略是我们首先需要考虑的,如下的部署策略适合不同业务和不同的阶段。

    • 停机部署

    • 滚动部署

    • 蓝绿部署

    • 灰度部署

    • A/B测试

    作业调度

    任务调度是系统必不可少的一个环节,传统的方式是在Linux机器上配置crond定时任务或者直接在业务代码里面完成调度业务,现在则是成熟的中间件来代替。

    • SchedulerX

    • Spring定时任务

    应用管理

    运维工作中很大一部分时间需要对应用进行重启,上下线操作,还有日志清理。

    • 应用重启

    • 应用下线

    • 日志清理

    7.6容错处理

    既然我们知道分布式系统故障时家常便饭的事情,那么应对故障的方案也是不可或缺的环节。通常我们有主动和被动的方式来处理,主动是在错误出现的时候,我们试图再试试几次,说不定就成功了,成功的话就可以避免了该次错误。被动方式是错误的事情已经发生了,为了挽回,我们只是做时候处理,把负面影响降到最小。

    重试设计

    重试设计的关键在于设计好重试的时间和次数,如果超过重试次数,或是一段时间,那么重试就没有意义了。开源的项目 spring-retry可以很好的实现我们重试的计划。

    事务补偿

    事务补偿符合我们最终一致性的理念。补偿事务不一定会将系统中的数据返回到原始操作开始时其所处的状态。 相反,它补偿操作失败前由已成功完成的步骤所执行的工作。补偿事务中步骤的顺序不一定与原始操作中步骤的顺序完全相反。 例如,一个数据存储可能比另一个数据存储对不一致性更加敏感,因而补偿事务中撤销对此存储的更改的步骤应该会首先发生。对完成操作所需的每个资源采用短期的基于超时的锁并预先获取这些资源,这样有助于增加总体活动成功的可能性。 仅在获取所有资源后才应执行工作。 锁过期之前必须完成所有操作。

    7.7全栈监控

    由于分布式系统是由众多机器共同协作的系统,而且网络也无法保证完全可用,所以我们需要建设一套对各个环节都能监控的系统,这样我们才能从底层到业务各个层面进行监控,出现意外的时候可以及时修复故障,避免更多的问题出现。

    基础层

    基础层面是对容器资源的监测,包含各个硬件指标的负载情况

    • CPU,IO,内存,线程,吞吐

    中间件

    分布式系统接入了大量的中间件平台,中间件本身的健康情况也需要监控

    应用层

    • 性能监控

      应用层面的需要对每个应用服务的实时指标(qps,rt),上下游依赖等进行监控

    • 业务监控

      除了应用本身的监控程度,业务监控也是保证系统正常的一个环节,通过设计合理的业务规则,对异常的情况做报警设置

    监控链路

    • zipkin/eagleeye

    • sls

    • goc

    • Alimonitor

    7.8故障恢复

    当故障已经发生后,我们第一要做的是马上消除故障,确保系统服务正常可用,这个时候通常的做回滚操作。

    应用回滚

    应用回滚之前需要保存好故障现场,以便排查原因。

    基线回退

    应用服务回滚后,代码基线也需要revert到前一版本。

    版本回滚

    整体回滚需要服务编排,通过大版本号对集群进行回滚。

    7.9性能调优

    性能优化是分布式系统的大专题,涉及的面非常广,这块简直可以单独拿出来做一个系列来讲,本节就先不展开。本身我们做服务治理的过程也是在性能的优化过程。

    分布式锁

    缓存是解决性能问题的一大利器,理想情况下,每个请求不需要额外计算立刻能获取到结果返回时最快的。小到CPU的三级缓存,大到分布式缓存,缓存无处不在,分布式缓存需要解决的就是数据的一致性,这个时候我们引入了分布式锁的概念,如何处理分布式锁的问题将决定我们获取缓存数据的效率。

    高并发

    多线程编程模式提升了系统的吞吐量,但也同时带来了业务的复杂度。

    异步

    事件驱动的异步编程是一种新的编程模式,摒弃了多线程的复杂业务处理问题,同时能够提升系统的响应效率。

    8.总结

    最后总结一下,如果有可能的话,请尝试使用单节点方式而不是分布式系统。分布式系统伴随着一些失败的操作,为了处理灾难性故障,我们使用备份。为了提高可靠性,我们引入了冗余。分布式系统本质就是一堆机器的协同。而我们要做的就是搞出各种手段来然机器的运行达到预期。这么复杂的系统,需要了解各个环节,各个中间件的接入,是一个非常大的工程。庆幸的是,在微服务背景下,多数基础性的工作已经有人帮我们实现了。前文所描述的分布式架构,在工程实现了是需要用到分布式三件套(Docker+K8S+Srping Cloud)基本就可以构建出来了。

    分布式架构核心技术分布图如下:

    分布式技术栈使用中间件:

    最后用一张图来概括分布式系统的知识体系。

     

    展开全文
  • 一分钟弄懂什么是分布式和微服务

    万次阅读 多人点赞 2018-10-18 21:33:31
    简单的说,微服务是架构设计方式,分布式是系统部署方式,两者概念不同 微服务是啥?这里不引用书本上的复杂概论了,简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。这个服务可以...

    简单的说,微服务是架构设计方式,分布式是系统部署方式,两者概念不同

    mark
    mark
    微服务是啥?

    这里不引用书本上的复杂概论了,简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。这个服务可以单独部署运行,服务之间可以通过RPC来相互交互,每个微服务都是由独立的小团队开发,测试,部署,上线,负责它的整个生命周期。

    微服务架构又是啥?

    在做架构设计的时候,先做逻辑架构,再做物理架构,当你拿到需求后,估算过最大用户量和并发量后,计算单个应用服务器能否满足需求,如果用户量只有几百人的小应用,单体应用就能搞定,即所有应用部署在一个应用服务器里,如果是很大用户量,且某些功能会被频繁访问,或者某些功能计算量很大,建议将应用拆解为多个子系统,各自负责各自功能,这就是微服务架构。

    mark
    那么分布式又是啥?

    分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的。逻辑架构设计完后就该做物理架构设计,系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署,生产环境下的微服务肯定是分布式部署的,分布式部署的应用不一定是微服务架构的,比如集群部署,它是把相同应用复制到不同服务器上,但是逻辑功能上还是单体应用。

    微服务相比分布式服务来说,它的粒度更小,服务之间耦合度更低,由于每个微服务都由独立的小团队负责,因此它敏捷性更高,分布式服务最后都会向微服务架构演化,这是一种趋势, 不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维将会很难

    展开全文
  • JAVA 分布式 - 分布式介绍

    万次阅读 多人点赞 2018-11-22 22:44:26
    什么是分布式系统? 要理解分布式系统,主要需要明白一下2个方面: 1.分布式系统一定是由多个节点组成的系统。 其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。 2.这些连通的节点上部署了...

    什么是分布式系统?

    要理解分布式系统,主要需要明白一下2个方面:

    • 1.分布式系统一定是由多个节点组成的系统。
      其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。
    • 2.这些连通的节点上部署了我们的节点,并且相互的操作会有协同。

    分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已,而实际上这些服务是通过背后的众多服务器组成的一个分布式系统,因此分布式系统看起来像是一个超级计算机一样。

    例如淘宝,平时大家都会使用,它本身就是一个分布式系统,我们通过浏览器访问淘宝网站时,这个请求的背后就是一个庞大的分布式系统在为我们提供服务,整个系统中有的负责请求处理,有的负责存储,有的负责计算,最终他们相互协调把最后的结果返回并呈现给用户。

    在这里插入图片描述

    使用分布式系统主要有特点:

        1.增大系统容量。 我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。

        2.加强系统可用。 我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。

        3.因为模块化,所以 系统模块重用度更高

        4.因为软件服务模块被拆分,开发和发布速度可以并行而变得更快

        5.系统扩展性更高

        6.团队协作流程也会得到改善

    分布式系统的类型有三种:

        1.分布式处理,但只有一个总数据库,没有局部数据库

        2.分层式处理,每一层都有自己的数据库

        3.充分分散的分布式网络,没有中央控制部分,各节点之间的联系方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式的联接等

    什么是 JAVA 分布式应用?

    一个大型的系统往往被分为几个子系统来做,一个子系统可以部署在一台机器的多个 JVM 上,也可以部署在多台机器上。但是每一个系统不是独立的,不是完全独立的。需要相互通信,共同实现业务功能。

    一句话来说:分布式就是通过计算机网络将后端工作分布到多台主机上,多个主机一起协同完成工作。

    实现分布式主要的方式

    分布式应用用到的技术: 网络通信,基于消息方式的系统间通信和基于远程调用的系统间通信。

    缺点: 就是会增加技术的复杂度。
    基于消息的系统通信方式,主要是利用的网络协议,比如 TCP/IP 协议。
    系统间的通信还需要对数据进行处理,比如同步 IO 和异步 IO。
    远程调用实现系统间的通信:通过调用本地的java接口的方法来透明的调用远程java的实现。具体的细节有框架来实现。

    在这里插入图片描述

    基于Java自身技术实现消息方式的系统间通信:
    基于Java自身包实现消息方式的系统间通信的方式有:
    TCP/IP+BIO、TCP/IP+NIO、UDP/IP+BIO以及UDP/IP+NIO 4种方式

    TCP/IP+BIO 在 Java 中可基于 Socket、ServerSocket 来实现 TCP/IP+BIO 的系统间通信。

    Socket 主要用于实现建立连接及网络 IO 的操作,ServerSocket 主要用于实现服务器端端口的监听及 Socket 对象的获取。

    多个客户端访问服务器端的情况下,会遇到两个问题:建立多个 socket 的,占用过多的本地资源,服务器端要承受巨大的来访量;创建过多的 socket,占用过多的资源,影响性能。

    通常解决这种问题的办法是,使用 连接池,既能限制连接的数量,又能避免创建的过程,可以很大的提高性的问题。缺点就是竞争量大的时候造成激烈的竞争和等待。需要注意的是,要设置超时时间,如果不这样的话,会造成无限制的等待。

    为了解决这个问题,采用一连接一线程的方式,同时也会带来副作用,内存占用过多。
    TCP/IP 异步通信: JAVA NIO 通道技术实现。

    JAVA 分布式知识体系介绍

    附上某 JAVA 分布式学习目录,帮助了解分布式都有哪些东西

    第 1 章 分布式 Java应用
    1.1 基于消息方式实现系统间的通信
        1.1.1 基于 Java自身技术实现消息方式的系统间通信
        1.1.2 基于开源框架实现消息方式的系统间通信
    1.2 基于远程调用方式实现系统间的通信
        1.2.1 基于 Java自身技术实现远程调用方式的系统间通信
        1.2.2 基于开源框架实现远程调用方式的系统间通信

    第 2 章 大型分布式 Java应用与 SOA
    2.1 基于 SCA实现 SOA平台
    2.2 基于 ESB实现 SOA平台
    2.3 基于 Tuscany实现 SOA平台
    2.4 基于 Mule 实现 SOA平台

    第 3 章 深入理解 JVM
    3.1 Java代码的执行机制
        3.1.1 Java源码编译机制
        3.1.2 类加载机制
        3.1.3 类执行机制
    3.2 JVM内存管理
        3.2.1 内存空间
        3.2.2 内存分配
        3.2.3 内存回收
        3.2.4 JVM 内存状况查看方法和分析工具
    3.3 JVM线程资源同步及交互机制
        3.3.1 线程资源同步机制
        3.3.2 线程交互机制
        3.3.3 线程状态及分析

    第 4 章 分布式应用与 SunJDK类库
    4.1 集合包
        4.1.1 ArrayList
        4.1.2 LinkedList
        4.1.3 Vector
        4.1.4 Stack
        4.1.5 HashSet
        4.1.6 TreeSet
        4.1.7 HashMap
        4.1.8 TreeMap
        4.1.9 性能测试
        4.1.10 小结
    4.2 并发包( java.util.concurrent )
        4.2.1 ConcurrentHashMap
        4.2.2 CopyOnWriteArrayList
        4.2.3 CopyOnWriteArraySet
        4.2.4 ArrayBlockingQueue
        4.2.5 AtomicInteger
        4.2.6 ThreadPoolExecutor
        4.2.7 Executors
        4.2.8 FutureTask
        4.2.9 Semaphore
        4.2.10 CountDownLatch
        4.2.11 CyclicBarrier
        4.2.12 ReentrantLock
        4.2.13 Condition
        4.2.14 ReentrantReadWriteLock
    4.3 序列化 /反序列化
        4.3.1 序列化
        4.3.2 反序列化

    第 5 章 性能调优
    5.1 寻找性能瓶颈
        5.1.1 CPU消耗分析
        5.1.2 文件 IO 消耗分析
        5.1.3 网络 IO 消耗分析
        5.1.4 内存消耗分析
        5.1.5 程序执行慢原因分析
    5.2 调优
        5.2.1 JVM 调优
        5.2.2 程序调优
        5.2.3 对于资源消耗不多,但程序执行慢的情况

    第 6 章 构建高可用的系统
    6.1 避免系统中出现单点
        6.1.1 负载均衡技术
        6.1.2 热备
    6.2 提高应用自身的可用性
        6.2.1 尽可能地避免故障
        6.2.2 及时发现故障
        6.2.3 及时处理故障
        6.2.4 访问量及数据量不断上涨的应对策略

    第 7 章 构建可伸缩的系统
    7.1 垂直伸缩
        7.1.1 支撑高访问量
        7.1.2 支撑大数据量
        7.1.3 提升计算能力
    7.2 水平伸缩
        7.2.1 支撑高访问量
        7.2.2 支撑大数据量
        7.2.3 提升计算能力

    展开全文
  • 分布式与集群的区别

    万次阅读 2018-08-13 17:49:15
    一句话:分布式是并联工作的,集群是串联工作的。 1:分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。  分布式中的每一个节点,都可以做集群。 而集群并不一定...

    先说区别:
    一句话:分布式是并联工作的,集群是串联工作的。
    1:分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。 
    分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。 
    举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。 
    而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。 
    分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。

    2:简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

    例如:

    如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行该任务需10小时。

    采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型)

    而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,1小时后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务!

     

    以下是摘抄自网络文章:

    集群概念

    1. 两大关键特性 
    集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:

    ·  可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。

    ·  高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。

    2. 两大能力 
    为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力:

    ·  负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。

    ·  错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。

    负载均衡和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。

    3. 两大技术 
    实现集群务必要有以下两大技术:

    ·  集群地址--集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。具有单一集群地址(也叫单一影像)是集群的一个基 本特征。维护集群地址的设置被称为负载均衡器。负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。有的负载均 衡器实现真正的负载均衡算法,有的只支持任务的转换。只实现任务转换的负载均衡器适用于支持ACTIVE-STANDBY的集群环境,在那里,集群中只有 一个服务实体工作,当正在工作的服务实体发生故障时,负载均衡器把后来的任务转向另外一个服务实体。

    ·  内部通信--为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体心跳测试信息、服务实体间任务执行上下文信息的通信。

    具有同一个集群地址使得客户端能访问集群提供的计算服务,一个集群地址下隐藏了各个服务实体的内部地址,使得客户要求的计算服务能在各个服务实体之间分布。内部通信是集群能正常运转的基础,它使得集群具有均衡负载和错误恢复的能力。

    集群分类

    Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)

    高可用集群( High Availability Cluster)
    负载均衡集群(Load Balance Cluster)
    科学计算集群(High Performance Computing Cluster)
    ================================================

    具体包括:

    Linux High Availability 高可用集群                                       
    (普通两节点双机热备,多节点HA集群,RAC, shared, share-nothing集群等)

    Linux Load Balance 负载均衡集群                                      
     (LVS等....)

    Linux High Performance Computing 高性能科学计算集群     
     (Beowulf 类集群....)

    分布式存储                                                                         
    其他类linux集群              
    (如Openmosix, rendering farm 等..)

    详细介绍

    1. 高可用集群(High Availability Cluster)
    常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机".
    高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。 (请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)。

    2. 负载均衡集群(Load Balance Cluster)

    负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。

    负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。

    3. 科学计算集群(High Performance Computing Cluster)

    高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。

    高性能计算分类  
     高吞吐计算(High-throughput Computing)
      有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( SETI@HOME  -- Search for Extraterrestrial Intelligence at Home )就是这一类型应用。这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上 参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的 数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。所谓的Internet计算都属于这一类。按照 Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。

     分布计算(Distributed Computing)
      另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。

    4. 分布式(集群)与集群的联系与区别 
    分布式是指将不同的业务分布在不同的地方。 
    而集群指的是将几台服务器集中在一起,实现同一业务。 
    分布式中的每一个节点,都可以做集群。 
    而集群并不一定就是分布式的。 
    举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。 
    而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。 
    分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。

    展开全文
  • 到底什么是分布式系统?

    万次阅读 多人点赞 2018-02-28 22:34:38
    分布式系统背景 说分布式系统必须要说集中式系统,集中式系统中整个项目就是一个独立的应用,整个应用也就是整个项目,所有的东西都在一个应用里面。 如下图所示 如一个网站就是一个应用,最后是多个增加多台...
  • 什么是分布式

    万次阅读 2019-08-24 18:00:22
    3、业务复杂、系统庞大、访问量巨大的场景下:分布式微服务架构。 分布式架构的特点 分布性 对等性 并发性 缺乏全局时钟 故障随时会发生 分布式架构中存在的问题 通信异常: 通讯异常其实就是网络异常,...
  • 分布式

    2020-05-13 14:36:30
    分布式 一、分布式锁 在单机场景下,可以使用语言的内置锁来实现进程同步。但是在分布式场景下,需要同步的进程可能位于不同的节点上,那么就需要使用分布式锁。 阻塞锁通常使用互斥量来实现: 互斥量为 0 表示有...
  • 分布式系统的理解

    万次阅读 多人点赞 2017-07-14 16:22:52
    1. 如何理解“分布式”?  经常听到”分布式系统“,”分布式计算“,”分布式算法“。分布式的具体含义是什么?狭义的分布是指,指多台PC在地理位置上分布在不同的地方。 2. 分布式系统  分布式系统:...
  • 分布式专题(一)什么是分布式

    万次阅读 多人点赞 2018-08-15 22:29:38
    什么是分布式? 任务分解 节点通信   分布式和集群的关系? 电商平台: 用户、 商品、订单、 交易 分布式: 一个业务拆分成多个子系统,部署在不同的服务器上 集群: 同一个业务,部署在多个服务器上   ...
  • 什么是分布式 (个人理解)

    千次阅读 2018-04-11 12:22:48
    分布式怎么理解:(个人理解) 简单的讲: 大任务划分为小任务。一个或多个人(或机器)完成同一任务中的不同部分。被分解后的小任务互相之间有独立性,节点之间只管接受和传递信息。 一、分布式开发: 多人协同...
  • 分布式系统概念

    万次阅读 多人点赞 2018-11-15 16:25:36
    分布式系统 分布式系统的由来: 国内来讲,移动互联网的爆发伴随着分布式系统的突现,移动互联网最大的特点是2(to)c的o2o产品越来越多,这跟传统2B的系统最大区别就是用户量的不同,2C系统的用户量远远要高于2b...
  • 分布式系统

    千次阅读 2016-07-10 20:56:02
    原文参考:前Google工程师谈分布式系统的特点以及设计理念 和 从0到1,中间件的研发运维之路 两篇文章分布式系统并不是什么新鲜词,在上个世纪七八十年代就已经有各种分布式系统出现。只是在互联网时代,分布式系统才...
  • 分布式系统设计.pdf

    热门讨论 2010-02-02 11:16:12
    分布式系统可以有不同的物理组成:一组通过通信网络互连的个人计算机,一系列不仅共 享文件系统和数据库系统而且共享C P U周期的工作站(而且在大部分情况下本地进程比远程进 程有更高的优先级,其中一个进程就是一...
  • 现在的架构很多,各种各样的...那什么是分布式系统分布式系统是支持分布式处理的软件系统,是由通信网络互联的多处理机体系结构上执行任务的系统。包括分布式操作系统、分布式程序设计语言及其编译系统、分布式文...
  • [分布式系统]全面介绍分布式系统

    千次阅读 2019-08-23 09:25:23
    [分布式系统]全面介绍分布式系统 [声明:本篇文章翻译转载自Stanislav Kozlovski] :A Thorough Introduction to Distributed Systems。 很感谢原作者这么通俗易懂介绍分布式系统。考虑在国内访问不到该作者的...
  • 分布式系统的经典基础理论

    万次阅读 多人点赞 2018-05-24 21:22:02
    历史优质文章: 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题...分布式系统的目标是提升系统的整体性能和吞吐量另外还要尽量保证分布式系统的容错性(假如增加10台服务器才达到单机运...
  • [分布式]:分布式系统的CAP理论

    千次阅读 多人点赞 2018-05-24 17:00:11
    2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的...一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition...
  • 分布式系统概述

    2018-06-17 19:08:00
    分布式系统概述 总结自:A Thorough Introduction to Distributed Systems 分布式系统概述 概述 什么是分布式系统 为什么需要分布式系统? 扩展数据库 继续扩展 陷阱 去中心化与分布式 分布式系统类型 分布式...
  • 的能力要求越来越高,而对应的分布区域化的性能测试手段较少,不同的行业、公司等对分布式系统的性能测试方法不同, 达到的测试效果不一,因此,对网络应用系统提供服务的质量产生严重影响。由此可见,对于 IT 网络...
  • 分布式系统设计

    千次阅读 2018-07-16 22:32:55
    高可用分布式系统应该要考虑以下几个大点和一些小点,大点与小点之间其实有包含、有交集,只是为了方便分点论述才分类。 四个大点: 容错能力(服务隔离、异步调用、请求幂等性、分布式锁) 可伸缩性(有 / 无...
  • 分布式系统简介

    2019-06-22 17:09:55
    1.分布式系统发展历史 2.为什么需要分布式 3.分布系统的优劣势
  • 分布式系统认证方案

    万次阅读 2020-05-15 08:59:37
    分布式认证系统的介绍和选型以及分布式认证流程、OAuth2的介绍
  • 分布式系统中,同时满足“一致性”、“可用性”和“分区容错性”三者是不可能的。分布式系统的事务一致性是一个技术难题,各种解决方案孰优孰劣? 在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的...
  • 分布式系统设计(经典书籍)

    热门讨论 2009-06-17 00:15:49
    本书较为全面地介绍了分布式系统领域的一些基本概念,提出了分布式系统的各种问题,如互斥问题、死锁的预防和检测、处理机间的通信机制、可靠性问题、负载分配问题、数据管理问题及其可能的解决方案,并讨论了分布式...
  • 分布式系统的十二个目标

    千次阅读 2017-11-26 12:47:48
    分布式系统的十二个目标作为分布式系统的基础,虽然这些目标并不是在所有情形下都是关联在一起的,对于我们认识和学习分布式系统有着不可或缺的作用,下面我们介绍一下分布式系统的十二个目标。  1. 本地自治  一...
  • 分布式系统常用思想和技术

    千次阅读 2017-11-16 20:05:33
    一、分布式系统的难点 分布式系统比起单机系统存在哪些难点呢? 1. 网络因素 由于服务和数据分布在不同的机器上,每次交互都需要跨机器运行,这带来如下几个问题: 1. 网络延迟:性能、超时 同机房的网络IO还是比较...
  • 分布式系统并不是什么新鲜词,在上个世纪七八十年代就已经有各种分布式系统出现。只是在互联网时代,分布式系统才大放异彩,尤其是Google更是把分布式系统运用到了极致。Google整个的软件构架都是基于各种各样的...
  • 到底什么是分布式系统?你需要了解这些

    千次阅读 多人点赞 2020-09-09 15:00:26
    摘要:什么是分布式系统?为什么要用分布式系统分布式系统如何分布?这些你知道吗? 小引 分布式系统是一个古老而宽泛的话题,而近几年因为 “大数据” 概念的兴起,又焕发出了新的青春与活力。本文将会通过对...
  • [分布式]到底啥是分布式系统开发经验

    千次阅读 多人点赞 2019-03-28 10:46:32
    目录 1、从单块系统说起 2、团队越来越大,业务越来越复杂 3、分布式出现:庞大系统分而治之 4、分布式系统所带来的技术问题 ...但是在很多职位JD上往往会有这样的一个要求:熟悉分布式系统理论、设...
  • 分布式系统架构设计

    万次阅读 2018-07-03 23:17:15
    中文意思为 面相服务的架构,他是一种设计方法,轻重包含多个服务,服务之间通过相互依赖最终提供一系列的功能, 一个服务通常以独立的形式存在与操作系统进程中,各个服务之间通过网络调用,跟SOA相提并论的还有ESB...

空空如也

1 2 3 4 5 ... 20
收藏数 1,050,087
精华内容 420,034
关键字:

分布式