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这种抽象。 
    但是,具体怎么设计自己的分布式系统则需要考虑实际需要,并不一定要各个机器各司其职啥的,一句话,看情况吧。
时间: 2024-10-23 09:59:33

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 as those websites have grown, best practices and guiding principles around their architectures have emerged. This chapter seeks to cover some of the ke

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

原文地址:https://dzone.com/articles/scalable-distributed-systems-using-akka-spring-boot-ddd-and-java When data that needs to be processed grows large and can’t be contained within a single JVM, AKKA clusters provides features to build such highly scalabl

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

这是阅读 http://book.mixu.net/distsys/time.html 的笔记,是该系列的第三章. 为什么时间和顺序很重要呢?为什么我们关系事件A发生在事件B之前? 因为分布式系统要解决的问题是把单机上的问题通过多机来解决.然而传统单机的程序总是假设确定的顺序.对于分布式程序来说,正确性最简单的定义就是,跑起来像一台单机上运行的程序. 全序和偏序 具体的定义大家可以去翻离散书.简单地说,全序就是在集合里任何两个元素都可以比较,分出大小.偏序中,某些元素是没办法比较大小的. 在单节

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

阅读http://book.mixu.net/distsys/replication.html的笔记,是本系列的第四章 拷贝其实是一组通信问题,为一些子问题,例如选举,失灵检测,一致性和原子广播提供了上下文. 同步拷贝 可以看到三个不同阶段,首先client发送请求.然后同步拷贝,同步意味着这时候client还在等待着请求返回.最后,服务器返回. 这就是N-of-N write,只有等所有N个节点成功写,才返回写成功给client.系统不容忍任何服务器下线.从性能上说,最慢的服务器决定了写的速度

[分布式系统学习]阅读笔记 Distributed systems for fun and profit 抽象 之二

本文是阅读 http://book.mixu.net/distsys/abstractions.html 的笔记. 第二章的题目是"Up and down the level of abstraction".这一章里面,作者主要介绍了分布式系统里面的一个重要概念:CAP理论. 什么是CAP理论呢?就是说在任何情况下,分布式系统只能满足下面三项中的两个: 一致性(Consistency),这里指的强一致性. 可用性(Availability). 对网络分割容错(Partition tol

Let it crash philosophy for distributed systems

This past weekend I read Joe Armstrong’s paper on the history of Erlang. Now, HOPL papers in general are like candy for me, and this one did not disappoint. There’s more in this paper that I can cover in one post, so today I’m going to concentrate on

《DISTRIBUTED SYSTEMS Concepts and Design》读书笔记 一

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.4px Arial; color: #333333 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Arial; color: #333333 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.6px Arial; color: #333333 } li.li2 { margin: 0.

Distributed Systems: When you should build them, and how to scale. A step-by-step guide.

原文链接 https://medium.com/free-code-camp/distributed-systems-when-you-should-build-them-and-how-to-scale-a-step-by-step-guide-37e76a177218 分布式系统:何时构建它们以及如何扩展,分步指南. 当我开始创建产品时,有多少初级开发人员患有冒名顶替综合症,这总是让我感到震惊. 我明白了,有很多令人兴奋的例子顶尖公司与可以解决极其复杂的分布式系统数十亿请求,优雅地提升数以百

Network File System

Network File System 2014-12-31 #system 接着上一篇博客Distributed Systems 分布式系统来扯淡,之前的博客一再在写文件系统,这次继续,只不过是分布式文件系统. 1. 这篇文章讲什么 这篇文章介绍一种分布式文件系统,名字叫Network File Sytem(NFS),翻译过来就是网络文件系统.NFS是一种分布式文件系统,大概的样子是这样的:  这里多说一句,NFS可不是仅仅指图中那个server,它包含了图中的所有部件 ,client中也有N