左耳听风_082_81_程序员练级攻略分布式架构入门

你好,我是陈浩网名做耳朵house,学习分布式系统啊,跟学习其他技术非常不一样,分布式系统涵盖的面非常广。

那具体来说呢涵盖这么几个方面。

第一呢是服务调度,涉及服务发现、配置管理、弹性伸缩,还有故障恢复等。

第二呢是资源调度,涉及对底层资源的调度使用,比如说计算资源、网络资源和存储资源等等。

第三呢是流量调度,涉及路由负载均衡、流控,还有熔断。

第四呢是数据调度,涉及数据副本、数据一致性、分布式事务,还有分库分表等等。

第五是容错处理,涉及隔离逆等城市业务补偿义务还有降级。

第六呢是自动化运维,涉及持续集成,持续部署全站监控,还有调用链跟踪。

。那所有这些啊形成了分布式架构的整体复杂度,也造就了分布式系统中的很多很多的论文、图书和项目。

要学好分布式系统和它的架构呢,我们需要大量的时间和实践,才能真正掌握这些技术。

那这里呢有几个点需要你注意一下。

那第一呢就是分布式系统之所以复杂啊,就是因为它太容易出错。

那这就意味着你要把处理错误的代码当成正常功能的代码来处理。

那第二呢就是要开发一个健壮的分布式系统,那它的成本是单体系统的几百倍,甚至几万倍。

那这就意味着我们如果想自己开发一个就需要能力很强的开发人员。

第三,非常健壮的开源的分布式系统其实并不多,或者说基本没有。

那这就意味着如果你要用开源的,那么你需要能hold住它的源码。

第四呢,管理或者协调多个服务或者机器是非常难的那这个就意味着我们需要去读很多很多的分布式系统的论文。

第五,在分布式环境之下,出了问题是很难抵bug的那这就意味着我们需要非常好的监控和跟踪系统,还需要经常做演练和测试。

第六,在分布式环境之下,你需要更科学的分析和统计。

那这就意味着我们需要用p九零这样的统计指标,而不是平均值,我们还需要做容量计划和评估。

第七点在分布式环境之下需要应用服务化。

那这就意味着我们需要一个服务开发框架,比如说SOA或者微服务。

第八点,在分布式环境之下,故障不可怕,可怕的是影响面过大,时间过长。

那这个呢就意味着我们需要花时间来开发我们的自动化运维平台。

总之呢在分布式环境之下,一切都会变得非常复杂。

要进入这个领域啊,你需要有足够多的耐性和足够强的心态来接受各式各样的失败。

当拥有丰富的实践和经验之后呢,你才会有所建树。

而这个呢并不是一日之功,你可能需要在这个领域花费数年甚至数十年的时间学习如何设计可扩展的架构将会有助于你成为一个更好的工程师。

那系统设计是一个很宽泛的话题,在互联网上关于架构设计原则的资源啊也是多如牛毛。

所以你需要知道一些基本概念。

对此呢,这里啊你先阅读这两篇文章,第一篇是scalleable web architecture and distribubeauty systems.那这篇文章会给你一个大概的分布式架构,是怎么解决系统扩展性问题的粗略方法。

第二篇就做scale, ability availability and stalability patterns.那这个PPT啊能在扩展性、可用性和稳定性等方面给你一个非常大的架构设计,视野和思想,可以让你感受一下大概的全景图。

然后呢,我更强烈推荐github上面的一篇文档,叫做system design primer.这个仓库。

主要组织收集分布式系统的一些与扩展性相关的资源,它可以帮助你学习如何构建可扩展的架构。

目前这个仓库啊已经收集到了好些的系统架构和设计的基本方法。

那其中呢包括CAP理论一致性、模型、可用性模式、DNSCDN、负载均衡、反向代理,还有应用层的微服务和服务,发现关系型数据库和NOSQL缓存、异步通讯还有安全。

等等我认为呢这几篇文章基本足够可以让你入门了。

因为其中基本涵盖了所有与系统架构相关的技术。

