找回密码
 立即注册
搜索

架构解密从分布式到微服务:分布式系统的设计理念

分布式系统的经典实际

分布式系统从诞生到如今曾经有几十个年头了,其中伴随着一些很重要的基础实际,正是这些影响深远的基础实际,奠定了分布式系统的坚实基础,培育了分布式范畴的一座座宏伟大厦。为了练就一身武功,让我们从这些经典的分布式实际末尾学起吧。



从分布式系统的设计理念说起

分布式系统的首要目的是提升系统的全体功能和吞吐量。假如最终设计出来的分布式系统占用了10台机器才勉强达到单机系统的两倍功能,那么这个分布式系统还有存在的价值吗?另外,即便采用了分布式架构,也照旧需求尽力提升单机上的程序功能,使得全体功能达到最高。所以,我们照旧需求掌握高功能单机程序的设计和编程技巧,例如多线程并发编程、多进程高功能IPC通讯、高功能的网络框架等。

另外,任何分布式系统都存在让人无法回避的风险和严重成绩,即系统发生缺点的概率大大添加:小到一台服务器的硬盘发生缺点或宕机、一根网线坏掉,大到一台交换机甚至几十台服务器一同停机。分布式系统下缺点概率的添加,除了遭到网络通讯天生的不牢靠性及物理上分布部署的影响,还遭到X86服务器质量等的影响。

所以,分布式系统设计的两大关键目的是功能与容错性,而这两个目的的完成恰恰是很棘手的,而且互相羁绊!举个例子,我们要设计一个分布式存储系统,出于对功能的思索,在写文件时要先写一个副本到某台机器上并立刻前往,然后异步发起多副本的复制过程,这种设计的功能最好,但存在“容错性”的风险,即在文件写完后,目的机器立刻发生缺点,导致文件丢失!假如同时写多个副本,在每个副本都成功当前再前往,则又导致“功能”下降,由于该过程取决于最慢的那台机器的功能。




由于功能目的是相对的,而容错性目的是相对的,而且实践上对于不同的数据与业务,我们要求的容错性可以存在很大的差异,比如允许不测丢失一些日志类的数据;允许一些信息类的数据暂时不分歧但最终达到分歧;对买卖类的数据要求有很高的牢靠性。所以我们会发现,很多分布式系统的设计都提供了多种容错性策略,以顺应不同的业务场景,我们在学习和设计分布式系统的过程中也需求留意这一特性。

下面继续谈谈分布式系统设计中的两大思绪:中心化和去中心化。

在分布式架构设计里,中心化一直是一个主流设计。中心化的设计思想很简单,分布式集群中的节点器按照角色分工,大体上分为两种角色:Leader和 Worker。Leader通常担任分发义务并监督Worker,让 Worker不断在执行义务;假如Leader "发现某个Worker 因不测状况不能正常执行义务,则将该Worker 从 Worker队列去除,并将其义务分给其他Worker。基于容器技术的微服务架构Kubernetes就恰恰采用了这一设计思绪。

在分布式中心化的设计思绪中,还有一种设计思绪与编程中矫捷开发的思绪相似,即充分置信每个 Worker,Leader只担任义务的生成而不再指派义务,由每个 Worker自发领义务,从而避免让个别Worker执行的义务过多,并鼓励能者多劳。

中心化设计存在的最大成绩是Leader的安全成绩,假如Leader出了成绩,则整个集群崩溃。但我们难以同时安排两个Leader 以避免单点成绩。为了处理这个成绩,大多数中心化系统都采用了主备两个Leader 的设计方案,可以是热备或者冷备,也可以是自动切换或者手动切换,而且越来越多的新系统都具有了自动选举切换Leader 的才能,以提升系统的可用性。中心化设计还存在另外一个潜在的成绩,即Leader的才能成绩,假如系统设计和完成得不好,成绩就会卡在 Leader身上。

下面一同讨论去中心化设计。

在去中心化设计里通常不区分Leader 和 Worker这两种角色。全球互联网就是一个典型的去中心化的分布式系统,联网的恣意节点设备宕机,都只会影响很小范围的功能。去中心化设计的核心是在整个分布式系统中不存在一个区别于其他节点的Leader,因此不存在单点缺点成绩,但由于不存在 Leader,所以每个节点都需求与其他(一切)节点对话才能获取必要的集群信息,而分布式系统通讯的不牢靠性大大添加了上述功能的完成难度。

去中心化设计中最难处理的一个成绩是“脑裂”成绩,这种状况的发生概率很低,但影响很大。脑裂指一个集群由于网络的缺点,被分为至少两个彼此无法通讯的单独集群,此时假如两个集群各自工作,则能够会产生严重的数据冲突和错误。普通的设计思绪是,当集群判别发生了脑裂成绩时,规模较小的集群就“自杀”或者回绝服务。

实践上,完全意义的真正去中心化的分布式系统并不多见。相反,在外部看来去中心化但工作机制采用了中心化设计思想的分布式系统不断出现。在这种架构下,集群中的Leader是被动态选择出来的,而不是人为预先指定的,而且在集群发生缺点的状况下,集群的成员会自发地举行“会议”选举新的Leader 掌管工作。最典型的案例就是ZooKeeper 及用Go完成的Etcd。



本文给大家讲解的内容是架构解密从分布式到微服务:分布式系统的设计理念

    下篇文章给大家讲解的是架构解密从分布式到微服务:分布式系统的分歧性原理觉得文章不错的冤家可以分享此文关注小编;感激大家的支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评14

vccw 2021-1-25 22:16:06 显示全部楼层
分享了
回复

使用道具 举报

小辉会回家 2021-1-25 22:24:05 显示全部楼层
分享了
回复

使用道具 举报

战神冯子云 2021-1-25 22:31:09 显示全部楼层
分享了
回复

使用道具 举报

分享了
回复

使用道具 举报

公平的天使 2021-1-25 22:45:53 显示全部楼层
分享了
回复

使用道具 举报

枫林天涯 2021-1-25 22:52:40 显示全部楼层
分享了
回复

使用道具 举报

张文通 2021-1-25 22:56:01 显示全部楼层
分享了
回复

使用道具 举报

Wallpaper友達 2021-1-25 23:00:31 显示全部楼层
分享了
回复

使用道具 举报

越塔强杀 2021-1-25 23:07:52 显示全部楼层
分享了
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies