先来扯淡,几天是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. 福大软工1816:Beta(6/7)

    Beta 冲刺 (6/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 组织会议 开发wxpy部分功能 展示G ...

  2. 第六周PSP &进度条

    团队项目PSP 一.表格:     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论alpha完成情况并总结 9:40 11:20 17 ...

  3. Html5新增元素中Canvas 与内联SVG的比较!

    SVG与Canvas的区别与比较如下: svg:使用xml描述2D图形,canvas使用javascript描述2D图形. Canvas 是逐像素进行渲染的,在 canvas 中,一旦图形被绘制完成, ...

  4. 第109天:Ajax请求GET和POST的区别

    一.Ajax请求GET和POST的区别 1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来 2.使用Get请求发送数据量小,Post请求发送数据量大 3.get请求需注意缓存 ...

  5. liunx 用户和用户组的命令

    查看用户列表     /etc/passwd  查看用户组列表 /etc/group 用户和用户组管理 groupadd groups 新增用户组 groupmod -n newgroupsr gro ...

  6. String Problem HDU - 3374(最大最小表示法+循环节)

    题意: 给出一个字符串,问这个字符串经过移动后的字典序最小的字符串的首字符位置和字典序最大的字符串的首字符的位置,和能出现多少次最小字典序的字符串和最大字典序的字符串 解析: 能出现多少次就是求整个字 ...

  7. Django获取多个数据及文件上传

    1. 选择性别: 1)更新login.html模板 2)views.py中获取客户端提交的数据 3)当选择性别为“男”后,后台得到了gender=1. 2.选择爱好,可以多选,所以后台会获得多个数据. ...

  8. [JLOI2011]飞行路线 最短路

    题面 题面 题解 这题不是很难,因为删代价的次数不多,因此我们只需要将最短路中的状态加一维表示已经删了几次,再转移即可 #include<bits/stdc++.h> using name ...

  9. 洛谷P2125图书馆书架上的书 题解报告

    题目描述 图书馆有n个书架,第1个书架后面是第2个书架,第2个书架后面是第3个书架……第n-1个书架后面是第n个书架,第n个书架后面是第1个书架,第i个书架上有b[i]本书.现在,为了让图书馆更美观, ...

  10. secureCRT mac 下破解

    http://blog.csdn.net/skykingf/article/details/17450561