分布式系统开发实战整本书电子教案完整版ppt课件全书教学教程最全教学课件(最新).pptx
《分布式系统开发实战整本书电子教案完整版ppt课件全书教学教程最全教学课件(最新).pptx》由会员分享,可在线阅读,更多相关《分布式系统开发实战整本书电子教案完整版ppt课件全书教学教程最全教学课件(最新).pptx(240页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、分布式系统开发实战第1章 分布式系统概述本章学习什么是分布式系统分布式系统常用术语集中式系统与分布式系统分布式系统特征设计分布式系统所面临的挑战柳伟卫分布式系统开发实战21.1 什么是分布式系统分布式系统原理与范型:“分布式系统是分布式系统是若干若干独立计算机的集合,这些计算机独立计算机的集合,这些计算机对于用户来说就像对于用户来说就像单个单个相关系统相关系统”。硬件独立;软件统一。柳伟卫分布式系统开发实战31.2 分布式系统常用术语节点(Node)是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的工程项目中,一个节点往往是一个操作系统上的进程。节点是一个完整的、不可分的整体,是执
2、行分布式任务的最小的单元。在这个高可用的分布式系统中,相同功能的程序往往会部署到不同的节点中。这种模式也称为“副本(Replica)”。副本指在分布式系统中为数据或服务提供的冗余,因此可分为数据副本和服务副本。相同功能程序的副本,统称为该功能的集群。节点与节点之间是完全独立、相互隔离的,节点之间传递信息的唯一方式是网络通信(Communication)节点可以通过将数据写入某台机器的本地存储(Storage)设备来保存数据。通常的存储设备可以是磁盘、SSD、文件,也可以是关系型数据库、NoSQL数据库、文件存储系统等。柳伟卫分布式系统开发实战41.2 分布式系统常用术语如果某个节点负责存储、读
3、取数据,则该节点为有状态的节点,反之称为无状态的节点。异常主要是针对某个节点而言的。异常可能是由网络故障引起的,也可能是程序自身引起的。需要注意的是,在高可用的分布式系统中,单个节点的异常,并不一定会影响整个分布式系统。分布式系统往往会设计一定的容容错性性。常见的性能指标有:吞吐能力、响应延迟、并发能力。分布式系统为了提高可用性,总是不可避免地使用副本的机制,从而引发副本一致性的问题。柳伟卫分布式系统开发实战51.3 集中式系统与分布式系统集中式系统的优点:便于维护,操作简单。集中式系统的缺陷:容易造成单点故障;系统进行扩展和升级往往也比较麻烦。柳伟卫分布式系统开发实战61.3 集中式系统与分
4、布式系统分布式系统是通过中间软件来对现有计算机的硬件能力和相应的软件功能进行重新配置和整合。分布式系统优点:硬件成本低;易于维护;高可用性。柳伟卫分布式系统开发实战71.4 分布式系统特征可用性可扩展性高并发透明性开放性安全性柳伟卫分布式系统开发实战81.5 设计分布式系统所面临的挑战如何将系统拆分为子系统?如何规划子系统间的通信?如何考虑通信过程中的安全?如何让子系统可以扩展?如何保证子系统的可靠性?如何实现数据的一致性?柳伟卫分布式系统开发实战91.6 本章小结本章介绍了分布式系统的基本概念,包括分布式系统的常用术语及分布式系统的基本特征。同时,也抛出了设计分布式系统时所需要关注的重点和难
5、点,为下一步的学习指明了方向。柳伟卫分布式系统开发实战101.7 习题什么是分布式系统?如何理解分布式系统的“硬件独立,软件统一”?分布式系统有哪些特征?请列举出至少五个。柳伟卫分布式系统开发实战11分布式系统开发实战第2章 节点本章学习节点上的进程、线程、纤程的概念及其之间关系网络通信常见的异常场景柳伟卫分布式系统开发实战132.1 什么是线程线程是程序执行流的最小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进
6、程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。柳伟卫分布式系统开发实战14典型的线程拥有三种基本状态就绪;阻塞;运行。柳伟卫分布式系统开发实战152.2 进程和线程进程有一个独立的执行环境。进程通常有一个完整的、私人的基本运行时资源。特别是每个进程都有自己的内存空间。进程往往被视为等同于程序或应用程序。支持进程间通信(Inter Process Communication,IPC)。线程有时被称为轻量级进程(Lightweight Process,LWP)。创建一个新的线程比创建一个新的进程需要
7、更少的资源。线程不像进程那样彼此隔离以及受到操作系统的自动保护,所以在多线程程序开发过程中需要开发人员做更多的努力。柳伟卫分布式系统开发实战162.3 线程和纤程某些编程语言中提供了“纤程”(Fiber)的概念,比如Golang的goroutine,Erlang风格的actor。Java语言虽然没有定义纤程,但仍有一些第三方库可供选择,比如Quasar。纤程可以理解为是比线程更加细颗粒度的并发单元。由于纤程是以用户方式代码来实现的,并不受操作系统内核管理。纤程采用了非抢占式调度方式,而线程是抢占式调度的。一个线程可以包含一个或多个纤程。使用纤程可以获得更高的并发量,但同时也要面临着自己实现调度
8、纤程的复杂度。柳伟卫分布式系统开发实战172.4 编程语言中的线程对象提供Runnable对象继承Thread类柳伟卫分布式系统开发实战182.5 节点之间的通信消息丢失消息乱序数据错误不可靠的TCP柳伟卫分布式系统开发实战192.6 本章小结本章介绍了节点上的进程、线程、纤程的概念及其之间关系。在实际编程中,大多数编程语言都提供了线程。本章也以Java语言为例提供了线程编程的范例。在本章的最后探讨了节点之间的通信。网络通信往往是不可靠的,因此设计分布式系统时需要考虑众多的通信异常的场景。柳伟卫分布式系统开发实战202.7 习题请简述线程和进程的关系。请简述线程和纤程的关系。请用你熟悉的编程语
9、言编写一个线程操作的示例。请列举节点之间的通信常见的异常场景。柳伟卫分布式系统开发实战21分布式系统开发实战第3章 通信进程间的通信是一切分布式系统的核心。如果没有通信机制,分布式系统的各个子系统将是“一盘散沙”,毫无作用。柳伟卫分布式系统开发实战23本章学习网络通信的基础知识。常用的通信方式。柳伟卫分布式系统开发实战243.1 进程间通信进程间通信(Inter-Process Communication,IPC)指至少两个进程或线程间传送数据或信号的一些技术或方法。每个进程彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的
10、不同计算机上。进程间的通信技术包括消息传递、同步、共享内存和远程过程调用。进程间通信是一种标准的UNIX通信机制。进程间通信可以分为本地过程调用和远程过程调用。柳伟卫分布式系统开发实战253.1.1 本地过程调用的概念本地过程调用(Local Procedure Call,LPC)是指被调用的过程(函数)与调用过程处于同一个进程中。柳伟卫分布式系统开发实战263.1.2 本地过程调用的实现服务端进程建立命名服务器连接端口对象,并等待客户端连接;客户端通过向这一端口发送消息来建立连接;如果服务端同意建立连接,便会建立两个无名端口:客户端连接端口:客户线程由此向服务端发送数据;服务端连接端口:服务
11、端由此向客户端发送数据;每个客户端都分配一个独立的接口;服务端持有一个服务连接端口的句柄,同时客户端也持有一个客户连接端口的句柄,这样进程间通信的通道就建立了。柳伟卫分布式系统开发实战273.2 远程过程调用RPC是远程过程调用(Remote Procedure Call)的缩写形式。RPC是指计算机A上的进程,调用另外一台计算机B上的进程,其中A上的调用进程被挂起,而B上的被调用进程开始执行,当值返回给A时,A进程继续执行。调用方可以通过使用参数将信息传送给被调用方,而后可以通过传回的结果得到信息。而这一过程,对于开发人员来说是透明的。远程过程调用采用客户机/服务器(C/S)模式。请求程序就
12、是一个客户机,而服务提供程序就是一台服务器。和常规或本地过程调用一样,远程过程调用是同步操作,在远程过程结果返回之前,需要暂时中止请求程序。使用相同地址空间的低权进程或低权线程允许同时运行多个远程过程调用。柳伟卫分布式系统开发实战283.2.1 远程过程调用原理柳伟卫分布式系统开发实战293.2.2 如何实现远程过程调用如何传递参数如何表示数据如何选用传输协议出错时会发生什么远程调用的语义是什么远程调用的性能怎么样远程调用安全吗远程过程调用的优点柳伟卫分布式系统开发实战303.2.3 远程过程调用API名称服务操作绑定操作终端操作安全操作国际化操作(可能)封送处理/数据转换操作存根内存管理和垃
13、圾收集程序标识操作对象和函数的标识操作柳伟卫分布式系统开发实战313.2.4 远程过程调用发展历程第一代RPC第二代RPC支持对象第三代RPC以及Web Services柳伟卫分布式系统开发实战323.3 常用网络I/O模型阻塞I/O;非阻塞I/O;I/O复用(select和poll);信号驱动I/O(SIGIO);异步I/O(Posix.1的aio_系列函数)。柳伟卫分布式系统开发实战333.3.1 阻塞I/O模型阶段1:等待数据就绪。网络I/O的情况就是等待远端数据陆续抵达;磁盘I/O的情况就是等待磁盘数据从磁盘上读取到内核态内存中。阶段2:数据复制。出于系统安全,用户态的程序没有权限直接
14、读取内核态内存,因此内核负责把内核态内存中的数据复制一份到用户态内存中。柳伟卫分布式系统开发实战343.3.2 非阻塞I/O模型socket设置为NONBLOCK(非阻塞)就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是立刻返回一个错误码(EWOULDBLOCK),这样请求就不会阻塞;I/O操作函数将不断地测试数据是否已经准备好,如果没有准备好,继续测试,直到数据准备好为止。整个I/O请求的过程中,虽然用户线程每次发起I/O请求后可以立即返回,但是为了等到数据,仍需要不断地轮询、重复请求,这是对CPU时间的极大浪费。数据准备好了,从内核复制到用户空间。柳伟卫分布式系统开发实战
15、353.3.3 I/O复用模型I/O复用会用到select或者poll函数,在这两个系统调用中的某一个上阻塞,而不是阻塞于真正的I/O系统调用。同时对多个读操作、多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。柳伟卫分布式系统开发实战363.3.4 信号驱动I/O模型允许socket进行信号驱动I/O,并通过调用sigaction来安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用recvfrom来读取数据报,并通知主循环数据已准备好被处理,也可以通知主循环,让它来读取数据报。柳伟卫分布式系统开发
16、实战373.3.5 异步I/O模型异步I/O是POSIX规范定义的。通常,这些函数会通知内核来启动操作并在整个操作(包括从内核复制数据到我们的缓存中)完成时通知我们。该模式与信号驱动I/O(SIGIO)模型的不同点在于,驱动I/O(SIGIO)模型告诉我们I/O操作何时可以启动,而异步I/O模型告诉我们I/O操作何时完成。调用aio_read函数,告诉内核传递描述字、缓存区指针、缓存区大小、文件偏移,然后立即返回,我们的进程不阻塞于等待I/O操作的完成。当内核将数据复制到缓存区后,才会生成一个信号,来通知应用程序。柳伟卫分布式系统开发实战383.4 I/O操作中的常用术语阻塞是指I/O操作需要
17、彻底完成后才返回到用户空间;非阻塞是指I/O操作被调用后立即返回给用户一个状态值,无须等到I/O操作彻底完成。同步是指用户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执行;异步是指用户线程发起I/O请求后仍继续执行,当内核I/O操作完成后会通知用户线程,或者调用用户线程注册的回调函数。柳伟卫分布式系统开发实战393.5 实战:在Java中实现常用网络I/O模型Java OIOJava NIOJava AIO柳伟卫分布式系统开发实战403.6 事件驱动所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数)。事件驱动的核心自然是事件。事件驱
18、动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)、来自硬件的(如时钟事件等)和来自软件的(如操作系统、应用程序本身等)。事件发送器负责将收集器收集到的事件分发到目标对象中。事件处理器做具体的事件响应工作,它往往要到实现阶段才完全确定。对于框架的使用者来说,他们唯一能够看到的是事件处理器。这也是他们所关心的内容。柳伟卫分布式系统开发实战413.6.1 事件驱动编程事件驱动编程通常只是用一个执行过程,CPU之间不是并发的,在处理多任务的时候,事件驱动编程是使用协作式处理任务,而不是多线程的抢占式。事件驱动简
19、洁易用,只需要注册感兴趣的事件,在回调中设计逻辑就可以了。在调用的过程中,事件循环器(Event Loop)在等待事件的发生,跟着调用处理器。事件处理器不是抢占式的,处理器一般只有很短的生命周期。柳伟卫分布式系统开发实战423.6.2 事件循环的实现事件循环(Event Loop)是一个程序结构,用于等待和发送消息和事件。事件驱动编程的代码核心就是事件循环器。基于事件驱动主要有两种设计模式:Reactor和Proactor。柳伟卫分布式系统开发实战433.6.3 Reactor模型柳伟卫分布式系统开发实战443.6.4 Proactor模型柳伟卫分布式系统开发实战453.7 本章小结本章介绍了
20、节点之间的通信方式,包括本地过程调用、远程过程调用、以及在通信过程中所要设计的I/O操作。同时介绍了常见的I/O模块,包括OIO、NIO、AIO、Reactor、Proactor等。本章也以Java语言为例提供了常用网络I/O模型的范例。柳伟卫分布式系统开发实战463.8 习题请简述本地过程调用和远程过程调用调用的概念及两者之间的区别。请列举常见的远程过程调用实现方式有哪些?请列举常见的常用网络I/O模型有哪些?他们之间有什么区别?请简述阻塞和非阻塞、同步和异步之间的区别。请用你熟悉的编程语言编写一个简单的Echo服务器示例。请简述Reactor和Proactor的区别。柳伟卫分布式系统开发实
21、战47分布式系统开发实战第4章 并发与并行分布式系统的一个重要特征就是计算能力是可以并发或者并行的。在分布式系统中,往往会将一个大任务进行分解,而后下发给不同的节点去计算,从而节省整个任务的计算时间柳伟卫分布式系统开发实战49本章学习并发并行柳伟卫分布式系统开发实战504.1 并发与并行的区别并发是同一时间应对(dealing with)多件事情的能力;并行是同一时间动手做(doing)多件事情的能力。并发(concurrency)属于问题域(problem domain),并行(parallelism)属于解决域(solution domain)。并行和并发的区别在于有无状态,并行计算适合无
22、状态应用,而并发解决的是有状态的高性能;有状态要着力解决并发计算,无状态要着力并行计算,云计算要能做到这两种计算自动伸缩扩展。柳伟卫分布式系统开发实战514.2 线程与并发多个线程也可以被同时调度到多个CPU上运行。多线程编程使得程序任务并发成为了可能。并发控制主要是为了解决多个线程之间资源争夺等问题。并发一般发生在数据聚合的地方,只要有聚合,就有争夺发生,传统解决争夺的方式采取线程锁机制,这是强行对CPU管理线程进行人为干预,线程唤醒成本高,新的无锁并发策略来源于异步编程、非阻塞I/O等编程模型。柳伟卫分布式系统开发实战524.3 并发带来的风险安全性问题活跃度问题性能问题柳伟卫分布式系统开
23、发实战534.4 解决并发风险同步(Synchronization)原子访问(Atomic Access)柳伟卫分布式系统开发实战544.5 提升系统并发能力无锁化设计缓存更细颗粒度的并发单元柳伟卫分布式系统开发实战554.6 本章小结本章介绍了并发与并行的概念。通过并发与并行,使分布式系统计算大型任务成为了可能。但需要注意的是,使用多线程编程来实现并发时,需要考虑并发所带来的风险,诸如安全性问题、活跃度问题以及性能问题等。本章也介绍了避免并发问题的一些方式,同时也介绍了常用的提升并发能力的方案。柳伟卫分布式系统开发实战564.7 习题请简述并发与并行的区别。请简述并发可能会带来哪些风险。请简
24、述如何来避免并发可能带来的风险。请列举提升系统并发能力的方案有哪些。柳伟卫分布式系统开发实战57分布式系统开发实战第5章 面向对象的分布式架构面向对象编程是非常流行的编程模式,因此,在分布式系统中,基于对象来设计分布式架构是自然而然的。柳伟卫分布式系统开发实战59本章学习面向对象的分布式架构柳伟卫分布式系统开发实战605.1 基于对象的分布式架构在基于对象的分布式系统中,对象的概念在分布式实现中起着极其关键的作用。从原理上来讲,所有的一切都可以被作为对象抽象出来,而客户端将以调用对象的方式来获得服务和资源。分布式对象之所以成为重要的范型,是因为它相对比较容易地把分布的特性隐藏在对象接口后面。此
25、外,因为对象实际上可以是任何事务,所以它也是构建系统的强大范型。柳伟卫分布式系统开发实战615.2 常用的分布式对象系统微软DCOMCORBAJava RMI柳伟卫分布式系统开发实战625.3 分布式对象系统优缺点主要优点是支持面向对象编程。只支持针对特定的平台。以微软DCOM(COM+)、Java RMI为例,这些分布式对象系统只能在特定的平台下才能使用,比如微软DCOM(COM+)只能在微软的操作系统下才能使用,而RMI只能在Java平台下使用。规范复杂,实现困难。典型的例子是CORBA,虽然CORBA的规范非常完善,也号称支持跨平台,但允许CORBA本身的复杂性,导致了厂商在实现CORB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分布式 系统 开发 实战 电子 教案 完整版 ppt 课件 全书 教学 教程 最新
限制150内