先来扯淡,几天是14年12月31日了,茫茫然,2014就剩最后一天了。这两天国大都放假,我给自己安排了四篇博客欠账,这就是其中的第一篇,简单介绍一些分布式系统的一些概念和设计思想吧。后面三篇分别是Network File System(NFS)Andrew File System(AFS)以及The design of naming schemes。废话不多说了,开始吧。

1. 本文讲什么

前面也提到了,本文会简单介绍一下分布式系统的一些概念和设计思想。

2. 分布式系统是什么

分布式系统,听起来好像很玄乎,跟自己没啥关系,但其实你每天都在用,每次你用百度谷歌,都是在使用分布式系统。 
分布式系统,说白了就是将很多机器组织在一起,然后获得一些需要的性能,如存储能力、计算能力等等。

3. 设计时的考虑

首先来看的话,那么多机器,经常性的会有一两个(甚至更多)机器的磁盘损坏啊、网络故障啊、软件故障甚至就是机器断电了!!总之,林子大了,什么事儿都会碰到。此外还有安全性、系统性能啊等等吧。

  • 机器故障 
    这个怎么处理呢?要想避免机器故障是不可能的。于是乎有两条路,第一条路就是使用高性能机器,其故障概率非常的低,但是这样一来即使能解决问题(事实上几乎不能,降低故障并没有 解决问题 )也太贵了不划算。于是乎就有这样的设计思路,我们用一大堆普通机器组建分布式系统,通过设计确保整个系统的健壮性而不是某一个机器的健壮。

设计的目标是给用户的感觉是这个系统一直没问题,但是事实上可能系统中的很多机器已经损坏了! 
设计的所有问题在于如何在不可信机器部件上建立可靠的分布式系统。话说回来,这跟计算机网络是不是很像!我们在设计网络协议的时候首要的考虑不就是认为网络数据传输不可信么。下面就以通讯为例子看看是怎么设计。

4. 通讯

