一、概述
1.1集中式系统vs分布式系统

集中式系统
集中式系统完全依赖于一台大型的中心计算机的处理能力,这台中心计算机称为主机(Host 或 mainframe ),与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终端完全不具有处理能力仅作为输入输出设备使用
伴随着大型主机时代的到来,大型主机卓越的性能和良好的稳定性,其 在单机处理能力方面的优势非常明显,使得IT 系统快速进入了集中式处理阶段
集中式系统最大的 特点 就是 部署结构简单 。
由于集中式系统往往基于底层性能卓越的大型主机,因此 无须考虑如何 对服务进行多个节点的部署,也就不用考虑多个节点之间的分布式协作 问题 。
从 20 世纪 80 年代以来,计算机系统向网络化和微型化的发展日趋明显, 传统的集中式处理模式越来越不能适应人们的需求。主要缺点:
• 学习成本高
• 价格高
• 单点故障
• 扩展困难
分布式系统
分布式系统的理论出现于 20 世纪 70 年代,而随着社交网络、移动互联网、 电子商务等技术的不断发展,互联网的使用者贡献了越来越多的数据。为了处理这些数据,每个互联网公司在后端都有一套成熟的分布式系统 用于数据的存储、计算以及价值提取。
与集中式系统相反,分布式系统中,多个通过网络互联的计算机都具 有一定的计算能力,他们之间通过网络互相传递数据,实现信息共享, 协作共同完成一个处理任务。
分布式系统的特性或是 优势包括容错性、高可扩展性、开放性、并发处理能力和透明性
分布式系统的关键问题
分布式系统虽然相较于集中式系统而言具备优势,但同时也存在一些不 得不考虑的问题:
( 1 )网络传输的三态 : 如何使通信的代价降到用户可以忍耐的层次是分 布式系统设计的重要目标。
( 2 )异构性:分布式系统由于基于不同的网络、操作系统、软件实现技术体系,必须要考虑一种通用的服务集成和交互方式来屏蔽异构系统之 间的差异
( 3 )负载均衡:提高系统的整体效率和吞吐量,必须考虑最大程度发挥 每个节点的作用
( 4 )数据一致性:数据被分散或者复制到不同的机器上,如何保证各台 主机之间的数据一致性将成为一个难点
( 5 )服务可用性:分布式系统要设计成允许出现部分故障而不影响整个系统的正常可用
1.2计算模式
并行计算
并行计算的基本思想是被求解问题分解成若干个部分,用多个处理器来 并行的求解每部分,并协同得到问题的最终解。并行计算最初强调多处理器间的并行,所有处理器或是紧耦合于中心共享内存或是松耦合于分布式内存。并行计算的实现多是在集中式的大型计算机内部基于多核 CPU、众核 GPU 等处理部件的指令级、线程级并行。 而随着网络的发展,并行计算设计也已经延伸到基于网络互连的若干独立计算机构成的集群之间的任务级并行。
技术: 时间并行(流水线)、空间并行(指令并行、线程并行 )
编程: MPI 、 OpenMP 、 CUDA
分布式计算
分布式计算的基本思想是将一个程序被分成多个部分,分布在通过 网络连接起来的多台计算机上运行。分布式系统强调的是由众多自治的计算机组成,各自拥有其私有内存,通过计算机网络通信,以消息传递 的方式完成信息交换。分布式计算的实现可以基于大型数据中心的成百 上千台服务器,甚至也可以基于分布在世界各地的服务器。分布式计算 在广义的定义上范围很广,包括网格计算、P2P 计算等。
并行计算常被拿来与分布式计算想比较。它们在设计目标、计算粒度、 关键技术、任务耦合度等方面有所不同。但随着网络的发展,二者之间 的界限已经越来越模糊,分布在多台计算机的任务实质上也是在并行执行
并行计算、分布式计算的困境
并行计算机:价格高,个人中小企业难以承担
分布式集群:要求计算机数量大,个人中小企业同样不具备
云计算
美国国家标准技术学院(NIST ):云计算是一种模型,这个 模型可以方便地通过网络访问一个可配置的计算资源(例如 网络、服务器、存储设备、应用程序以及服务等)的公共集。 这些 资源可以被快速提供 并发布,同时 最小化管理成本 以及 服务供应商的干预
提供哪些服务?
• 基础设施( IaaS )
• 平台( PaaS )
• 软件( SaaS )
1.3计算模式与大数据的关系
结论:
• 处理能力是大数据发展的基石,没有足够强大的处理能力, 大数据将毫无价值。
• 而大数据又反过来推动着计算技术的发展。 促进计算模式 的变革
1.4历史发展
平台变革



