分布式系统学习总结

  最近打算学习Spark,但是在此之前想要把分布式系统的相关知识先学习一下。百度了问题想要找找有哪些比较适合的书,但是貌似没有很受推崇的。然后就开始大面积的看各路大牛写的博客,然后我把学习到的知识按照时间和自己的理解由浅入深的总结到这里,也方便之后自己回顾,所以本文不断更新。整体上有点拿来主义啊,但是作为小白一只就先忽略这么多啦!

1.相关概念梳理

  <1>分布式系统:也就是在所要处理的数据增长到单机即使通过提升各方面性能的情况下也无法有效处理的时候所采取的将多台计算机联合起来进行处理的概念。但是分布式处理和并发并不等同于一个概念,分布式处理更强调系统的可扩展性,也就是说随着所要处理和存储的数据增多可以自由方便的增加计算机(节点);而并发则是基于快速高效解决问题提出的。
  <2>集群:在分布式系统上也就是多台计算机上可以处理相同的任务,也可以处理不同的任务,如果是相同的任务那么这个分布式系统就可以被称为集群。
  <3>云计算:广义云计算是指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的服务。这种服务可以是IT和软件、互联网相关的,也可以是任意其他的服务。对于这个我认为分布式系统是云计算的具体实现,而云则是将分布式系统的多种功能集合到一起实现了更高层次的应用,而且云计算的概念更多的针对外部的用户,所以更强调不透明性以及自由性。

2.分布式系统的分类

  分布式系统作为一个比较大的概念,从应用方式上应该可以分为三大类:
  

分布式存储系统

  
分布式计算系统

  
分布式管理系统

  分布式存储系统作为分布式系统里面最复杂的一类又可以分为如下几类:
  (1)结构化存储
  (2)非结构化存储
  (3)半结构化存储
  (4)In-memory存储
  (5)NewSQL存储
  首先,我们来谈结构化存储。结构化存储也就是我们传统的数据库,典型的场景就是事务处理系统或者关系型数据库(RDBMS)。传统的结构化存储都是从单机做起的,比如 MySQL。除了 MySQL 之外,PostgreSQL 也是近几年来势头非常强劲的一个 RDBMS. 我们发现,传统的结构化存储系统强调的是:(a)结构化的数据(例如关系表)。(b)强一致性 (例如,银行系统,电商系统等场景)(c)随机访问(索引,增删查改,SQL 语言)。然而,正是由于这些性质和限制,结构化存储系统的可扩展性通常都不是很好,这在一定程度上限制了结构化存储在大数据环境下的表现。随着摩尔定律面临的瓶颈,传统的单机关系型数据库系统面临着巨大的挑战。
  非结构化存储和结构化存储不同,非结构化存储强调的是高可扩展性,典型的系统就是分布式文件系统。分布式文件系统也是一个古老的研究话题,比如 70 年代的 Xerox Alto, 80 年代的 NFS, AFS, 90 年代 xFS 等等。然而,这些早期的分布式文件系统只是起到了网络磁盘的作用, 其最大的问题就是不支持容错和错误恢复 。后来Google提出的GFS(开源实现对应为 HDFS)则是加入了自动容错,自动错误恢复的机制。和结构化存储系统相比,虽然分布式文件系统的可扩展性,吞吐率都非常好,但是几乎无法支持随机访问操作,通常只能进行文件进行追加(append)操作。而这样的限制使得非结构化存储系统很难面对那些低延时,实时性较强的应用。
  半结构化存储的提出便是为了解决结非构化存储系统随机访问性能差的问题。我们通常会听到一些流行的名词,比如NoSQL、Key-ValueStore,甚至包括对象存储,例如protobuf,thrift等等,这些都属于半结构化存储研究的领域。其中以 NoSQL 近几年的发展势头尤为强劲。NoSQL 系统既有分布式文件系统所具有的可扩展性,又有结构化存储系统的随机访问能力 ,系统在设计时通常选择简单键值(K-V)进行存储,抛弃了传统 RDBMS 里复杂 SQL 查询以及 ACID 事务。这样做可以换取系统最大的限度的可扩展性和灵活性。在 NoSQL 里比较有名系统包括:Google 的 Bigtable, Amazon 的 Dynamo, 以及开源界的 HBase,Cassandra 等. 通常这些 NoSQL 系统底层都是基于比较成熟的存储引擎,比如 Bigtable 就是基于 LevelDB ,底层数据结构采用 LSM-Tree. 除了 LSM-Tree 之外 B-Tree (B+Tree)也是很成熟的存储引擎数据结构。
  In-memory 存储。随着业务的并发越来越高,存储系统对低延迟的要求也越来越高。 同时由于摩尔定律以及内存的价格不断下降,基于内存的存储系统也开始普及。 In-memory 存储顾名思义就是将数据存储在内存中, 从而获得读写的高性能。比较有名的系统包括 memcahed ,以及 Redis。 这些基于 K-V 键值系统的主要目的是为基于磁盘的存储系统做 cache。
  NewSQL. 我们在介绍结构化存储时说到,单机 RDBMS 系统在可扩展性上面临着巨大的挑战,然而 NoSQL 不能很好的支持关系模型。那是不是有一种系统能兼备 RDBMS 的特性(例如:完整的 SQL 支持,ACID 事务支持),又能像 NoSQL 系统那样具有强大的可扩展能力呢? 2012 年 Google 在 OSDI 上发表的 Spanner,以及 2013 年在 SIGMOD 发表的 F1, 让业界第一次看到了关系模型和 NoSQL 在超大规模数据中心上融合的可能性。不过由于这些系统都太过于黑科技了,没有大公司支持应该是做不出来的。比如 Spanner 里用了原子钟这样的黑科技来解决时钟同步问题,打破光速传输的限制。在这里只能对 google 表示膜拜。

3.分布式系统实现的两种方式

  分布式系统是一个比较大的概念,底下又分为多个不同的分支,而且加上应用的场景等的不同,所采用地实现方式也是不同的。一般来说可以分为两种方式,但是注意这两种方式在进行分布式系统设计的时候不是必然要二选一的,而大多数的时候是要二者共存的。

分布式系统中的理论、算法、技术、协议以及应用

分布式系统中所要注意的重点问题

分布式系统的设计

分布式系统会面临的挑战

参考资料

1.http://blog.csdn.net/denghejing/article/details/60763800 用大白话聊聊分布式系统
2.https://www.cnblogs.com/xybaby/p/7787034.html 什么是分布式系统,如何学习分布式系统
3.https://www.zhihu.com/question/23645117 中马超的回答
4.https://www.cnblogs.com/chulung/p/5653135.html 分布式系统的架构思路
5.

你可能感兴趣的:(分布式系统,分布式)