Distributed Systems 分布式系统
先来扯淡,几天是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 分布式系统的更多相关文章
- 可扩展的Web系统和分布式系统(Scalable Web Architecture and Distributed Systems)
Open source software has become a fundamental building block for some of the biggest websites. And a ...
- [翻译] TensorFlow 分布式之论文篇 "TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Systems"
[翻译] TensorFlow 分布式之论文篇 "TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed ...
- 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 ...
- Scalable Web Architecture and Distributed Systems
转自:http://aosabook.org/en/distsys.html Scalable Web Architecture and Distributed Systems Kate Matsud ...
- 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 ...
- [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之一 基本概念
因为工作的原因,最近打算看一些分布式学习的资料.其中这个http://book.mixu.net/distsys/就是一篇非常适合分布式入门的介绍. 这个短小的材料有下面5个小的章节,图文并茂,也没有 ...
- Mit 分布式系统导论,Distributed Systems ,lab1 -lab6 总结,实验一到实验六总结
终于把Mit的分布式系统导论课的实验1-6写完了 做得有些痛苦,但是收获也很大 http://pdos.csail.mit.edu/6.824-2012/labs/index.html 把实验1-6用 ...
- [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之四 Replication 拷贝
阅读http://book.mixu.net/distsys/replication.html的笔记,是本系列的第四章 拷贝其实是一组通信问题,为一些子问题,例如选举,失灵检测,一致性和原子广播提供了 ...
- [分布式系统学习]阅读笔记 Distributed systems for fun and profit 之三 时间和顺序
这是阅读 http://book.mixu.net/distsys/time.html 的笔记,是该系列的第三章. 为什么时间和顺序很重要呢?为什么我们关系事件A发生在事件B之前? 因为分布式系统要解 ...
随机推荐
- C#高级编程 (第六版) 学习 第七章:委托和事件
第七章 委托和事件 回调(callback)函数是Windows编程的一个重要方面,实际上是方法调用的指针,也称为函数指针. .Net以委托的形式实现了函数指针的概念,.Net的委托是类型安全的. 委 ...
- C#高级编程 (第六版) 学习 第五章:数组
第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...
- 结对编程——paperOne基于java web的简易四则运算出题网站
项目成员:张金生 张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出 ...
- PHP执行原理
简单解释:PHP执行原理 客户端向服务器发送一个请求,如果请求的是一个HTML页面,服务器直接将HTML页面发送到客户端给浏览器解析,如果请求的是PHP页面,则服务器会运行PHP页面然后生成标准的HT ...
- Java JVM- jstat查看jvm的GC情况[转]
ava通过jvm自己管理内存,同时Java提供了一些命令行工具,用于查看内存使用情况.这里主要介绍一下jstat.jmap命令以及相关工具. 一.jstat查看 gc实时执行情况 jstat命令命令格 ...
- 九度-题目1026:又一版 A+B
http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m ...
- 【linux】linux的数据流重定向
首先说一下什么是数据流重定向,所谓数据流重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外 ...
- 【前端学习笔记】函数定义、函数调用、this
函数定义的三种方式与特点: 1.函数声明:(特点:会被前置:重复定义函数时,最后一次定义有效.) 2.函数表达式: 3.函数实例化:(特点:只能访问本地作用域与全局作用域!!!) /* 对象实例化定义 ...
- PC和FPGA间的串口通信实现
应用笔记 V1.0 2015/03/26 PC和FPGA间的串口通信实现 概述 本文将介绍PC和FPGA间的串口通信实现的基本思路和Verilog代码,对于通信而言,收发双方都要有相应的控制. ...
- 第98天:CSS3中transform变换详解
transform变换详解 本文主要介绍变形transform. Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放sc ...