基于网络的系统技术
- 多核CPU和多线程技术(单节点计算能力提升技术)
- 先进的 CPU 处理器
- 多核 CPU 和众核 GPU 体系结构
- 多线程技术
- 大规模和超大规模 GPU 计算
- 内存、外部存储和广域网
- . 内存和磁盘
- 系统区域互联
![]()
- 广域网
- 虚拟机和虚拟化中间件
- 虚拟机
1.5分布式和云计算系统模型
大系统被划分为4组:集群、P2P、计算网格、大数据中心之上的互联网云

协同计算集群
计算集群由互连的协同工作的独立计算机组成,这些独立计算机作为单一集 成的计算资源协同工作。集群式的计算机系统在处理重负载大数据集任务方面已经发挥了重要作用。Top500 超级计算机中,多数采用集群体系结构构建。
主要的集群设计问题
没有一个适合集群的完全资源共享的操作系统。软件环境和应用依靠 中间件来达到高性能

网格计算基础设施
网格计算 被 预想用于同时在多台远距离计算机上运行的应用间进行近距离交互 。
对等网络
客户端服务器体系结构。客户机( PC 和工作站)被连接到一个中央服务器, 用来进行计算、电子邮件、文件访问和数据库应用。P2P 体系结构提供了一 个分布式的网络化系统模型

P2P系统
• 在一个 P2P 系统中,每个节点既是客户端又是服务器,提供部分系统资源。
• 节点机器都是简单的接入互联网的客户机。所有客户机自治、自由地加 入和退出系统。不存在主从关系。
• 无需中心协作或中心数据库。系统是分布式控制下自组织的。

P2P 挑战
• 硬件、软件、网络异构性
• 容错、失效管理和负载均衡
• 安全、隐私和版权(商业应用的主要问题)
• 无中心,管理困难
互联网上的云计算

1.6计算模式的区别
并行计算

目前流行的高性能并行计算机系统结构通常可以分成以下 5 类:
• 并行向量处理机( PVP )
• 对称式共享存储器多处理机( SMP )
• 分布式共享存储器多处理机( DSM )
• 大规模并行处理机( MPP )
• 机群计算机( Cluster )( COW )
分布式计算


网格计算

云计算
边缘计算
算力网络

二、并行编程基础(了解)
2.1并行计算机体系结构
Flynn分类法

.并行计算机系统


2.2OpenMP
什么是 OpenMP
OpenMP 是一种用于 共享内存 并行系统的多线程程序设计方案,支持的编 程语言包括C 、 C++ 和 Fortran 。
OpenMP 提供了对并行算法的高层抽象描述,特别适合在多核 CPU 机器上 的并行程序设计。编译器根据程序中添加的pragma 指令,自动将程序并 行处理,并在必要之处加入同步互斥以及通信,使用OpenMP 降低了并行 编程的难度和复杂度。当编译器不支持OpenMP 时,程序会退化成普通 (串行)程序。程序中已有的OpenMP 指令不会影响程序的正常编译运行。


OpenMP指令

OpenMP指导指令

