《分布式系统开发实战整本书电子教案完整版ppt课件全书教学教程最全教学课件(最新).pptx》由会员分享,可在线阅读,更多相关《分布式系统开发实战整本书电子教案完整版ppt课件全书教学教程最全教学课件(最新).pptx(240页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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
26、A时产生了非常大的差异,导致了不同的CORBA实现之间会出现缺乏互操作性的现象。同时,CORBA过于复杂,导致能很好使用CORBA的人很好。这也是为什么CORBA无法继续流行的原因。柳伟卫分布式系统开发实战635.4 实战:基于Java RMI实现分布式对象通信同步(Synchronization)原子访问(Atomic Access)柳伟卫分布式系统开发实战645.5 本章小结本章介绍了基于对象的分布式系统架构及常用的分布式对象系统,包括微软DCOM(COM+)、CORBA、Java RMI。同时我们也认识到分布式对象系统有其优点也有其缺点,在实际应用中,要根据实际的场景来考虑哪种分布式对象
27、系统技术。比如,在特定的平台,我们可以使用与该平台所对应的分布式对象系统技术,比如针对微软平台,我们可以使用DCOM(COM+)技术;在Java平台,我们可以使用Java RMI技术。如果平台具有多样性,或者没有办法统一到相同的技术上来,那么可以选择使用跨平台的分布式技术,比如CORBA。柳伟卫分布式系统开发实战655.6 习题请简述基于对象的分布式架构的实现原理。常用的分布式对象系统有哪些?他们具有怎么样的特点?又有哪些不足?请用你熟悉的技术编写一个应用,以实现分布式对象的通信。柳伟卫分布式系统开发实战66分布式系统开发实战第6章 面向服务的分布式架构面向对象的分布式架构有其限制,比如与平台
28、强关联、实现复杂等。因此,近些年来,面向服务的分布式架构逐渐兴起。柳伟卫分布式系统开发实战68本章学习面向服务的分布式架构柳伟卫分布式系统开发实战696.1 什么是面向服务的架构可重用:一个服务创建后能用于多个应用和业务流程。松耦合:服务请求者到服务提供者的绑定与服务之间应该是松耦合的。因此,服务请求者不需要知道服务提供者实现的技术细节,例如程序语言、底层平台等,只需要知道服务名与服务接口即可。服务的部署、迁移、扩容极其便利。明确定义的服务接口:服务交互必须是明确定义的。SOA服务组件提供标准周知的服务接口,服务请求者根据服务名、标准服务接口来获取服务。Web服务描述语言(Web Servic
29、es Description Language,WSDL)用于描述服务请求者所要求的绑定到服务提供者的细节。WSDL不包括服务实现的任何技术细节。服务请求者不知道也不关心服务究竟是由哪种程序设计语言编写的。基于开放标准:当前SOA的实现形式基于开放标准,例如,公有Web Service协议,或私有开放服务标准协议。可以采用第一代Web Service定义的SOAP、WSDL和UDDI以及第二代Web Service定义的WS-*实现。无状态的服务设计:服务应该是独立的、自包含的请求,在实现时它不需要获取从一个请求到另一个请求的信息或状态。服务不应该依赖于其他服务的上下文和状态。当产生依赖时,它
30、们可以定义成通用的业务流程、函数和数据模型。柳伟卫分布式系统开发实战706.2 SOA的基本概念应用程序前端业务流程的所有者;服务提供业务的功能,可以供应用程序前端或者其他服务使用;实现提供业务的逻辑和数据;合约为服务客户指定功能、使用和约束;接口物理地公开功能;服务库存储SOA中各个服务的服务合约;服务总线将应用程序前端和服务连在一起。柳伟卫分布式系统开发实战716.3 基于Web服务的SOAXML-RPCSOAPMicrosoft.NET Remoting柳伟卫分布式系统开发实战726.3.4 Java中的XML Web服务柳伟卫分布式系统开发实战736.3.5 超越SOAPAJAXXML
31、-RPCREST柳伟卫分布式系统开发实战746.3.6 SOA的演变REST风格的架构微服务架构Serverless架构柳伟卫分布式系统开发实战756.4 Web服务的分类“大”Web服务:使用遵循简单对象访问协议(SOAP)标准的XML消息RESTful Web服务:也简称为REST服务。柳伟卫分布式系统开发实战766.4.3 Web服务技术选型选择使用“大”Web服务和RESTful Web服务是要针对具体的场景的。“大”Web服务:解决企业计算中常见的高级QoS需求。RESTful Web服务:适用移动App、云计算、Cloud Native、微服务等架构。柳伟卫分布式系统开发实战776
32、.5 实战:基于JAX-WS实现Web服务柳伟卫分布式系统开发实战786.6 本章小结本章介绍了什么是面向服务的架构,以及实现面向服务的架构技术,包括XML-RPC、SOAP、Microsoft.NET Remoting、Java等。其中,Web服务又可以分为“大”Web服务、RESTful Web服务。在本章也演示了如何通过Java技术来实现Web服务。柳伟卫分布式系统开发实战796.7 习题请简述什么是面向服务的架构。实现面向服务的架构技术有哪些?Web服务的分类有哪些?分别有哪些区别?请用你熟悉的技术实现一个Web服务柳伟卫分布式系统开发实战80分布式系统开发实战第7章 面向消息的分布式
33、架构对于实时、高并发、高可用这类接口而言,采用消息通信的方式更为合适。柳伟卫分布式系统开发实战82本章学习面向消息的分布式架构柳伟卫分布式系统开发实战837.1 什么是面向消息的分布式架构消息中间件往往会支持多种语言的客户端(比如Java、C、C+、C#、Ruby等),支持多种协议(HTTP、TCP、SSL、NIO、UDP 等)。消息中间件支持异步通信,从而可以极大提升通信效率。柳伟卫分布式系统开发实战847.1.1 常用术语Topic(主题)按照分类对信息源进行维护。实际应用中一个业务一个topic。Producer(生产者)把发送消息到topic中的进程叫作生产者。Consumer(消费者
34、)把从topic中订阅消息的进程叫作消费者。Broker(服务)集群中的每个服务叫作broker。柳伟卫分布式系统开发实战857.1.2 使用场景异步通信解耦数据缓冲多种消息推送模型强顺序持久化消息支持分布式柳伟卫分布式系统开发实战866.3.5 超越SOAPAJAXXML-RPCREST柳伟卫分布式系统开发实战877.1.3 常用技术RabbitMQ以高效而著称;Apache Kafka能够支持各种强大的消息模式,而被互联网公司广泛采用;Apache ActiveMQ是Java语言编写的,能够支持全面的JMS和J2EE规范;RocketMQ则是来自阿里巴巴的“国货精品”,柳伟卫分布式系统开发
35、实战887.3 消息通信常用模式消息中间件不管是在企业级应用中还是在互联网产品中,其应用的场景非常广泛。以RabbitMQ为例,总结了消息通信常用模式。柳伟卫分布式系统开发实战897.3.1 工作队列工作队列(Work Queues)又叫作任务队列(Task Queues),背后主要的思想是避免立即处理一个资源密集型任务所造成的长时间等待。相反我们可以计划着让任务后续执行。我们将任务封装成消息发送到队列中。一个worker(工作者)进程在后台运行,获取任务并最终执行任务。当运行多个worker(工作者)时,所有的任务将会被它们所共享。柳伟卫分布式系统开发实战907.3.2 发布/订阅定义了如何
36、向一个内容节点发布和订阅消息,内容节点也叫主题(topic),主题是为发布者(publisher)和订阅者(subscribe)提供传输的中介。发布/订阅模型使发布者和订阅者之间不需要直接通信(如RMI)就可保证消息的传送,有效解决了系统间耦合问题。该模式同时也定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。柳伟卫分布式系统开发实战917.3.3 路由路由(Routing)意味在消息订阅中,可选择性地只订阅部分消息柳伟卫分布式系统开发实战927.3.4 主题主题(Topic)类型的exchange拥有比direct类型更多的灵活性。柳伟卫分布式系统开发实战937.3.5 R
37、PC柳伟卫分布式系统开发实战947.4 了解JMS规范JMS(Java Message Service,Java 消息服务)应用程序接口,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的 API,绝大多数面向消息中间件提供商都对JMS提供支持。柳伟卫分布式系统开发实战957.5 实战:基于JMS的消息发送和接收柳伟卫分布式系统开发实战967.6 本章小结出于对实时、高并发、高可用等方面的需求,面向消息的分布式架构得以流行。本章节介绍了消息中的常用概念及常见的消息中间件产品,并且也对大部分市面上流
38、行的中间件产品的工作模式进行了总结,归纳了消息通信常用模式。由于Java语言的流行,我们也介绍了Java领域的消息通信规范JMS,并手把手带大家实现了一个基于JMS的消息发送和接收示例。柳伟卫分布式系统开发实战977.7 习题请简述面向消息的分布式架构有哪些特点。常用的消息中间件产品有哪些?请简述消息通信常用模式。请简述JMS消息风格有哪些?请用你熟悉的消息中间件技术编写一个应用,以实现消息发送和接收。柳伟卫分布式系统开发实战98分布式系统开发实战第8章 REST风格的架构本章学习RESTful Web服务RESTful Web架构风格柳伟卫分布式系统开发实战1008.1 什么是RESTRES
39、T API 不应该依赖于任何通信协议,尽管要成功映射到某个协议可能会依赖于元数据的可用性、所选的方法等。REST API 不应该包含对通信协议的任何改动,除非是补充或确定标准协议中未规定的部分。REST API 应该将大部分的描述工作放在定义用于表示资源和驱动应用状态的媒体类型上,或定义现有标准媒体类型的扩展关系名和(或)支持超文本的标记。REST API 绝不应该定义一个固定的资源名或层次结构(客户端和服务器之间的明显耦合)。REST API 永远也不应该有那些会影响客户端的“类型化”资源。REST API 不应该要求有先验知识(prior knowledge),除了初始URI和适合目标用户
40、的一组标准化的媒体类型(即,它能被任何潜在使用该API的客户端理解)。柳伟卫分布式系统开发实战1018.2 REST设计原则通过URI来标识资源统一接口资源多重表述无状态柳伟卫分布式系统开发实战1028.3 成熟度模型柳伟卫分布式系统开发实战1038.4 REST API管理使用的名词而不是动词GET方法和查询参数不能改变资源状态使用名词复数使用子资源来表达资源间的关系使用HTTP header来序列化格式使用HATEOAS约束提供过滤、排序、字段选择、分页API版本化充分使用HTTP状态码来处理错误柳伟卫分布式系统开发实战1048.5 常用技术JAX-RS规范JerseyApache CXF
41、Spring Web MVC柳伟卫分布式系统开发实战1058.6 实战:基于Java实现REST API柳伟卫分布式系统开发实战1068.7 本章小结本章介绍了REST风格的架构,其中包括REST风格的概念、REST设计原则、REST成熟度模型、REST API管理等方面的内容。同时,针对Java领域,着重讲解了Java实现REST所需要的常用技术,并列举了丰富的案例。柳伟卫分布式系统开发实战1078.8 习题请简述REST风格的架构的特征。设计REST风格的架构应该遵循哪些原则?请简述成熟度模型的级别及其特点。如何才能正确管理REST API?请用你熟悉的编程语言,实现一个REST服务。柳伟
42、卫分布式系统开发实战108分布式系统开发实战第9章 微服务架构本章学习什么是微服务?微服务架构与传统的SOA架构有什么区别?何时应该采用微服务架构?如何构建微服务?柳伟卫分布式系统开发实战1109.1 什么是微服务架构简言之,微服务架构风格就像是把小的服务开发成单一应用的形式,运行在其自己的进程中,并采用轻量级的机制进行通信(一般是HTTP资源API)。这些服务都是围绕业务能力来构建的,通过全自动部署工具来实现独立部署。这些服务可以使用不同的编程语言和不同的数据存储技术,并保持最小化集中管理。柳伟卫分布式系统开发实战1119.2 微服务架构与SOA架构的区别微服务架构(MSA)与面向服务架构(
43、SOA)有相似之处,比如,都是面向服务,通信大多基于HTTP协议。通常传统的SOA意味着大而全的单体架构(Monolithic Architecture)的解决方案。单体架构有时也被称为“单块架构”,这种架构风格会让设计、开发、测试、发布都增加了难度,其中任何细小的代码变更,都将导致整个系统需要重新测试、部署。而微服务架构恰恰把所有服务都打散,设置合理的颗粒度,各个服务间保持低耦合,每个服务都在其完整的生命周期中存活,将互相之间的影响降到最低。SOA需要对整个系统进行规范,而MSA的每个服务都可以有自己的开发语言、开发方式、灵活性大大提高。柳伟卫分布式系统开发实战1129.3 何时采用微服务架
44、构微服务不是“银弹”,何时采用微服务还需考虑企业自身的需求。在开发应用的初期,我们通常不会遇到采用微服务这种方法来试图解决问题的情况。而且,使用这个精细、分布式的架构将会拖慢开发进度。另一个挑战是如何将系统分隔为微服务。柳伟卫分布式系统开发实战1139.4 常用技术 Jetty HTTP Server Tomcat柳伟卫分布式系统开发实战1149.5 实战:基于Spring Boot实现微服务柳伟卫分布式系统开发实战1159.6 微服务与通信HTTP通信消息通信事件驱动的通信柳伟卫分布式系统开发实战1169.7 了解CQRSCQRS(Command Query Responsibility S
45、egregation,命令查询职责分离)旨在从业务上分离命令和查询的行为。逻辑更加清晰,便于对不同部分进行针对性的优化。柳伟卫分布式系统开发实战1179.8 实战:基于CQRS微服务通信柳伟卫分布式系统开发实战1189.9 本章小结本章介绍了微服务架构的概念及构建微服务常用的技术。同时,也介绍了在微服务中常用的三种通信方式:HTTP、消息、事件驱动。在微服务中,我们可以使用CQRS来降低构建微服务通信的复杂度。柳伟卫分布式系统开发实战1199.10 习题请简述微服务架构的概念。请简述实现微服务架构有哪些常用的技术。在微服务架构中,常用的通信方式有几种?各有哪些利弊?请简述CQRS的特征,并用你
46、熟悉的技术,实现一个CQRS的应用。柳伟卫分布式系统开发实战120分布式系统开发实战第10章 Serverless架构去服务器而直接使用服务的架构,我们称之为Serverless架构(无服务器架构)。柳伟卫分布式系统开发实战122本章学习Serverless架构柳伟卫分布式系统开发实战12310.1 什么是Serverless架构Serverless架构用于描述依赖第三方服务(“云端”)实现对逻辑和状态进行管理的应用。这些应用包括典型的富客户端应用,比如单页Web应用或移动应用,它们使用基于云的数据库(比如Parse或Firebase),还有授权服务(比如Auth0、AWS Cognito等)
47、,这类服务以前曾经被描述为BaaS(Mobile)Backend as a Service,(移动)后端即服务)。Serverless架构也可以指这样的一类应用,一部分服务逻辑由应用实现,但是跟传统架构不同在于,它们运行在无状态的容器中,可以由事件触发,短暂、完全地被第三方管理。一种观点认为这是FaaS(Functions as service,函数服务),而AWS Lambda就是一种流行的FaaS实现,当然还有其他。柳伟卫分布式系统开发实战12410.2 Serverless典型的应用场景UI驱动的应用消息驱动的应用柳伟卫分布式系统开发实战12510.3 常见的Serverless框架AW
48、S LambdaGoogle Cloud FunctionsIron.ioIBM OpenWhiskServerless FrameworkAzure WebJobs柳伟卫分布式系统开发实战12610.4 Serverless架构原则根据需要,使用计算服务执行代码编写单一用途的无状态函数设计基于推送的、事件驱动的管道创建更粗实、更强大的前端拥抱第三方服务柳伟卫分布式系统开发实战12710.5 例子:使用AWS平台实现Serverless架构柳伟卫分布式系统开发实战12810.6 本章小结本章介绍了Serverless架构的概念及其应用场景、设计原则。本章也列举了非常多的Serverless框架
49、,并演示了如何通过AWS平台来实现Serverless架构。柳伟卫分布式系统开发实战12910.7 习题请简述Serverless架构的概念。请列举Serverless架构有哪些应用场景。请列举Serverless架构有哪些设计原则。请用你熟悉的Serverless框架,来实现一个Serverless架构的应用。柳伟卫分布式系统开发实战130分布式系统开发实战第11章 Cloud Native架构未来越来越多的企业将会“拥抱云”。特别是对于中小企业及个人开发者而言,以云架构为优先的Cloud Native应用开发模式将会深入人心。Cloud Native能帮助企业快速推出产品,同时节省成本。柳
50、伟卫分布式系统开发实战132本章学习Cloud Native架构柳伟卫分布式系统开发实战13311.1 Cloud Native概述软件需求的发展开发方式的巨变云是大势所趋柳伟卫分布式系统开发实战13411.2 Cloud Native特性以云为基础架构云服务无服务可扩展高可用敏捷云优先柳伟卫分布式系统开发实战13511.3 12-Factor基准代码依赖配置后端服务构建、发布、运行进程端口绑定并发易处理开发环境与线上环境等价日志管理进程柳伟卫分布式系统开发实战13611.4 Cloud Native成功案例分析AmazonNetflix淘宝网柳伟卫分布式系统开发实战13711.5 Cloud