Distributed programming is the art of solving the same problem that you can solve on a single computer using multiple computers.

Scalability

处理每件事情都需要注意它的规模,如果规模达到一定程度,处理的难度明显加强。例如你可以计算出一个房间中的人数,但是很难计算出一个国家的人数。在一个可扩展的分布式系统中,系统从小变大,但是相关性能没有变差。

比如在单机文件系统上加 RAID5 做数据冗余,来解决单机文件系统的可靠性问题。假设 RAID5 的数据修复时间是1天(实际上往往做不到,尤其是业务系统本身压力比较大的情况下,留给 RAID 修复用的磁盘读写带宽很有限),这种方案单机的可靠性大概是100年丢失一次数据(即可靠性是2个9)。看起来尚可?但是你得小心两种情况。一种是你的集群规模变大,你仍然沿用这个土方法,比如你现在有 100 台这样的机器,那么就会变成1年就丢失一次数据。另一种情况是如果实际数据修复时间是 3 天,那么单机的可靠性就直降至4年丢失一次数据,100台就会是15天丢失一次数据。这个数字显然无法让人接受。

scalability(可扩展性)是指在一个系统、网络以及处理能力范围内,可以处理不断增长的任务,并它们可以加强自己的能力来适应任务的增长(有点儿抽象)。

  • 大小可扩展性:增加节点可以线性增加性能,并数据集的增加不增加延迟性
  • 地理位置可扩展性:数据中心间延迟性采用合理的方式处理,则可以跨数据中心,减少用户数据查询响应时间
  • 管理可扩展性:增加更多的节点不增加管理的开销

Performance

性能特点是在一定任务情况下,系统处理所需要的时间和资源使用量来衡量的。如快速回复(低延迟性)、高吞吐量以及计算资源低使用率。但是这几个性能,在实际中只能权衡。

latency

延迟性指事件初始化和发生的时间段。比如在分布式系统中写操作,就写发生到新的数据可以被用户看到的时间段。latency经常要受一些硬件(ram的性能、cpu性能)的限制。

Availability

指系统处在运行状态时间的比例,用户不可以访问,那么系统就是不可用。
分布式系统上可以获得单机非常的特性,比如单机就是无法容忍机器宕机。分布式系统可以由一些非常不好的组件构成,但是可以提供可信赖的系统。

Availability = uptime / (uptime + downtime)

例如:

Availability % How much downtime is allowed per year?
90% ("one nine") More than a month
99% ("two nines") Less than 4 days
99.9% ("three nines") Less than 9 hours
99.99% ("four nines") Less than an hour
99.999% ("five nines") ~ 5 minutes
99.9999% ("six nines") ~ 31 seconds

availability不仅仅是uptime,还可能受网络中断以及该业务超出系统的功能的影响。

Fault tolerance

指在故障发生时,系统还可以正常运行(和没有发生故障时功能相同)的能力。

容错归结为:确定你所期望的故障,然后设计一个系统或一个算法可以容错他们。没有考虑过故障是无法容错的。

什么在阻止我们获得理想的状态呢?

有以下两个硬件方面的因素:

1 nodes的数量

2 nodes的距离

伴随着以下限制:

1 独立节点的增加,就增加了系统失败的概率(减小了availability并增加了管理成本)

2 独立节点的增加,就增加了节点的通信 (降低了可扩展的performance)

3 节点的跨机房部署,增加了节点之间的延迟性(降低了某些操作的performance)

可用性和性能是系统必须保证的,更高一级,可以考虑SLA(服务等级协议),如果我写数据,如何更快在其他地方看到?

在数据被写入时,什么可以保证耐久性?如果让系统运行一个计算,如何迅速返回结果?当组件发生故障,执行取出操作,什么样的影响将在在系统上?

设计技术:partition and replicate

如果要把数据分布在不同节点,那么上面两个技术非常关键。数据可以被分割在多个节点(partition),以允许更多的并行处理。也可以被复制或缓存在不同的节点上,以减少客户端和服务器之间距离以及更大的容错性(replicate)

partitioning是把数据分成相互独立的数据集,这样可以避免数据的增长带来的影响。partitioning是通过限制被检查数据集的大小和定位相关数据在相同partition来提高性能的(如一个数据一分钟的记录,那么这个数据分布在一台机器和多台机器性能是截然不同的)。容许partition独立失败,来挺高可用性。在不可用情况下,容易更多节点失败。

replication可以通过复制数据集,提高计算和带宽能力。可以提高可用性,在不可用情况下,容易更多节点失败。当然replication又会带来一致性问题,后面再讨论一致性的问题。

参考文献:

分布式系统理论-terms的更多相关文章

  1. 分布式系统理论进阶 - Raft、Zab

    引言 <分布式系统理论进阶 - Paxos>介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议——Raft和Zab.通过与Paxos对比,了解Raft和Zab的核心思想.加 ...

  2. 分布式系统理论进阶 - Paxos变种和优化

    引言 <分布式系统理论进阶 - Paxos>中我们了解了Basic Paxos.Multi Paxos的基本原理,但如果想把Paxos应用于工程实践,了解基本原理还不够. 有很多基于Pax ...

  3. 分布式系统理论--CAP理论、BASE理论

    问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景. 1.火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然 ...

  4. 分布式系统理论进阶7:Paxos变种和优化

    本文转自:https://www.cnblogs.com/bangerlee/p/6189646.html 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...

  5. Java工程师学习指南第8部分:分布式系统理论与实践

    本文整理了微信公众号[Java技术江湖]发表和转载过的分布式相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧. 细聊分布式ID生成方法 近期面试Java后端的一些感悟 本专栏介绍分布式的 ...

  6. 分布式系统理论进阶 - Paxos

    引言 <分布式系统理论基础 - 一致性.2PC和3PC>一文介绍了一致性.达成一致性需要面临的各种问题以及2PC.3PC模型,Paxos协议在节点宕机恢复.消息无序或丢失.网络分化的场景下 ...

  7. 分布式系统理论之Quorum机制

    一,Quorum机制介绍 在分布式系统中有个CAP理论,对于P(分区容忍性)而言,是实际存在 从而无法避免的.因为,分布系统中的处理不是在本机,而是网络中的许多机器相互通信,故网络分区.网络通信故障问 ...

  8. 分布式系统理论:一致性协议Paxos

    Paxos算法是莱斯利·兰伯特(Leslie Lamport)于1990年提出的一种基于消息传递的一致性算法. Paxos 算法是一个解决分布式系统中,多个节点之间就某个值(注意是某一个值,不是一系列 ...

  9. 从分布式一致性谈到CAP理论、BASE理论

    问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景. 1.火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然 ...

随机推荐

  1. 【Hadoop故障处理】全分布下,DataNode进程正常启动,但是网页上不显示,并且DataNode节点为空

    [故障背景] DataNode进程正常启动,但是网页上不显示,并且DataNode节点为空. /etc/hosts   的ip和hostname配置正常,各个机器之间能够ping通. [日志错误信息] ...

  2. CentOS7 LNMP+phpmyadmin环境搭建(二、LNMP环境搭建)

    上一篇博客我们在虚拟机上安装了centos7,接下来,就开始安装lnmp环境吧. 还是跟之前一样,进入命令行后,先使用su命令切换到root权限. 首先配置防火墙  CentOS 7.0默认使用的是f ...

  3. 帝国cms发布信息时替换正文IMG图片标签里的ALT内容

    帝国cms发布信息时替换正文IMG图片标签里的ALT内容 在 e/class/userfun.php 里面增加 //替换正文IMG里的ALT内容 function user_imgalt($mid,$ ...

  4. STM32 uart 单线半双工模式(cube版本)

    STM32 uart 单线半双工模式(cube版本) 1.引言 在某些场合下需要进行三线制串口通信(信号线只有一根),这就要求进行单线半双工的模式进行通信.在这种情况进行数据协议传输的过程中,信号端需 ...

  5. Python学习4——print打印

    print():  在控制台输出变量的值: print打印完后换行: print(123) # 完整模式:print(123,end="\n") 希望打印完不换行: print(1 ...

  6. C语言顺序表

    顺序表结构可设为一个数组和一个指向尾部的变量,数组用来存放元素,指向尾部的变量在插入元素的时候加一,删除元素的时候减一,始终指向尾部. typedef int elemtype; typedef st ...

  7. 检测微信小程序是否被反编译获取源码

    众所周知,微信小程序的代码安全性很弱,很容易被别人反编译获取源码.我自己的小程序也被别人反编译拿到源码还上线了,非常无语. 既然客户端不好防范,服务端还是可以做点手脚的. 小程序的Referer是不可 ...

  8. 破解有道词典在线翻译接口--python

    没什么好说的,直接上代码. import requests # import json import time import random import hashlib translate = inp ...

  9. tutorials

    https://github.com/HadrienG/tutorials https://github.com/galaxyproject/training-material/blob/master ...

  10. Javascript闭包例子

    闭包的概念 内层的函数可以引用存在于包围它的函数内的变量,即使外层函数的执行已经终止.可理解为,闭包就是能够读取其他函数内部变量的函数. 表现形式是:定义在函数内部的函数. function f1() ...