OpenMP子句
规则:
- 区分大小写;
- 指令遵循 C/C++ 编译器指令标准的约定;
- 每个指令只能指定一个指令名;
- 每个指令最多应用于一个后续语句,该语句必须是一个结构化块;
- 长指令行可以通过在指令行的末尾使用反斜杠 ("\") 来转义换行符,
从而在后续的行中"继续
2.3MPI编程
消息传递式并行程序设计
指用户必须通过显式地发送和接收消息来实现处理机间的数据交换。在 这种并行编程中,每个并行进程均有自己独立的地址空间,相互之间访 问不能直接进行,必须通过显式的消息传递来实现。这种编程方式是 大 规模并行处理机(MPP )和机群( Cluster )采用的主要编程方式 。
并行计算粒度大,特别适合于大规模可扩展并行算法用户决定问题分解
策略、进程间的数据交换策略,在挖掘潜在并行性方面更主动 , 并行计算
粒度大 , 特别适合于大规模可扩展并行算法



2.4CUDA编程


Numba库
Numba 库了 Python 版 CPU 和 GPU 编程工具,速度比原生 Python 快数十倍甚 至更多。Numba 还提供了一个 GPU 模拟器,即使暂时没有 GPU 机器,也可以先使用这个模拟器来学习GPU 编程。


三、分布式通信
3.1通信节点
分布式系统的本质是利用多台计算机构成计算集群,每个节点的运 算结果最终需要汇集在一起才能支撑起分布式系统庞大的运算量。因此, 进程间的通信是一切分布式系统的核心。没有通信机制,分布式系统的 各个子系统将是"一盘散沙",毫无作用
在分布式系统中, 节点是指一个可以独立按照分布式协议完成一组逻辑 的程序个体,是一个完整的、不可分的整体,是执行分布式任务的最小单元
程序往往会部署到不同的节点中,不同节点之间需要通过网络进行通信。 在具体的工程项目中,一个节点往往是操作系统上的一个进程,甚至线 程。
在分布式系统中,两个或多个进程按约定的某种协议进行 IPC ,此处协议 是指数据通信各参与进程必须遵守的一组规则。在协议中,一个进程有些时候可能是发送者,在其他时候则可能是接收者。


IPC 的四种基本操作
• 发送( Send ):该操作由发送进程发起,旨在向接收进程传输数据。
操作必须允许发送进程识别接收进程和定义待传数据。
• 接收( Receive ):该操作由接收进程发起,旨在接收发送进程发来的
数据操作必须允许接收进程识别发送进程和定义保存数据的内存空间,
该内存随后被接收者访问。
• 连接( Connect ):对面向连接的 IPC ,必须有允许在发起进程和指定
进程间建立逻辑连击的操作:其中以进程发出请求连接操作而另一进
程发出接受连接操作。
• 断开连接( Disconnect ):对面向连接的 IPC ,该操作允许通信的双方
关闭先前建立起来的某一逻辑连接

3.2网络基础
分布式系统可以总结为是处于不同物理位置的多个进程组成的整体,为了确保这个整体有效并且高效的对外提供服务,每个节点之间都有可能 需要进行通信来交换信息。
而交换信息需要解决两个问题,
• 如何定位网络上的一台或多台主机
• 定位后如何进行数据的传输
(1)如何定位网络上的一台或多台主机
IP 地址是唯一标识网络上的一台计算机(通信实体),网络中的域名都 对应着某一个IP 地址。
端口号是标识正在计算机上运行的进程(程序)不同的进程有不同 的端口号,用16 位的二进制表示,即 0-65535 之间。常见的有 tomcat 的 8080端口, mysql 的 3306 端口。
IP 地址和端口号的组合,叫做网络套接字( Socket )。进程之间的通信需 要借助IP 地址和端口号,即网络套接字( Socket )来实现通信节点的定位。
(2)找到主机后如何可靠高效地进行数据传输
需要通过 TCP/UDP 等协议进行数据传输。
网络协议就是一种通信双方共同遵循的约定。网络数据传输中,在网络 上经过的的网络节点都要遵循约定和规则,比如传输数据的格式。

TCP与UDP协议


端口(重要)
进程的创建和撤销都是动态的,因此发送方几乎无法识别其他机器上的 进程。
我们往往需要利用目的主机提供的功能来识别终点,而不需要知道具体 实现这个功能的进程是哪一个。
有时我们会改换接收报文的进程,但并不需要通知所有的发送方。


Socket
Socket 是对网络中不同主机上的应用进程之间进行双向通信的 端点的抽象 。
一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协 议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网 络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网 络协议进行交互的接口。
Socket 的表示包括:连接协议,本地主机的 IP 地址,本地进程的协议端口, 远地主机的IP 地址,远地进程的协议端口




代码举例


相关概念
I/O 模型
Socket 封装了底层的 TCP 、 UDP 等传输协议,建立了节点间通信的通道。 I/O模型决定了 用什么样的通道 进行输出的发送和输入的接收,很大程度 上决定了通信的性能。
阻塞与非阻塞通信

同步与异步通信

BIO


NIO

Buffer

Channel

Selector

AIO

3.3RPC概述
RPC ( Remote Procedure Call )是指计算机 A 上的进程,调用另外一台计 算机 B 上的进程,其中 A 上的调用进程被挂起,而 B 上的被调用进程开 始执行,当值返回给 A 时, A 进程继续执行。 调用方可以通过使用参数 将信息传送给被调用方,而后可以通过传回的结果得到信息。 而这一过
程,对于开发人员来说是透明的。
RPC 调用采用客户机 / 服务器 (C/S) 模式。请求程序就是一个客户机,而服 务提供程序就是一台服务器。和常规或本地过程调用一样,远程过程调 用是同步操作,在远程过程结果返回之前,需要暂时中止请求程序。


( 1 )序列化
序列化是将数据结构或对象转换成二进制串的过程。序列化后的二进制 数据才能通过底层网络进行传输。不同的序列化协议在性能和空间开销 上都有所不同。序列化后的字节数据体积越小,网络传输的数据量就越 小,速度也更快。在接到字节序列后,还要进行反序列化操作,将二进 制字节流转换成对象。
常用的序列化方案包括: JDK 原生的序列化方案、 Protobuf 、 JSON 、 Hessian、 XML 等。
(2)其它模块:服务发现
除了序列化与网络传输两个核心模块外,服务发现通常是必备模块。 客户端在做远程过程调用时,首先需要发现远程主机上可调用的服务。 实现方式是创建服务注册中心。服务端所有可调用的函数、对象都需要 在服务注册中心注册,客户端需要从注册中心处获得可调用的服务对象。 为了提升注册中心的可用性,避免单点故障,有些RPC 方案中还采用 Zookeeper集群作为注册中心
3.4RMI概述
RMI 是 Remote Method Invocation 的缩写,即远程方法调用。 RMI 是 RPC 模 型的面向对象实现,是 一种用于实现远程过程调用的应用程序编程接口 , 它使客户机上运行的程序可以调用远程服务器上的对象。

RMI和Socket的比较
远程方法调用 API 作为分布式对象计算范型的代表,是构建网络应用的有 效工具。它可用来取代socket API 快速构建网络应用。在 RMI API 和 socket API之间权衡时,需要考虑以下因素:
1 ) socket API 的执行与操作系统密切相关,因此执行开销更小, RMI 需要额外的中间件支持,包括代理和目录服务,这些不可避免地带来运行时 开销。对有高性能要求的应用来说,socket API 仍将是惟一可行途径。
2 ) RMI API 提供了使软件开发任务更为简单的抽象。用高级抽象开发的 程序更易理解,因此也更易调试
3 )由于运行在低层, socket API 通常是平台和语言独立的, RMI 则不一定。 例如Java RMI 需要特定的 Java 运行时支持。结果是,使用 Java RMI 实现的 应用必须用Java 编写,并且也只能运行在 Java 平台上。
4 )在设计应用系统时,是否能选择适当的范型和 API 是非常关键的。依 赖于具体环境,可以在应用的某些部分使用某种范型或API ,而在其他部 分使用另一种范型或API 。由于使用 RMI 开发网络应用相对简单, RMI 是快 速开发应用原型的一个很好的候选工具。
四、分布式系统的一致性
4.1一致性的产生
虽然分布式系统有着诸多优点,但也存在着诸多需要解决的问题,一致 性问题就是其中的关键问题。分布式系统中的一致性问题通常发生在两 种场景中。
( 1 )数据复制
( 2 )分布式事务
.数据复制

