目录

  • 1 课程大纲
    • 1.1 教学大纲
    • 1.2 考核方式
    • 1.3 学习建议
    • 1.4 不定期更新的有用的资料
  • 2 第1周:软件设计模式概述(1)
    • 2.1 软件设计模式
    • 2.2 软件体系结构
  • 3 第1周:UML & 面向对象设计原则(2)
    • 3.1 UML类图 & UML时序图
      • 3.1.1 UMLet安装
      • 3.1.2 UMlet基本操作
      • 3.1.3 UML基础知识
      • 3.1.4 UMLet绘制类图
      • 3.1.5 UMLet绘制用例图
      • 3.1.6 UMLet绘制时序图
      • 3.1.7 UML 类图实例1
      • 3.1.8 UML 类图实例2
    • 3.2 面向对象设计原则
      • 3.2.1 面向对象设计原则综述
      • 3.2.2 单一职责原则
      • 3.2.3 开闭原则
      • 3.2.4 里氏代换原则
      • 3.2.5 接口隔离原则
      • 3.2.6 依赖倒转原则
      • 3.2.7 迪米特法则
      • 3.2.8 合成复用原则
      • 3.2.9 面向对象设计原则总结
    • 3.3 UML类图实验
    • 3.4 面向对象设计原则实验
      • 3.4.1 单一职责原则实验
      • 3.4.2 开闭原则实验
      • 3.4.3 里氏替换原则实验
      • 3.4.4 接口隔离原则实验
      • 3.4.5 依赖倒置原则实验
      • 3.4.6 迪米特法则实验
      • 3.4.7 合成复用原则实验
  • 4 创建型软件设计模式1
    • 4.1 简单工厂方法
      • 4.1.1 简单工厂讲解小视频
    • 4.2 工厂方法模式
      • 4.2.1 工厂方法模式讲解小视频
    • 4.3 抽象工厂模式
      • 4.3.1 抽象工厂模式讲解小视频
    • 4.4 工厂模式在Java源代码中的应用
    • 4.5 工厂模式实例讲解
    • 4.6 工厂模式实验1
    • 4.7 工厂模式实验2
  • 5 创建型软件设计模式2
    • 5.1 生成器模式
      • 5.1.1 生成器模式讲解小视频
    • 5.2 单例模式
      • 5.2.1 单例模式讲解小视频
    • 5.3 生成器 & 单例模式实例讲解
    • 5.4 生成器 & 单例模式实例讲解
    • 5.5 生成器 & 单例模式实验1
    • 5.6 生成器 & 单例模式实验2
    • 5.7 原型模式讲解小视频
  • 6 结构型软件设计模式1
    • 6.1 组合模式
      • 6.1.1 组合模式讲解小视频
    • 6.2 适配器模式
      • 6.2.1 适配器模式讲解小视频
    • 6.3 组合 & 适配器模式实例讲解
    • 6.4 组合 & 适配器模式在Java源代码中的应用
    • 6.5 组合 & 适配器模式实验1
    • 6.6 组合 & 适配器模式实验2
  • 7 结构型软件设计模式2
    • 7.1 外观模式
      • 7.1.1 外观模式讲解小视频
    • 7.2 桥接模式
      • 7.2.1 桥接模式讲解小视频
    • 7.3 外观 & 桥接模式实例讲解
    • 7.4 外观 & 桥接模式在Java源代码中的应用
    • 7.5 外观 & 桥接模式实验1
    • 7.6 外观 & 桥接模式实验2
  • 8 行为型软件设计模式1
    • 8.1 迭代器模式
      • 8.1.1 迭代器模式讲解小视频
    • 8.2 访问者模式
      • 8.2.1 访问者模式讲解小视频
    • 8.3 迭代器 & 访问模式实例讲解
    • 8.4 迭代器 & 访问模式在Java源代码中的应用
    • 8.5 迭代器 & 访问模式实验1
    • 8.6 迭代器 & 访问模式实验2
  • 9 行为型软件设计模式2
    • 9.1 命令模式
      • 9.1.1 命令模式讲解小视频
    • 9.2 中介者模式
      • 9.2.1 中介者模式讲解小视频
    • 9.3 命令 & 中介者模式实例讲解
    • 9.4 命令 & 中介者模式在Java源代码中的应用
    • 9.5 命令 & 中介者模式实验1
    • 9.6 命令 & 中介者模式实验2
  • 10 行为型软件设计模式3
    • 10.1 策略模式
      • 10.1.1 策略模式讲解小视频
    • 10.2 状态模式
      • 10.2.1 状态模式讲解小视频
    • 10.3 策略模式 & 状态模式实例讲解
    • 10.4 策略模式 & 状态模式在Java源代码中的应用
    • 10.5 策略模式 & 状态模式实验1
    • 10.6 策略模式 & 状态模式实验2
    • 10.7 观察者模式实验
  • 11 软件体系结构概述
    • 11.1 软件体系结构概念和意义
    • 11.2 软件质量属性
    • 11.3 软件体系结构风格
    • 11.4 软件体系结构概念
    • 11.5 Spring Boot的Visual Studio Code环境配置
    • 11.6 基于构件的软件体系结构实验
  • 12 经典软件体系结构1
    • 12.1 调用-返回风格软件体系结构
    • 12.2 数据流风格软件体系结构
    • 12.3 Spring Batch简介
    • 12.4 Spring Batch实验
    • 12.5 Spring Batch实验进阶
  • 13 经典软件体系结构2
    • 13.1 事件系统软件体系结构
    • 13.2 观察者模式
    • 13.3 Spring Event 实验
    • 13.4 Guava 事件系统实验
    • 13.5 分布式事件系统实验
  • 14 经典软件体系结构3
    • 14.1 层次软件体系结构
    • 14.2 C# .NET中的三层架构
  • 15 MVC软件体系结构
    • 15.1 MVC软件体系结构
  • 16 客户端-服务器软件体系结构
    • 16.1 C/S软件体系结构
    • 16.2 B/S软件体系结构
    • 16.3 基于网络的MVC软件体系结构
    • 16.4 基于 Servlet 的B/S软件体系结构实验
    • 16.5 Thymeleaf实验
    • 16.6 Spring MVC 创建网络应用程序示例实验
    • 16.7 Spring Boot 测试实验
    • 16.8 Spring Petclinic实验
  • 17 基于网络的软件体系结构2
    • 17.1 P2P软件体系结构
    • 17.2 网格计算软件体系结构
    • 17.3 REST软件体系结构
    • 17.4 REST软件体系结构实验
  • 18 现代软件体系结构
    • 18.1 SOA软件体系结构
    • 18.2 云计算软件体系结构
    • 18.3 微服务软件体系结构
    • 18.4 响应式软件体系结构
    • 18.5 无服务软件体系结构
    • 18.6 微服务软件体系结构实验
    • 18.7 响应式软件体系结构实验
