举个例子,妈妈吩咐小白分别做三项任务,吃饭,烧水,写作业。以前是小白一个人干啊,累的不行,后来哥哥姐姐来了,帮他分担着干。哥哥小强负责吃饭,姐姐小丽负责写作业,小白负责烧水,这样分工明确,不互相影响。
名词定义:分布式系统
我们引用权威著作Distributed Systems Concepts and Design(Third Edition)中的一句话:"A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages"。从这句话里面我们可以看到几个重点:
1、组件分布在网络计算机上
2、组件之间仅仅通过消息传递来通信并协调行动
严格讲,同一个分布式系统中的计算机在空间部署上是可以随意分布的,这些计算机可能被放在不同的机柜上,也可能在不同的机房中,甚至分布在不同的城市。
分布式系统的特点:
1. 分布性
就是分布式系统中的多台计算机都会在空间上随意分布,同时他们的分布情况也会随时变动。
接上面的例子说,这时候小强提出要求,我在家里吃饭太浪费粮食了,然后他就到奶奶家吃去了。小白烧水从厨房转到院子,小丽从书房转到客厅写作业。这时三个人干活的地方改变了,但是不影响任务,所以妈妈很满意。
2. 对等性
分布式系统中的计算机没有主/从之分,既没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有节点都是对等的。
副本(Replica)是分布式系统最常见的概念之一,指的是分布式系统对数据和服务提供的一种冗余方式。
a. 数据副本是指在不同的节点上持久化同一份数据,当某一个节点上存储的数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题最为有效的手段。比如MySQL集群中可以配置多台服务器来存储数据副本。
b. 服务副本,指多个节点提供同样的服务,每个节点都有能力接收来自外部的请求并进行相应的处理。比如Dubbo框架中用多台服务器来配置同一个服务实例。
例子:小白三兄妹在任务上处于平等的关系,不互相依赖,也不互相影响,完全可以自己干自己的活。对于每个人而言,有自己的任务必定会有自己的处理方式。如果要及时准确的完成任务,小丽(写作业)就要做以下两点准备:(1)将老师布置的作业内容清单随时写一个记事本上防止自己忘掉,(2) 当自己因生病不能完成的时候,直接让别人帮忙完成作业。
3. 并发性
在一个计算机网络中,程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储等,如何准确并高效地协调分布式并发操作也成为了分布式系统架构与设计中最大的挑战之一
例子:有一天,哥哥小强吃饭要用锅,而小白烧水也要用锅。这个时候两个人为了争抢锅子打了起来。如果是你,应该怎么处理这种突发状况呢?4. 缺乏全局时钟
一个典型的分布式系统是由一系列空间上随意分布的多个进程组成的,具有明显的分布性,这些进程之间通过交换消息来进行相互通信。因此,在分布式系统中,很难定义两个事件究竟谁先谁后,原因就是因为分布式系统缺乏一个全局的时钟控制序列。
5. 故障总是会发生点
组成分布式系统的所有计算机,都有可能发生任何形式的故障。一个被大量工程实践过的黄金定理是:任何在设计阶段考虑到的异常情况,一定会在系统实际运行中发生,并且,在系统实际运行中还会遇到很多在设计时未考虑到的异常故障。所以,除非需求指标允许,在系统设计时不能放过任何异常情况
6. 处理单点故障
在整个分布式系统中,如果某个角色或者功能只有某台单机在支撑,那么这个节点称为单点,其发生的故障称为单点故障,也就是通常说的Single Point of Failure,避免单点的关键就是把这个功能从单机实现变为集群实现,当然,这种变化一般会比较困难,否则就不会有单点问题了。如果不能把单点变为集群实现,那么一般还有两种选择:
a. 给这个单点做好备份,能够在出现问题时进行恢复,并且尽量做到自动恢复
b. 降低单点故障的影响范围
关注我们的微信公众号,更多的干货等着你哦!