复制机制的目的是为了保证数据的一致性。但是数据复制面临的主要难题也是如何保证多个副本之间的数据一致性。
在分布式系统引入复制机制后,不同的数据节点之间由于网络延时等原 因很容易 产生数据不一致的情况。
分布式事务

分布式事务举例

4.2一致性级别
为了更好地描述客户端一致性模型,通过模拟一个应用场景来说明,这 个场景包以下组成部分。
• 存储系统:存储系统可以理解为一个黑盒子,他提供了可用性和持久 性的保证。
• 进程 A 、 B 、 C :三个进程相互独立,能够实现对存储系统的 wirte 和 read操作。
强一致性
保证当更新操作完成之后,任何多个后续进程或者线程的访问都会返回 最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么, 下一次就保证能读到什么
在示例场景中,假如 A 写入了一个值到存储系统,存储系统保证后续 A 、 B、 C 的读取都为最新值
弱一致性
系统并不保证进程或者线程的访问都会返回最新的更新过的值。系 统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具 体的承诺多久之后可以读到。但会尽可能保证在某个时间级别(比如秒 级别)之后,可以让数据达到一致性状态。
在示例中,假设 A 写入一个值到存储系统,存储系统不能保证后续 A 、 B 、 C的读取操作能读取到最新值。此情况下有一个时间窗口的概念,它特指 从A 写入值,到后续操作 A 、 B 、 C 读取到最新值这一段时间。
最终一致性
弱一致性的特殊形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。
假如 A 首先写了一个值到存储系统,存储系统保证如果 A 、 B 、 C 后续读取 之前,没有其他写操作更新同样的值的情况下,最终所有读取操作都会 读取到A 写入的最新值。 DNS 是一个典型的最终一致性系统,当更新一个 域名的ip 以后,根据配置策略以及缓存控制策略的不同,最终所有的客 户端都会看到最新的值
4.3事务一致性
ACID ,是指在数据库管理系统( DBMS )中,事务 (transaction) 所具有的四 个特性:原子性(Atomicity )、一致性( Consistency )、隔离性 (Isolation ,又称独立性)、持久性( Durability )。
原子性