P2P软件体系结构

对等网络(Peer-to-Peer,P2P)体系结构,是一个简单的计算机网络体系结构。P2P体系结构取消了客户端-服务器体系结构中服务器的中心地位,各个系统内计算机可以通过交换直接共享计算机资源和服务。在这种体系结构中,可以有效降低以往网路传输中的节点,以降低资料遗失的风险。计算机可对其他计算机的要求进行响应,请求响应范围和方式都根据具体应用程序不同而有不同的选择。

在P2P中,每台计算机都可以根据需要既充当服务器又充当客户端,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。。 任务在节点之间平均分配, 网络中连接的每个节点共享相同的工作负载。 为了使网络停止工作,所有节点都需要单独停止工作。 这是因为每个节点都是独立工作的。 尽管 P2P 具有广泛的应用,但其最重要的应用是能够有效地分发内容。 促进内容按需交付的事物,如软件发布和分发、流媒体和多播流的对等广播,以及内容交付网络,都属于这一范畴。

P2P节点能遍布整个互联网,也给包括开发者在内的任何人、组织或政府带来监控难题。P2P在网络隐私要求高和文件共享领域中,得到了广泛的应用。使用一般型P2P技术的网络系统有比特币、Gnutella或自由网等。另外,P2P技术也被使用在类似VoIP等实时媒体业务的数据通信中。有些网络(如Napster、OpenNAP、IRC @find)包括搜索的一些功能,也使用客户端-服务器结构,而使用P2P结构来实现另外一些功能。这种网络设计模型不同于客户端-服务器模型,在客户端-服务器模型中通信通常来往于一个中央服务器。

