本文主要是记录最近看的书里涉及到的概念。梳理自己对分布式里的概念理解,构建自己对分布式系统的初步理解。
定义
组件分布在网络计算机上,组件之间仅仅通过消息传递来通信并协调行动。
从用户角度,面对就是一个服务器,提供需求的服务。
分布式系统看起来就像一个超级计算机。
计算机五大部件
- 控制器
- 运算器
- 存储器
- 输入设备
- 输出设备
对于单机来说,都是在一台机器上。对于分布式系统,是由一系列网络节点组成。所以下面也按这个结构来学习。
演进过程
从小到大,都是遇到了真实问题,才形式的。所以好的分布式从来不是设计出来的。一般是数据量、并发,即存储和计算的问题。
解决办法:根据职责拆分、根据要解决的真实问题去拆分。主要运用的思想是:分而治之。
手段 : 1. 垂直拆分 2. 水平拆分
控制器
通过配置中心来控制运算器的节点。
配置管理中心
主要职责:
- 聚合服务器的地址信息。
- 服务器的生命周期感知。对服务器的上下线自动感知,并且根据这个变化去更新服务器地址信息。
结构可以划分为:客户端,服务端。
涉及到的知识:
- 网络基础知识(路由)
- pasoix算法(自动推荐主干节点)
- 负载均衡(自动负载均衡)
运算器
通过应用和服务在控制器下对外提供运算能力(服务)。
服务化
- 通过服务化框架中间件来调用
- 通过消息中间件来解耦
怎么划分应用和服务,需要根据实际情况来说,不可一概而论。一般说来:根据职责、根据业务情况来划分。
存储器
是分布式系统的最底层支持。
数据类型
- 结构化。数据结构定义和内部分开。比如说数据库。对应的是分布式关系型数据库系统。
- 非结构化。比如blob类型,文件、图像、视频等。对应的是分布式文件系统。
- 半结构化。数据结构定义和内部耦合在一起。比如说html。对应的是分布式表格系统和分布式键值系统(是分布式表格的特例)。
文件系统
主要就是针对于非结构化的数据类型存储系统。一般用于存储blob类型数据。
POSIX
定义了应用程序访问文件系统的API标准。适应用于单机。
要求读写并发时能够保证操作的原子性,即读操作要么读到所有结果,要么什么也读不到
分布式文件系统,出于性能考虑,一般不会完全遵守这个标准。根据实际情况,分布式文件系统有的有树状目录,有的没有树状目录。
键值系统
每行记录由主键和值两部分组成,支持基于主键的crud。和传统的哈希算法很像。可以简单理解为大map.
应用场景
- 缓存半结构化的数据。比如html
- 缓存热点数据。
关系型数据库
比较符合人的思维习惯。
分布式事务
CAP原则。一般是通过两阶段提交来实现分布式事务。
其他问题
- 一致性。
- 查询(跨库)
- 复制
- 备份
表格系统
这个除了对单行的curd,还支持列,排序等一些复杂的操作。
输入设备和输出设备
除了普通的输入输出设备。网络节点的传输也是输入和输出
其他支持
自动化(容错、运维、发布、负载、测试)
参考书单
- 《淘宝技术这十年》。里面讲的架构演化很有意思。也基本了分布式存储的概念。没有过多的实践细则,适合普及概念。最后的牛P系列根据个人喜爱查看
- 《大型网站系统与Java中间件实践》。对单机和分布式的讲述很喜欢。对中间件讲解也比较到位。涉及到一些中间件细则,根据情况自行选择。
- 《大型分布式网站架构设计与实践》。对部分原理讲解的还不错,比较细则。里面推荐了一些工具、算法可以做了解用。
- 《大型网站技术架构核心原理与案例分析》。涉及到比较多的思维方面及知识。适合在脑子里构架大的轮廓。
- 《大规模分布式存储系统原理解析与架构实践》。对存储系统讲的比较透。特别是原则和规范比较喜欢。也涉及一些常用的技术原则讲解。