点对点风格软件架构模式

在这种模式中,单个组件被称为对等点。对等点可以作为客户端,从其他对等点请求服务,也作为服务器,为其他对等点提供服务。对等点可以充当客户端或服务器或两者的角色,并且可以随时间动态地更改其角色。

使用场景:

像Gnutella和G2这样的文件共享网络

多媒体协议,如P2PTV和PDTP

像Spotify这样的专有多媒体应用程序

在没有中心服务器的情况下,我们是如何进行文件共享的呢?比如,室友,有一个10GB的游戏,你想要过来。你会通过怎样的方法呢?

1.用U盘 2.上传网盘在再下载 3.区域网文件共享

很容易比较出来,区域网文件共享的方法是最便捷和高效率的。

以前在贴吧也看到过一个例子,学校每月限网10GB,有的同学用迅雷下载了一部电影以后,流量不知不觉得就用完了。其实这是因为他在下载完电影后没有及时关掉迅雷,当别人下载同一部电影后,他的电脑被当做服务器,在向别人上传电影数据,不断地消耗了流量。这便是是典型的点对点风格软件架构模式。

点对点风格四个子例:

 

1、基于事件的集成风格也被称作隐式调用(implicit invocation)风格或者事件系统(event system)风格,它通过除去了解连接器接口的标识(identity on the connector interface)的必要性,降低了组件之间的耦合。此风格不是直接调用另一个组件,而是一个组件能够发布(或广播)一个或者多个事件。在事件发布后,系统中的其他组件能够注册对于某些事件类型的兴趣,由系统本身来调用所有已注册的组件。

2、C2 架构风格[128]直接支持大粒度的重用,并且通过加强底层独立性(substrate independence),支持系统组件的灵活组合。它通过将基于事件的集成风格和分层-客户-服务器风格相结合来达到这些目标。异步通知消息向下传送,异步请求消息向上传送,这是组件之间通信的唯一方式。这加强了对高层依赖的松散耦合(服务请求可以被忽略),并且与底层实现了零耦合(不知道使用了通知),从而改善了对于整个系统的控制,又没有丧失EBI 的大多数优点。

3、分布式对象风格将系统组织为结对进行交互的组件的集合。一个对象是一个实体,这个实体封装了一些私有的状态信息或数据、操作数据的一组相关的操作或过程、以及一个可能存在的控制线程,这种封装使得它们能够被整体地看作单个的单元。通常,一个对象的状态对于所有其他对象而言,是完全隐藏和受到保护的。检查或修改对象状态的唯一方法是对该对象的一个公共的、可访问的操作发起请求或调用。这样就为每个对象创建了一个良好定义的接口,在对象的操作实现和它的状态信息保持私有的同时,公开操作对象的规格,这样做改善了可进化性。

4、为了降低对象标识的影响,现代分布式对象系统通常使用一种或更多种中间风格(intermediary styles)来辅助通信。这包括基于事件的集成风格和被代理的客户/服务器(brokered client/server)风格。被代理的分布式对象风格引入了名称解析组件——其目的是将该组件接收到的客户端请求中一个通用的服务名称解析为一个能够满足该请求的对象的特定名称,并使用这个特定名称来答复客户端。尽管它改善了可重用性和可进化性,但额外的间接层要求额外的网络交互,这降低了效率和用户可觉察的性能。

在这里介绍一下C2风格,C2体系结构风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:

  (1)系统中的构件和连接件都有一个顶部和一个底部;

  (2)构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;

  (3)一个连接件可以和任意数目的其它构件和连接件连接;

  (4)当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。

C2风格的体系结构

C2风格是最常用的一种软件体系结构风格。从C2风格的组织规则和结构图中可以得知C2风格具有以下特点:

  (1)系统中的构件可实现应用需求,并能将任意复杂度的功能封装在一起;

  (2)所有构件之间的通讯是通过以连接件为中介的异步消息交换机制来实现的;

  (3)构件相对独立,构件之间依赖性较少。系统中不存在某些构件将在同一地址空间内执行,或某些构件共享特定控制线程之类的相关性假设

原文地址:https://www.cnblogs.com/liulitianxia/p/9071685.html