分布式系统
一 、什么是分布式系统
最简单定义的分布式系统是一组计算机一起工作,以最终用户身份显示为一台计算机。
这些机器具有共享状态,并发操作并可独立故障,而不会影响整个系统的正常运行时间。
二、分布式系统类别
1、 分布式数据存储
分布式数据存储被广泛使用并被公认为分布式数据库。大多数分布式数据库都是NoSQL非关系数据库,仅限于键值语义。它们以一致性或可用性为代价提供令人难以置信的性能和可扩展性。
为了讨论分布式数据存储,我们首先引入CAP定理。
CAP定理
CAP定理证明,分布式数据存储不能同时具有一致性,可用性和分区容错性。
Cassandra
Cassandra是一个分布式的No-SQL数据库,它偏好CAP的属性,并最终保持一致性。Cassandra具有高度可配置性 - 您可以通过牺牲可用性来提供强大的一致性,但这不是它的常见用例。
Cassandra使用一致的哈希来确定哪个节点脱离了您的集群必须管理您传递的数据。您设置了一个复制因子,它基本上指出要复制数据的节点数。
共识
数据库事务在分布式系统中实现起来很棘手,因为它们要求每个节点都要采取正确的操作(中止或提交)。这被称为共识,这是分布式系统中的一个基本问题。
如果参与过程和网络完全可靠,那么达成“交易提交”问题所需的协议类型就很简单。但是,真正的系统会受到一些可能的故障的影响,如进程崩溃,网络分区以及丢失,失真或重复的消息。
这提出了一个问题 - 已证明不可能保证在不可靠网络上的有限时间框架内达成正确的共识。
但实际上,有些算法很快就会在不可靠的网络上达成共识。Cassandra实际上通过使用用于分布式共识的Paxos算法来提供轻量级事务。
2、分布式计算
分布式计算是近年来我们见到的大数据处理流入的关键。它是将一项庞大的任务(例如总计1000亿条记录)分割成许多较小的任务的技术,其中任何一台计算机都不能单独执行,而每个任务都可以装入一台商品机器中。您将您的庞大任务分解为许多较小的任务,让它们在多台机器上并行执行,合适地汇总数据,并解决了最初的问题。这种方法再次使您能够水平扩展 - 当您有更大的任务时,只需在计算中包含更多节点。
3、分布式文件系统
分布式文件系统可以被认为是分布式数据存储。它们与概念一样 - 在一组机器中存储和访问大量数据,所有这些数据都显示为一个整体。他们通常与分布式计算并驾齐驱。
HDFS
Hadoop分布式文件系统(HDFS)是通过Hadoop框架用于分布式计算的分布式文件系统。它被广泛采用,用于存储和复制大型文件(大小为GB或TB)跨多台机器。
其架构主要由NameNode和DataNode组成。NameNode负责保存关于集群的元数据,比如哪个节点包含哪些文件块。他们通过找出最佳存储和复制文件的位置,跟踪系统的健康状况,充当网络的协调员。DataNodes只是简单地存储文件并执行命令,如复制文件,写入新文件等等。
IPFS
星际文件系统(IPFS)是一个令人兴奋的新型分布式文件系统对等协议/网络。利用区块链技术,它拥有完全分散的架构,没有单一所有者或故障点。
IPFS提供了一个名为IPNS的命名系统(类似于DNS),可让用户轻松访问信息。它通过历史版本存储文件,类似于Git的做法。这允许访问文件的所有以前的状态。
4、分布式消息
消息传递系统为整个系统内的消息/事件的存储和传播提供了一个中心位置。它们允许您将应用程序逻辑从直接与其他系统交谈中分离出来。
消息传递平台的工作原理如下:
消息从应用程序广播,可能创建它(称为生产者),进入平台并被潜在的多个对其感兴趣的应用程序(称为消费者)读取。
如果您需要将某个事件保存到几个地方(例如创建用户到数据库,仓库,电子邮件发送服务以及您可以提供的任何其他服务),则消息传递平台是传播该消息的最简单方法。
消费者可以将信息从经纪人(拉模型)中提取出来,或让经纪人直接将信息推送给消费者(推送模式)。
有几个流行的顶级消息平台:
RabbitMQ - 消息代理,允许您通过路由规则和其他易于配置的设置对消息轨迹进行更细粒度的控制。可以称为智能代理,因为它有很多逻辑,并且密切关注通过它的消息。从CAP提供AP和CP的设置。使用推送模式通知消费者。
Kafka - 消息代理(以及所有平台),它有点低级,因为它不能跟踪哪些消息已被读取,并且不允许复杂的路由逻辑。这有助于它实现惊人的性能。这是开源社区积极开发和Confluent团队支持的最大前景。卡夫卡可以说是顶尖科技公司使用最广泛的卡夫卡。
5、分布式应用
如果您在连接到一个数据库的单个负载均衡器后面集合了5个Rails服务器,您能否称为分布式应用程序?
如果您将数据库视为共享状态,那么您可以争辩说这可以归类为分布式系统 - 但是您错了,因为您错过了定义的“ 一起工作 ”部分。只有节点彼此通信以协调其行为时才分配系统。因此,类似于在对等网络上运行其后端代码的应用程序可以更好地分类为分布式应用程序。
Erlang虚拟机
Erlang是一种功能强大的语言,对于并发性,分发和容错有很好的语义。Erlang虚拟机本身处理Erlang应用程序的分发。
BitTorrent
BitTorrent是通过种子在网络上传输大文件的使用最广泛的协议之一。主要想法是促进网络中不同对端之间的文件传输,而不必通过主服务器。
6、分布式分类帐
分布式账本可以被认为是一个不可变的,仅追加数据库,它在分布式网络中的所有节点上进行复制,同步和共享。他们利用事件采购模式,允许您在历史的任何时间重建账目状态。
Blockchain
区块链是目前用于分布式分类账的基础技术,实际上标志着它们的开始。分布式空间的这一最新和最伟大的创新使得创建了第一个真正的分布式支付协议 - 比特币。
区块链是一个分布式分类帐,它载有网络中发生的所有交易的有序列表。事务分组并存储在块中。整个区块链本质上是一个块链接列表。所述块在创建时在计算上是昂贵的,并且通过密码学彼此紧密相关。