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之前? 因为分布式系统要解 ...
随机推荐
- POJ 2392 Space Elevator 贪心+dp
题目链接: http://poj.org/problem?id=2392 题意: 给你k类方块,每类方块ci个,每类方块的高度为hi,现在要报所有的方块叠在一起,每类方块的任何一个部分都不能出现在ai ...
- 在.net项目中使用Consul
1.创建.net core web程序并运行 2.在Consul中注册该服务 Consul支持两种服务注册的方式,一种是通过Consul的服务注册HTTP API,由服务自身在启动后调用API注册自己 ...
- 整理sql server数据类型
我们在平常开发过程中,在设计数据的时候,经常碰到数据类型选择的问题,为了更快,更合适地选择正确的数据类型,所以在这里做个总结. 分类 sql server 数据类型 c# 数据类型 描述 应用场景 字 ...
- 【第八周】【新蜂】新NABCD
由小组成员宫成荣撰写 一.小组项目申请时提交的NABCD: 痛点:普通的俄罗斯方块是不现实距离下一级有多远的,我们的游戏能显示距离下一等级游戏有多远.方便玩家体验. nabc: n:能满足大多数玩家的 ...
- PAT 甲级 1050 String Subtraction
https://pintia.cn/problem-sets/994805342720868352/problems/994805429018673152 Given two strings S~1~ ...
- (七)对Jmeter进行参数化的俩种方式
一.使用CSV Data Set Config: 1.添加CSV Data Set Config: 2.配置参数: Filename:文件名,指保存参数化数据的文件目录,可以相对或者绝对路径. Fil ...
- docker 开启远程
# vi /etc/init.d/docker 在start()中加入:$exec -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -d & ...
- Maven 私服安装和启动
在安装私服的时候容易碰到的两个问题,一个是安装时拒绝访问,另一个是安装完成后服务无法启动: 拒绝访问问题: 原因:没有以管理员身份运行 cmd 解决办法: 如果是 win7 的话,可以直接在 [运行- ...
- 卸载iptables 小心了!!怎么关闭和卸载iptables
千万千万不要使用下面的命令卸载iptables yum remove iptables 这样操作会卸载掉很多系统必要的组件,那就开不了机了,链接不上了.切记切记. 如果想永远停用,使用以下命令即可: ...
- BZOJ 1835 基站选址(DP+线段树)
# include <cstdio> # include <cstring> # include <cstdlib> # include <iostream& ...