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. 配置一个nginx反向代理&负载均衡服务器

    一.基本信息 系统(L):CentOS 6.9 #下载地址:http://mirrors.sohu.com 反代&负载均衡(N):NGINX 1.14.0 #下载地址:http://nginx ...

  2. QQ空间认证之数据篇

    最近,我们发现可以利用开通企鹅媒体平台的方式开通QQ公众号从而绑定我们的QQ号,这样我们所绑定的QQ号就成了认证空间了. 虽说这样很快捷的就认证了我们的QQ空间,但是,起有利也有弊.任何事情都不是十全 ...

  3. WIN10远程连接winserver2012 r2,连接失败

    背景:2012开启远程的时候,默认是勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”,这个选项据说比较安全,但是用win10远程的时候就报错,函数不受支持,最后通过修改win10的配置得以 ...

  4. 【Keil】Keil5添加源程序和头文件

    xxx.c就是源程序 xxx.h就是头文件 [源程序添加方法] 双击文件夹,例如图片上的Source,跳出弹窗,选择需要添加的源程序即可 [添加头文件的方法] 1.首先点击图片红框处,或是在文件夹te ...

  5. js分片上传大文件,前端代码

    首先导入jQuery.form.js文件,下面src是相对于改js文件位置, <script type="text/JavaScript" src="jquery/ ...

  6. 单节锂电池充电(电路)芯片TP4056

  7. MySQL高级第四章——MySQL的锁机制

    一.概述 1.定义 锁是计算机协调多个进程或线程并发访问某一资源的限制. 2.分类 操作类型来分: 读锁(共享锁)和写锁(排它锁) 数据粒度来分: 表锁和行锁 二.三锁 1.表锁——偏读 特点: 偏向 ...

  8. 深圳Uber优步司机奖励政策(12月28日到1月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 游戏人工智能 读书笔记 (四) AI算法简介——Ad-Hoc 行为编程

    本文内容包含以下章节: Chapter 2 AI Methods Chapter 2.1 General Notes 本书英文版: Artificial Intelligence and Games ...

  10. WeTest功能优化第2期:云真机智能投屏,调试告别鼠标

    第2期功能优化目录 [云真机视频映射]云真机画面本地映射[兼容性测试报告]新增问题机型聚类功能[新增Android9.0]同步上线最新安卓系统 本期介绍的云测产品功能优化,既有重磅级技术突破,也有报告 ...