简述
前期博文主要是针对一些分布式系统资料的学习笔记.
《Distributed systems theory for the distributed systems engineer》中提到的《好玩又实在的分布式系统理论》是一本精悍的书籍,主要针对分布式系统中的基本问题,如时序与复制策略等方面.
首先需要说明关于分布式中的一些认知误区:
- 网络是可靠的
- 延迟为零
- 带宽无限
- 网络非常安全
- 网络拓扑不会改变
- 只有一个管理者
- 传输开销为零
- 网络同构(使用相同的配置和协议)
以上所述均为人生错觉
这本书中,作者提出了自己对于分布式中所要解决的两个终极问题
- 信息以光速传输(时序问题)
- 错误之间相互独立(容错问题)
分布式系统主要为了完成两个任务
1. 存储
2. 计算
关于为了到达更好的计算能力,最直接的办法就是上更好的机器(纵向扩展),但是在增加到一定程度后会面临无法在单机到达可接受效率的问题.
同时,关于分布式系统中的机器选择.在假设均匀访存模型(Uniform memory architecture)(处理器访问所有内存存储器的时间是一样的),随着集群中机器数量的增加,高端机器和普通机器的性能墙逐渐接近.其原因主要在于机器间的数据复制开销和计算的协调开销.
目标
可扩展性
Everything starts with size - scalability
需要重点关注的三个方面(扩展性):
- 规模扩展性:增加更多节点使得系统线性增长(不增长延迟)
- 地理伸缩性:可以使用多个异地的数据中心以解决用户访问(不增长延迟)
- 管理的伸缩性:增加更多节点不应该增加系统的管理开销
都是需要在保证一定延迟和开销下的扩展.
性能及延迟
性能通过系统完成一定工作所使用的时间和资源来衡量.依据所需,应该达到以下的一点或多点:
- 低延迟
- 高吞吐量
- 低资源使用率
这几者之间需要进行权衡,如为了达到更高的吞吐量,可以使用批处理的手段,但是在这种情况下,延迟就会相应地延长.
另外,延迟指的是操作发生至真正产生影响的时间.这一定义,主要解决问题:如果你发起一个计算所有数据的操作,但是同时有数据新增入系统,如果计算的速度和写入速度一样的话,….,延迟就是无限大.
可用性
如果一个用户无法访问系统,则表示该系统不可用.通常分布式系统相较于单机系统有更高的可用性,因为其具有更好的容错性.
What prevents us from achieving good things
作者在这里提出了两个限制分布式系统的物理因素.
- 分布式系统节点的数量
- 节点间的距离
由此带来的:
- 降低可用性和提升了管理开销
- 随着规模增大降低了性能(通信开销)
- 异地的数据中心增加了延迟,降低性能
关于分布式系统的评价标准则是依据SLA(service level agreement)(服务的品质、水准、性能等方面所达成的双方共同认可的协议或契约),另外一个没有被经常提及的则是:理解度
Abstractions and models
抽象能够将将现实中于问题无关的因素移除,帮助理解把握整个问题,模型则是能够精确地描述分布式系统中的关键部分.例如,本书后面将会提到的一些模型的例子:
- 系统模型(异步/同步)
- 失败模型(拜占庭问题、分区问题)
- 一致性模型(强一致、最终一致)
设计技巧:分区+冗余
分区
数据分区后减少数据量能够并行处理提高性能,保证了数据片间相互独立
复制
复制得到的冗余数据能够提升系统容错性,同时降低延迟,但是也带来了数据的一致性问题.
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。