一致性

隔离性

持久性

数据库 ACID 原则在 单台服务器 就能完成任务的时代,很容易实现,但是 现在面对如此庞大的访问量和数据量,单台服务器已经不可能适应了, 而ACID 在集群环境下几乎不可能达到人们的预期,保证了 ACID ,效率就 会大幅度下降,为了达到这么高的要求,系统很难扩展,因此就出现了 CAP理论和 BASE 理论。
4.4CAP理论
一个分布式系统最多只能同时满足一致性( Consistency )、可用性 (Availability )和分区容错性( Partition tolerance )这三项中的两项。

一致性
一致性指" All nodes see the same data at the same time" ,即更新操作成 功并返回客户端完成后,所有节点在同一时间的数据完全一致。对于一 致性,可以分为从客户端和服务端两个不同的视角来看。
• 从客户端来看,一致性主要指多并发访问时更新过的数据如何获取的问题。
• 从服务端来看,则是如何将更新复制分布到整个系统,以保证数据的最终一致性问题。
可用性

.分区容错性

CAP权衡 应用


4.5BASE理论
BASE 是指基本可用( Basically Available )、软状态( Soft State )、最终 一致性( Eventual Consistency
1 基本可用(Basically Available)

软状态( Soft State)

最终一致性( Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到 一致的状态。
弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
4.6一致性算法
在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本 (replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确 的增\ 删 \ 改 \ 查等语义,需要保证这些放置在不同物理机器上的副本是一 致的。
相关概念

二阶段提交
二阶段提交 (Two-phaseCommit) 是指,在计算机网络以及数据库领域内, 为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性 而设计的一种算法

准备阶段
事务协调者 ( 事务管理器 ) 给每个参与者 ( 资源管理器 ) 发送 Prepare 消息,每 个参与者要么直接返回失败( 如权限验证失败 ) ,要么在本地执行事务,写 本地的redo (记录每条新增或者修改后的数据)和 undo (记录需要回滚 的数据)日志,但不提交

提交阶段
如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送 回滚(Rollback) 消息;否则,发送提交 (Commit) 消息;参与者根据协调者 的指令执行提交或者回滚操作,释放所有事务处理过程中使用的锁资源。 (注意 : 必须在最后阶段释放锁资源 )

二阶段提交的缺点


三阶段提交


五、共识算法
5.1概述
- 一致性(consistency)往往指分布式系统中多个副本对外呈现的数据 的状态。
- 共识(consensus)则描述了分布式系统中多个节点之间,彼此对某个 状态达成一致结果的过程。
实践中,要保障系统满足不同程度的一致性,核心过程往往需要通过共 识算法来达成。

5.2拜占庭将军问题
拜占庭将军问题 (The Byzantine Generals Problem) 提供了对分布式共识问 题的一种情景化描述,由Leslie Lamport 等人在 1982 年首次发表。事实上, 拜占庭将军问题是分布式系统领域最复杂的容错模型, 它描述了 如何在 存在恶意行为( 如消息篡改或伪造 ) 的情况下使分布式系统达成共识。

两种方案:
-- 口信消息解决方案( A Solution with oral message ) , O M(m) 算法
-- 签名消息解决方案( A solution with signed message ) , SM(m) 算法
拜占庭将军问题提供了对分布式共识问题的一种情景化描述,是分布式
系统领域最复杂的模型。现有的分布式共识算法主要可分为两类:
• 拜占庭容错算法和非拜占庭容错算法。
- 非拜占庭容错算法
. 拜占庭容错算法
5.3Paxos算法


5.4Raft算法


六、分布式存储
6.1分布式存储的基础
概述
新一代分布式存储系统的设计目标:低成本、大规模
分布式存储系统的技术挑战包括: 数据和状态信息的持久化、数据的自动迁移、 系统的自动容错、并发读写的数据的一致性 等方面。
分布式存储面临的应用场景和数据需求都比较复杂,根据数据类型,可以将 其 分为非结构化数据、结构化数据、半结构化数据三类 。
结构化数据

半结构化数据
非结构化数据

分布式文件系统blob

在系统的实现层面,分布式文件系统内部按照数据块 (chunk) 来 组织数据,每个数据块的大小相同,每个数据可以包含多个 Blob对象或者定长块,一个大文件也可以拆分成为多个数据块。
• 分布式文件系统将这些数据块分散存储到分布式存储集群中去, 处理数据的复制、一致性、负载均衡、容错等分布式系统难题, 并将用户对Blob 对象、定长块以及文件的操作映射成为对底层 数据块的操作。
分布式键值(Key-Value)系统

分布式表系统

HBASE
分布式数据库
. 分布式存储的历史
HDFS (Google File System)

6.2文件存储
单机文件系统

网络文件系统

并行文件系统

分布式文件系统

高通量文件系统

总结

6.3单机存储系统VS分布式存储系统
单机存储系统
单机存储 就是散列表、 B 树等数据结构在机械硬盘、 SSD 等持久化介质上的实现。
存储系统的 数据模型 主要包括三类: 文件 、 关系 以及 键值模型
分布式存储系统

分布式系统能够将数据分布到多个节点,并在多个节点之间实现负载均衡。
其方式主要有两种:
-- 散列分布, 如一致性散列,代表系统为 Amazon 的 Dynamo 系统;
-- 顺序分布, 即每张表格上的数据按照主键整体有序,代表系统为 Google的 Bigtable 。



6.4数据分区与复制
数据分区(分片)与数据复制是紧密联系的两个概念,对于海量数据, 通过数据分片实现系统的水平扩展 ,而通过 数据复制来保证数据的高可 用性

数据的分区
分布式存储的一个好处是实现了可扩展性,能够存储和处理比单台机器 所能容纳的大得多的数据集。而实现可扩展性的重要方式之一是对数据 进行分区。
分区是指讲一个数据集拆分为多个较小的数据集,同时将存储和处理这些较小数据集的责任分配给分布式系统中的不同节点。 分区后,可以通过向系统中添加更多节点来增加系统存储和处理数据的规模。
. 分区的分类
垂直分区:对表的列进行拆分,将某些列的整列数据拆分到特定的 分区,并放入不同的表中。
优点:减少了表的宽度,每个分区都包含了其中的列对应的所有行。 垂直分区也称为"行拆分",每一行数据都要进行拆分。例如可以将包 含text 、 blob 类型的列垂直分区,确保完整性的同时提高了访问性能。
( 2 )水平分区:对表的行进行拆分,讲不同的行放入不同的表中,所有 在表中 定义的列在每个分区中都能找到,所以标的特性依然得以保留。
例如,一个整年的销售表可以按月拆分成 12 张表,每个分区存储一个月 的数据
水平分区算法
- 范围分区
- 哈希分区
- 一致性哈希
复制

1.单主复制
根据系统以何种方式同步数据,又可将单主复制分为三类:同步复制, 半同步复制,异步复制。
同步复制
异步复制
半同步复制
单主复制的优点
• 简单易懂,易于实现。
• 仅在主节点执行并发写的操作,能够保证操作的顺序,避免了在各个节点处理数据冲突这类复杂的情况,这个特性使得单主复制更容易支持事务类操作。
• 对于大量读请求工作负载的系统,单主复制是可扩展的,可以通过增 加多个从节点来提升读的性能
. 多主复制
无主复制
无主复制指的是完全没有主节点,尽管无主技术在几十年前就出现了, 但直到亚马逊发布了 Dynamo 架构的论文,并在其中使用了无主复制, 才让该技术重新引起广泛关注。