分布式初探

Why 分布式系统?

分布式系统(Distributed system)是相对集中式系统来讲的。集中式就是所有程序都运行在一个机器上。在这种情况下,当程序和数据变得越来越多、越来越大时,单个机器就得提高性能和存储容量,比如增加CPU核数和增加存储空间。但是在一个机器上扩展性能会有两个问题:

  • 一是这个机器任何一个部件(硬件或软件bug)坏掉整个系统就崩溃,没有冗余性;
  • 二是单个机器的性能扩展总会有极限

因此,为了使系统有扩展性(scalability) , 单机器系统要重新设计成分布式系统,说白就是多个机器(称为节点 node)通过网络连接在一起、共同执行某个任务。一个分布式系统可以进行分布式计算和/或分布式存储。多个机器可以执行相同的程序(此时称为集群 cluster),也可以执行不同的程序。

分布式 vs 并行计算

显然,分布式是具有并行特点,但与分布式相对的是集中式,而与并行相对应的则是sequence computing. 实际上,分布式计算都是并行计算,但并行计算不都是分布式的,例如一台电脑多核CPU,可并行计算,但就是集中式系统。
分布式计算主要是为了系统扩展性,而并行计算是为了提高运算效率;
分布式计算没有global的时钟,而并行计算有;
分布式的节点拥有相互独立的内存,或者说内存是不共享的,而并行计算共享内存。

分布式难点

为了使系统能解决更大size的问题,我们增加机器数量;但系统性能不一定随机器数量而线性增长。实际上,分布式系统存在如下难点:

  • 数据如何拷贝到不同节点上?拷贝完了不同节点拥有的数据是否还有一致性?
  • 不同节点间的通讯如何协调?
  • 一个任务里的多个程序可能要有先后的执行顺序,但不同节点没有global的时钟,如何协调执行顺序?
  • 不同节点上的机器不同的(硬件,操作系统…),如何处理这些差异?
  • 有的数据在节点间是共享的,如何保障数据的安全性?

一个分布式系统的好坏可以大致地由两个方面来衡量:

  1. 性能 / 延迟 (performance / latency)
    就是给定时间/计算资源,系统能干多少活。可以通过相应时间/延迟、内存利用率等指标来衡量。
  2. 可用性 (availability)
    就是系统可用的时间和总运行时间的比率。整个系统可用不必要说每个节点、每个节点间的链接都可用。实际上,分布式系统应该是可容错(fault tolerant)的,由于存在冗余,一个部分挂掉系统仍有可能正常运行。好的分布式系统其实不要求每个机器都质量超好、超可靠,只要组合起来的整个系统可靠就行。

当我们增加系统节点数时,可能会:

  • 增加整个系统挂掉的可能性(降低可用性)
  • 增加节点间的通讯需求(降低性能)
  • 如果节点存在地理上的距离,还会增加信息传输的时间(降低性能)

所以,分布式系统设计将着力解决以上问题。

数据如何分发到不同节点?

两种基本技术:

  1. Partitioning
    就是把数据分割成多个独立的不同子集,分发到不同节点上
  2. Replication
    这个则是把相同的数据copy几份放在不同节点上

partitioning和replication都有利于提高系统的性能和可用性:

Availability improvementPerformance improvement
partitioningby limiting the amount of data to be examined and by locating related data in the same partitionby allowing partitions to fail independently, increasing the number of nodes that need to fail before availability is sacrificed
replicationby making additional computing power and bandwidth applicable to a new copy of the databy creating additional copies of the data, increasing the number of nodes that need to fail before availability is sacrificed

实现partitioning和replication的算法有很多种,具体用哪一种视问题而定。

CAP定理

CAP定理说的是以下三件事最多只有两个能被同时被满足:

  • Consistency 一致性:所有节点在同一时间看到的数据应该是一样的
  • Availability 可用性:一个机器挂掉不会影响其余机器的运行
  • Partition tolerance 分区容忍性:即使由于网络连接出现问题信息丢失,系统也应该能够正常运行

任何两个同时发生构成一种分布式模型,如下图的任意两个大圆相交的部分所示。但三个大圆交成的区域不代表任何模型,因为不可能发生。
在这里插入图片描述

在现实中,网络连接的可靠性不太高,因此在分布式系统中必须保证Partition tolerance. 因此剩下的一致性和可用性就只能2选1了。而这里的“一致性”还是指的是“强一致性”,即系统中只有一份copy. 为了满足一定可用性,一致性就得做出牺牲,变成“弱一致性”。

(to be continued)


Reference

  1. http://book.mixu.net/distsys/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值