分布式系统各个机器之间主要依靠网络通信,而数据传输本身的可靠性已经被各种网络协议解决了,所以我们不用考虑网络数据传输问题。集中注意力在建立怎样的通讯抽象来管理各个部件之间的通讯。

  • 分布式共享内存(DSM) 这种系统层面的抽象就是说将整个分布式机群看做一个机器,各个机器的存储都是可以通过虚拟地址来访问。在这种设计下,分布式系统计算有点像多线程了。 
    具体而言,当需要访问数据的时候(页),如果正好这个页数据在本机,那就直接访问了,否则就产生页错误了,这时候向其他机器发送错误信息,如果在其他机器上找到了页数据,就传输过来。 
    听起来不错,但是如果一个机器正好就是宕机,访问上面的数据的时候会发生什么?一直页错误却一直找不到数据。 
    这种设计有待考虑。
  • 还有一种设计是编程语言层面的抽象,远程程序调用(RPC
    举个例子,两个线程A和B,A线程需要B线程上面的数据来计算,那么与其将B上面的数据拷到本地再计算,不如直接将A线程准备计算的各个参数发给B线程,B线程在本地执行代码之后将结果返回给A线程。 
    这种设计是不是很炫~~ 
    至于RPC的具体实现这你就不赘述了,感兴趣的话自行看论文去,而且也有开源的实现,需要的时候直接用就可以了 RPC的作用可不简简单单这样而已,它可以诠释一种设计模式,使得分布式系统真正成为一种系统。之前的DSM设计的系统名义上是一个系统,但是实际上就是一个“集合”,每个机器干的事情基本一样。但是有了RPC之后,就不一样了,可以实现分工了,每个机器做自己的任务。这里说的比较笼统,但是很显然,这样的分工实现之后,分布式系统才能成为真正的系统! 
    举例子的话有点太多了,简单说一个框架吧,也是我现在正在做的epic存储系统。数据存储在一个个shard中,于是我们有一种机器称之为shardEnvironemnt用来实际存储和管理这些shard、此外用户查询数据需要定位到具体的shardEnvironment机器上,这就需要一种机器称之为shardServer了、然后为了处理机器故障问题,还需要有一种机器专门检测整个系统机器的健康状况,这一类机器称之为shardTracker,一旦发现某个机器宕机了,则可以按照预先的设计执行恢复操作或者其他。这样一来,机器各司其职, 每个机器只需要做好自己的事情,就可以保证整个系统健康运行。 
    哈哈,当然了,事实上远比这里描述的要复杂得多,但是大概思路就是这样,而这,需要归功于RPC这种抽象。 
    但是,具体怎么设计自己的分布式系统则需要考虑实际需要,并不一定要各个机器各司其职啥的,一句话,看情况吧。

Distributed Systems 分布式系统的更多相关文章

  1. 可扩展的Web系统和分布式系统(Scalable Web Architecture and Distributed Systems)

    Open source software has become a fundamental building block for some of the biggest websites. And a ...

  2. [翻译] TensorFlow 分布式之论文篇 "TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Systems"

    [翻译] TensorFlow 分布式之论文篇 "TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed ...

  3. Distributed systems theory for the distributed systems engineer

    Gwen Shapira, SA superstar and now full-time engineer at Cloudera, asked a question on Twitter that ...

  4. Scalable Web Architecture and Distributed Systems

    转自:http://aosabook.org/en/distsys.html Scalable Web Architecture and Distributed Systems Kate Matsud ...

  5. Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--转

    原文地址:https://dzone.com/articles/scalable-distributed-systems-using-akka-spring-boot-ddd-and-java Whe ...

  6. [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之一 基本概念

    因为工作的原因,最近打算看一些分布式学习的资料.其中这个http://book.mixu.net/distsys/就是一篇非常适合分布式入门的介绍. 这个短小的材料有下面5个小的章节,图文并茂,也没有 ...

  7. Mit 分布式系统导论,Distributed Systems ,lab1 -lab6 总结,实验一到实验六总结

    终于把Mit的分布式系统导论课的实验1-6写完了 做得有些痛苦,但是收获也很大 http://pdos.csail.mit.edu/6.824-2012/labs/index.html 把实验1-6用 ...

  8. [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之四 Replication 拷贝

    阅读http://book.mixu.net/distsys/replication.html的笔记,是本系列的第四章 拷贝其实是一组通信问题,为一些子问题,例如选举,失灵检测,一致性和原子广播提供了 ...

  9. [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之三 时间和顺序

    这是阅读 http://book.mixu.net/distsys/time.html 的笔记,是该系列的第三章. 为什么时间和顺序很重要呢?为什么我们关系事件A发生在事件B之前? 因为分布式系统要解 ...

随机推荐

  1. css声明的优先级

    选择器的特殊性 选择器的特殊性由选择器本身的组件确定,特殊性值表述为4个部分,如0,0,0,0,0 一个选择器的具体特殊性如下确定 1.对于选择器给定的ID属性值,加0,1,0,0 2.对于选择器中给 ...

  2. java之静态代理与动态代理

    先看看静态代理是如何操作的 定义接口: public interface Person { public void sayHello(String content, int age); public ...

  3. JMeter脚本增强之参数化

    JMeter测试脚本录制或者编写,在Web应用和App上的操作方式可能有一点点区别(其实也差不多,哈哈),但是当脚本录制好了之后,对测试脚本的强化,包括参数化.关联.文本检查.集合点设置,甚至再往后的 ...

  4. 第202天:js---原型与原型链终极详解

    一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function 是 JS 自带的函数对象.下面举例说明 var o1 = ...

  5. Innobackupx工具命令简单解析

    --defaults-file 同xtrabackup的--defaults-file参数,指定mysql配置文件; --apply-log 对xtrabackup的--prepare参数的封装; - ...

  6. P2812 校园网络【[USACO]Network of Schools加强版】

    题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们. 题目描述 共 ...

  7. Bond UVA - 11354(并查集按秩合并)

    题意: 给你一张无向图,然后有若干组询问,让你输出a->b的最小瓶颈路. 解析: 应该都想过用prime的次小生成树做..但二维数组开不了那么大..所以只能用kruskal了.... #incl ...

  8. BZOJ3509 [CodeChef] COUNTARI 【分块 + fft】

    题目链接 BZOJ3509 题解 化一下式子,就是 \[2A[j] = A[i] + A[k]\] 所以我们对一个位置两边的数构成的生成函数相乘即可 但是由于这样做是\(O(n^2logn)\)的,我 ...

  9. codeforces765F Souvenirs

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  10. Kerberos的黄金票据详解

    0x01黄金票据的原理和条件 黄金票据是伪造票据授予票据(TGT),也被称为认证票据.如下图所示,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信.由于黄金票据是伪造的TGT,它作为TGS- ...