那这些技术啊足够这世上百分之九十以上的公司用了,而只有超级巨型的公司才有可能使用更高层次的技术。

那下面呢我们来学习一下分布式方面的理论知识。

首先呢,你需要看一下这篇文章叫做an introduction to distribubeauty systems.那这个呢只是某个教学课程的提纲,但是呢我觉得还是很不错的啊,几乎涵盖了分布式系统方面的所有知识点。

而且呢有简洁并切入要害的说明文字,非常适合初学者提纲窃领的了解知识的全貌。

快速与现有知识结合,形成知识体系。

那这个呢也是一个分布式系统的知识图谱,它可以让你看到分布式系统的整体全貌。

你可以根据这个知识图google下去,然后啊你就会学会所有的东西。

那接下来你需要去了解一下拜占庭将军问题。

这个问题是莱斯利兰伯特在一九八二年提出用来解释一致性问题的一个虚构模型。

拜占庭啊是古代东罗马帝国的首都,因为它的地域宽广,守卫边境的多个将军啊,需要通过信使来传递消息,达成某些一致的决定。

但是呢这些将军里面啊可能会存在叛徒,而这些叛徒呢会努力的向不同的将军发送不同的消息,试图干扰一致性的达成。

那拜占庭问题啊就是说在这种情况下,如何让忠诚的将军们达成行动的一致?对于半圆形问题来说呢,假如说节点总数为n派面的将军数量为f那么当n大于等于三f加一的时候呢,问题才有解啊,也就是拜占停容错算法。

那半扇形容错算法,它解决的是网络通信可靠,但节点可能故障的情况下,一致性应该如何达成的问题。

卡斯特罗和利斯科夫在一九九九年最早提出了实用拜占庭容错算法PBFT.那这个呢是第一个得到广泛应用的BFT算法,只要系统中有三分之二的节点是正常工作的,就可以保证一致性。

Pbft算法包括三个阶段来达成共识,分别是预准备、准备和提交。

那文中呢有三篇和这个问题相关的文章推荐阅读。

在半扇停容错系统研究中啊,有三个重要理论,分别是CAPFLP和DLS. Cap理论啊,相信你应该听说过不下n次了。

它是分布式系统设计中最基础也是最为关键的理论。

Cp定理指出啊,分布式数据存储不可能同时满足一致性、可用性和分区容忍这三个条件。

在网络发生阻断的时候呢,你只能选择数据的一致性或者可用性,无法两者兼得。

那论点呢也比较直观,就是如果网络因为阻断而分割为二,那在其中一边我送出一笔交易,将我的十元给a在另一半呢我送出另一笔交易啊,将我的十元给b那么这个时候啊系统要么是无可用性啊,也就是说这两笔交易啊至少有一笔交易不会被接受,要么呢就是无一致性啊,一半看到的是a多了十元,而另一半呢则看到b多了十元。

要注意的是,CAP理论和扩展性是无关的,在分片或者非分片的系统都适用,然后呢是FLP理论。

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

但是呢值得注意的是,纳斯bagas organthms也就是壮大运算法,在每一轮呢都有一定的几率达成共识。

那随着时间的增加呀,几率会逐渐趋近于一。

而这个呢也是许多成功的共识,算法会采用的解决问题的办法。

而对于容错的上限呢,从DRS的论文当中,我们可以得到这样几个结论。

首先呢就是在部分同步的网络环境当中,协议呢可以容忍最多三分之一的拜占停故障。

其次,在异步的网络环境当中,就确定性质的协议,无法容忍任何错误。

但是呢这篇论文啊并没有提及runnmize orgorithms在这种情况下,可以容忍最多三分之一的百掌千故障。

另外在同步网络环境当中啊,也就是网络延迟有上限,而且上限是已知的那协议呢可以容忍百分之百的待暂停故障。

但是当超过二分之一的节点没恶意节点的时候啊,会有一些限制条件。

那这里需要注意,我们考虑的是具有认证特性的拜占庭模型,而不是一般的拜占庭模型。