P2P网络体系结构的发展历史

P2P软件体系结构体现了网际网路技术的关键概念,这一概念被描述在1969年4月7日第一份RFC文档“RFC 1,主机软件”中。在不用中心索引服务器结构交换多媒体文件的大趋势下,这个概念已经得到广泛普及。 

在 P2P 出现之前,1979 年出现了一种分布式的互联网交流系统——USENET。Usenet包含众多新闻组,它是新闻组(异于传统,新闻指交流、信息)及其消息的网络集合。该网络使用户能够阅读和发布消息。 与我们今天使用的论坛不同,它没有中央服务器。 它用于将新消息复制到节点的所有服务器。其结构示意图如下图所示:

服务器上的蓝色、绿色和红色点代表它们储存的新闻组。服务器之间的箭头表示新闻组之间互相交换信息。客户端和服务器之间的箭头表示用户订阅了某个组,并下载或提交文章。

在此基础上,20世纪80年代初期出现了以文件共享为目的的P2P网络,如下图所示:

  • 20 世纪 80 年代初期,个人电脑问世和普及之后,P2P 网络首次被使用

  • 1988 年 8 月,出现了第一个为共享文本和聊天而建立的 P2P 网络——互联网中继聊天(internet relay chat)。

  • 1999年6月,一款文件共享P2P软件问世——Napster, 它最初用于共享音频文件。 由于版权原因,该软件已不再被使用。 但是基于P2P的网络共享开始流行。

  • 2000 年 6 月,Gnutella 成为第一个去中心化的 P2P 文件共享网络,允许用户通过指定的文件夹访问其他用户计算机上的文件。

P2P软件体系结构的类型

  • 纯对等网络——也称为完全对等网络。 由于没有中央专用服务器,该网络中的所有对等点都扮演着完全相同的角色。 比如:GNUTELLS 协议。

  • 非结构化对等网络——也称特殊型的P2P。这种类型的 P2P 有一个中心服务器保存节点的信息并对请求这些信息的要求做出响应。节点负责发布这些信息(因为中心服务器并不保存文件),让中心服务器知道它们想共享什么文件,让需要它的节点下载其可共享的资源。路由终端使用地址,通过被一组索引引用来获取绝对地址。非结构化对等网络提供了一种更简单的方式来连接网络的不同设备,但由于缺乏结构,用户可能很难寻找稀有内容,尽管流失率(没有用户加入和 释放网络)更高。比如:原始的Napster。

  • 混合对等网络——这些网络通常是 P2P,但在存在集中式强大设备的情况下,其行为类似于客户端-服务器网络。它结合了 P2P 网络和客户端-服务器架构的特点。 这种网络的一个例子是使用中央服务器找到一个节点。

P2P网络应用体系结构特点

P2P网络的一个重要的目标就是让所有的客户端都能提供资源,包括带宽,存储空间和计算能力。因此,当有节点加入且对系统请求增多,整个系统的容量也增大。这是具有一组固定服务器的Client-Server结构不能实现的,因为在上述这种结构中,客户端的增加意味着所有用户更慢的数据传输。

P2P网络的分布特性通过在多节点上复制数据,也增加了防故障的健壮性,并且在一般型P2P网络中,节点不需要依靠一个中心索引服务器来发现数据。在后一种情况下,系统也不会出现单点崩溃。

