风险提示:理性看待区块链,提高风险意识!

分布式系统面临的挑战有哪些?

2个回答

疯狂天蝎5星评价

2020-04-30 15:09:28

分布式系统面临的挑战有哪些?

共识机制已经成为了目前区块链系统性能提升的关键瓶颈。

单一的共识算法均存在各种问题,如PoW算法存在消耗大量计算资源及性能低下的问题,PoS或DPoS存在富豪统治”问题,融合多种共识算法优势的想法正受到越来越广泛的关注。

在本期推送中,我们会先了解分布式系统面临的挑战,以及共识算法的理论基础;在接下来的几期推送中,我们将基于理论来分析几个区块链项目广泛采用的共识算法,最后详细解释迅雷链是如何优化提升共识效率和可用性的。

分布式系统面临的挑战

区块链是一个分布式系统,分布式系统碰到的第一个问题就是一致性问题。

在分布式系统中,一致性是指:对于系统中的多个服务节点,给定一系列操作,在协议(往往通过某种共识算法)保障下,试图使得他们对处理结果达成某种程度的一致。

如果一个分布式系统无法保证处理结果一致的话,那任何建立于其上的业务系统都无法正常工作。

分布式系统面临的主要挑战包括:

1)资源受限:节点间的通信需要通过网络,而网络存在带宽限制和时延,节点也无法做到瞬间响应和高吞吐。

2)故障的独立性:系统的任何一个模块都可能发生故障,如节点之间的网络通讯是不可靠的,随时可能发生网络故障或任意延迟;节点的处理可能是错误的,甚至节点自身随时可能宕机。

3)不透明性:分布式系统中任何组件所在的位置、性能、状态、是否故障等情况对于其它组件来说都是不可见的、也无法预知的。

4)并发:分布式系统的目的,是为了更好的共享资源。同步调用会让系统阻塞,因此节点间通信通常设计成异步的。

5)缺乏全局时钟:在程序需要协作时,它们通过交换消息来协调它们的动作。紧密的协调经常依赖于对程序动作发生时间的共识,但是,实际上网络上计算机同步时钟的准确性受到极大的限制,即没有一个一致的全局时间的概念。这是通过网络发送消息作为唯一的通信方式这一事实带来的直接结果。

由于上述挑战的存在,分布式系统中的一致性保证机制是分布式系统设计中最关键也是最有难度的领域,分布式系统中关于一致性的理论基础已经比较完善,在理论指导下,学术界和业界都提出了很多的共识算法试图解决分布式系统中的一致性问题。


假以时日8星评价

2020-04-30 15:10:36

布式的处理方式越来越受到业界的青睐——计算机系统正在经历一场前所未有的从集中式向分布式架构的变革。今天,我们就来看看关于分布式的精华问答吧!

1

Q:什么是分布式缓存?

A:为了提高性能和响应时间,在应用程序(通常是Web应用程序)中“部署”并确保数据从内存加载而不是从磁盘加载(速度更慢)的解决方案。

如果要在单台机器上使用高速缓存,那么看起来很简单 - 只需从内存中的数据库中加载最活跃的数据(例如Guava Cache实例),然后从中提供。当必须在集群中工作时,它变得有点复杂 - 例如5个应用节点以循环方式向用户提供请求。

2

Q:如何实现分布式系统的高可用性?

A:高可用性的前提是:保证服务系统能够持续工作,实现高可用性一般有两种手段: 一种是通过第三方软件/组件保证系统的可用性;另一种是软件/组件自身己具备高可用的技术实现。

3

Q:分布式系统的优势

A:分布式可繁也可以简,最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实很多号称分布式专家的人也就停留于此,大致结构如下图所示:

4

Q:分布式与集群的区别是什么?

A:分布式:一个任务分给多台机器去做,减少单个任务的执行时间。

集群:提高单位时间内执行任务数。

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

分布式方案:提供10台服务器,每台服务器只处理一个子任务,不考虑任务间的依赖关系,执行完这个任务只需要一个小时。

集群方案:同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,10小时后,10个任务同时完成,同样是一个小时完成一个任务。

5

Q:分布式系统面临的挑战

A:分布式系统需要大量机器协作,面临诸多的挑战:

第一,异构的机器与网络:

分布式系统中的机器,配置不一样,其上运行的服务也可能由不同的语言、架构实现,因此处理能力也不一样;节点间通过网络连接,而不同网络运营商提供的网络的带宽、延时、丢包率又不一样。怎么保证大家齐头并进,共同完成目标,这四个不小的挑战。

第二,普遍的节点故障:

虽然单个节点的故障概率较低,但节点数目达到一定规模,出故障的概率就变高了。分布式系统需要保证故障发生的时候,系统仍然是可用的,这就需要监控节点的状态,在节点故障的情况下将该节点负责的计算、存储任务转移到其他节点

第三,不可靠的网络:

节点间通过网络通信,而网络是不可靠的。可能的网络问题包括:网络分割、延时、丢包、乱序。相比单机过程调用,网络通信最让人头疼的是超时:节点A向节点B发出请求,在约定的时间内没有收到节点B的响应,那么B是否处理了请求,这个是不确定的,这个不确定会带来诸多问题,最简单的,是否要重试请求,节点B会不会多次处理同一个请求。

总而言之,分布式的挑战来自不确定性,不确定计算机什么时候crash、断电,不确定磁盘什么时候损坏,不确定每次网络通信要延迟多久,也不确定通信对端是否处理了发送的消息。而分布式的规模放大了这个不确定性,不确定性是令人讨厌的,所以有诸多的分布式理论、协议来保证在这种不确定性的情况下,系统还能继续正常工作。