凤凰架构-构建可靠的大型分布式系统
要深入理解一门技术,不仅要去看、去读、去想、去用,更要去说、去写。
将自己“认为掌握了的”知识叙述出来,尽量将知识说的条理清晰,让他人听得明白,释去心中疑惑,同时把自己的观点交予别人审视,乃至质疑,在此过程中,自己也会挖掘出很多潜藏在“已知”背后的未知。
如果你是一名驾驶初学者,最合理的学习路径应该是把汽车发动,然后慢慢行驶起来,而不是先从“引擎动力原理”“变速箱构造”入手去深刻地了解一辆汽车。计算机技术也是同理,先从运行程序开始,看看效果,搭建好开发、调试环境,对即将学习的内容现有一个整体的认知是很有好处的。
- 演进中的架构
- 架构师的视角
- 分布式的基石
- 不可变基础设施
- 技术方法论
第二部分 架构师的视角
透明多级分流系统
4.2 域名解析
世界根域名服务器的ZONE文件是有2MB大小,甚至可以打印出来物理备份。
根域名服务器(Root DNS):固定的、无须查询的顶级域名(Top-Lebel Domain)服务器,可以默认它们已内置在操作系统代码之中。全世界一共有12组根域名服务器(⚠️注意并不是13台),每一组根域名都通过任播[1]的方式建立了一大群镜像,根据维基百科的数据,迄今已经超过1000台根域名服务器的镜像了。选择13是由于DNS主要采用UDP传输协议(在需要稳定性的时候也可以采用TCP)来进行数据交换,未分片的UDP数据包在IPv4下最大有效值为512字节,最多可以存放13组地址记录。
第三部分 分布式的基石
第六章 分布式共识
可靠性与可用性的矛盾:为了保证可靠性而增加机器反而带来可用性的降低。
举例:MySQL集群的主从全同步复制,会等待所有Slave节点的Binlog都完成写入之后,才会提交Master节点的事务。
为了缓解这个矛盾,在分布式系统里主流的数据复制方法是以操作转移(Operation Transfer)为基础的。
我们想要改变改变数据的状态,除了直接将目标状态赋予它之外,还有另一种常用的方式是通过某种操作,令源状态转换为目标状态。能够使用确定的操作促使状态间产生确定的转移结果的计算模型,在计算机科学中被称为状态机(State Machine)。
将一连串的操作日志正确地广播给各个分布式节点。在广播指令与指令执行期间,允许系统内部状态存在不一致的情况,即不要求所有节点的每一条指令都是同时开始、同步完成的,只要求在此期间的内部状态不能被外部观察到,且当操作指令序列执行完毕时,所有节点的最终状态是一致的,这种模型就被称为状态机复制(State Machine Replication)。
附录
[1]任播:Anycast是一种网络寻址和路由的策略。