当用P2P来描述Napster 网络时,对等协议被认为是重要的,但是,实际中,Napster 网络获取的成就是对等节点(就像网络的末枝)联合一个中心索引来实现。这可以使它能快速并且高效的定位可用的内容。对等协议只是一种通用的方法来实现这一点。具体而言,P2P网络具有以下的特点:

  • 分布式架构:P2P网络没有中央服务器,所有的节点都是平等的,可以相互通信和传输数据,这种分布式的架构可以让P2P网络更加稳定、安全和灵活。

  • 自组织性:P2P网络是自组织的,节点之间通过协议集合来相互协作,自动发现并连接其他节点,从而形成一个庞大而复杂的网络。

  • 可扩展性:P2P网络具有良好的可扩展性,当网络中新增加节点时,不需要对整个网络做出任何调整,只需要让新节点加入到网络中就可以了。

  • 高效性:P2P网络可以使数据传输更为高效,因为节点之间可以直接通信,无需经过中央服务器,同时也能降低网络拥堵和带宽限制。

  • 安全性:P2P网络在传输数据时,数据被分成众多小块,并分散在不同的节点上,攻击者很难破坏全部的数据,因此P2P网络更具有抗攻击性和安全性。

P2P软件体系结构存在以下缺点:

  • 架构较为复杂,除了要有开发服务端,还要有专用的客户端。

  • 用在大规模的网路,资源分享紊乱,管理较难,安全性较低。

总之,P2P网络应用体系结构是一种先进的分布式技术架构,具有分布式、自组织、可扩展、高效和安全等特点,极大地推动了网络通信的发展。

P2P网络应用

点对点技术有许多应用。共享包含各种格式音频,视频,数据等的文件是非常普遍的,即时数据(如IP电话通信,Anychat音视频开发软件)也可以使用P2P技术来传送。

有些网络和通信渠道,像Napster、OpenNAP和IRC@find,一方面使用了主从式架构结构来处理一些任务(如搜索功能),另一方面又同时使用P2P结构来处理其他任务。而有些网络,如Gnutella和Freenet,使用P2P结构来处理所有的任务,有时被认为是真正的P2P网路。尽管Gnutella也使用了目录服务器来方便节点得到其它节点的网络地址。

点对点技术亦常应用于加密货币上。比特币的白皮书标题正是“一种点对点式的电子现金交易系统”。点对点网络中每个节点的地位相当,没有任何节点属于中央控制地位,也没有任何节点扮演交易中介的角色;网络中每个节点既是服务端,亦是客户端;节点可以选择随时加入,随时退出;节点可以选择运行所有的功能,也可以选择运行部分的功能;节点越多,整个系统的运算能力越强,数据安全性越高,抗破坏能力越强。 比特币便是采用了这种P2P网络协议,其后的许多加密货币,如以太坊﹑EOS (页面存档备份,存于互联网档案馆)等仍然继续采用。

技术角度严格来讲,对等网络双方严格对等并同等地提供和使用数据 ,没有服务器和客户端的区别。但这样的一般型P2P应用和网络少之又少,大部分称为P2P的网络和应用实际上依赖或包含像DNS这样的一些非对等单元。同时应用中实际也使用了多个协议,使节点可以同时或分时成为客户端、服务器、和对等节点;譬如Usenet(1979年)和FidoNet(1984年)这样已经使用多年完全的分布式对等网络。

很多P2P系统使用更强的对等点(称为超级对等点(Super Node))作为服务器,那些客户节点以星状方式连接到一个超级对等点上。

在1990年代末期,早在即时通讯流行之前,为了促进对等网络应用的发展,昇阳(SUN)公司在Java技术中增加累一些类,以便开发者能开发不受控于中心服务器的的实时聊天applet及应用。这个工作现在由JXTA工程来继续。

P2P系统和应用已经吸引了计算机科学研究的大量关注,在这一领域有包括Chord计划,ARPANET,the PAST storage utility,P-Grid(一个自发组织的新兴覆盖性网络),和CoopNet内容分发系统在内的一系列卓越的研究计划。