而所谓的具有认证特性呢,指的是将如今已经过大量研究,并且成本低廉的公司要加密机制应用在我们的算法当中。

那当然呢还有一个著名的华桥荒谬的分布式假设,第一呢网络是稳定的。

第二,网络传输的延迟是零。

第三,网络的带宽是无穷大。

第四,网络是安全的。

第五,网络的拓扑不会改变。

第六,只有一个系统管理员,第七,传输数据的成本为零。

第八,整个网络是同构的。

二、农罗特姆盖尔奥兹写了一篇长文felases of distribubeauty computing explained啊,来解释为什么这些观点是错误的。

另外,加勒斯威尔逊的文章则用日常生活中的例子对这些点做了通俗的解释。

那为什么我们要深刻认识到这八个错误呢?这是因为啊这可以让我们清楚的认识到,在分布式系统中错误是不可能避免的。

我们在分布式系统中啊能做的不是避免错误,而是要把错误的处理当做成功写在代码当中。

那接下来呢分享几篇一致性方面的论文。

那当然呢关于经典的CAP理论也存在一些误导的地方。

那这个问题在二零一二年的一篇论文中做了一些讨论。

那主要呢就是说在CAP中最大的问题就是分区,也就是p在p发生的情况下,非常难以保证c和a但是呢这是强意志性的情况。

那其实在很多时候啊,我们并不需要强意志性的系统。

所以后来人们在讨论是要数据一致性还是可用性的时候啊,主要是集中在强抑制性的ACID或者最终一致性的BASE.那当时呢BASE还不怎么为世人所接受,那主要呢是大家都觉得ACID是最完美的模型,大家很难接受不完美的BASE.在CAP理论中呢,大家总是觉得需要三选二。

也就是说,如果p是b选项的话,那三选二的选择题不就变成了数据一致性和服务可用性之间的二选一了吗?但是呢现实却是p很少遇到。

而c和a这两个事儿在工程实践中啊一致性有不同的程度。

可用性呢也有不同的等级。

在保证分区容错性的前提之下,放宽约束之后啊,是可以兼顾一致性和可用性的。

两者呢并不是非此即彼。

其实呢在一个时间可能允许的范围之内啊,是可以取舍并交替选择的那第二篇论文呢是harvest yield as scalable tolerant systems.那这篇论文呢是基于上面那篇CAP十二年后的论文写的那他呢主要是提出了harvest和右的概念,并把前面那篇论文中所讨论的东西讲的更为仔细了一些。

第三篇论文叫做base a national alternative.那这篇文章呢是易贝的架构师,在二零零八年发表给ACM的文章,是一篇解释BASE原则或者说最终一致性的经典文章。

文中呢讨论了BASE和ACID原则的基本差异,还有如何设计大型网站,以满足不断增长的可伸缩性的需求。

那其中呢有如何对业务做调整和折中,还有一些具体的折中技术的介绍。

那文中呢有一句比较经典的话,在对数据库进行分区之后,为了可用性,牺牲部分一致性,可以显著的提升系统的可伸缩性。

最后第四篇论文呢是eventually consistent.这份文章是AWS的CTO维尔纳。

沃格尔在二零零八年发布在ACMQ上的一篇数据库方面的重要文章,它阐述了no sql数据库的理论基石,也就是最终一致性对传统的关系性数据库做了较好的补充。

好了,我总结一下今天分享的内容。

这节课开头啊,我给出了学习分布式架构需要注意的几个关键点,然后呢列出了入门学习的资源,那基本涵盖了所有与系统架构相关的技术。

随后呢我又讲述了拜占庭容错系统研究中的三个重要理论,CAPFLP和DRS,还有八条荒谬的分布式假设。

从理论和认知等角度,让你更为清楚的理解。

分布式系统。

最后呢我又分享了几篇一致性相关的论文,很实用,很经典。

推荐阅读,在下节课啊,我将推荐一些分布式架构的经典图书和论文,并给出了导读文字嗯,几乎呢涵盖了分布式系统架构方面的所有关键的理论知识,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值