[解读REST] 4.基于网络应用的架构风格

  • 时间:
  • 浏览:0

RDA是CS的五种变体,它把应用情況分布在客户端和服务端上。客户端发送原来标准的数据查询请求给服务端,服务端分配原来工作空间并执行例如于于查询,这由于会产生原来巨大的结果集。客户端有利于 在在结果集上进行进一步操作。这就时需客户端了解服务端的数据内外部,以便构造依赖该内外部的查询。例如于于风格有利于 产生如下好多个的架构属性:

具体的例子:比如linux shell,asp.net core中的middleware和filter等。

下面好多个小节来评估每五种架构风格,以及它们后要 产生那先 架构属性。(+)表示增强改善,(-)表示消弱,(±)表示取决于具体的场景。

具体的例子:DNS缓存,CDN等。

REV风格来源于CS+VM风格,客户端组件时需知道怎么执行原来服务,而且缺少执行此服务所时需的资源,而那先 资源都存在原来服务端站点上。而且,客户端组件把怎么执行服务的代码发送给服务端的原来服务端组件,由它来执行代码,而且把结果返回给客户端。例如于于REV会要求被执行的代码是在原来受保护的环境中,使其不让影响到例如于于的客户端。例如于于约束在CS+VM的基础可不可以够 产生如下的架构属性:

在CSS的基础上,增加缓存组件。缓存在客户端和服务器直接进行周旋:它有利于 复用早先的请求,用来响应上方的相同请求,从而防止向原始服务器发送请求(得到的响应是一样的)。增加的例如于于组件有利于 在CSS的基础上进一步改善以下的架构属性:

DO是CS和CS的组合。在单独的CS的风格总,客户端和服务端是相互独立的,人及只负责此人 的次责。DO则是使原来组件既是客户端也是服务端。也而且说它既对外提供服务,一块儿也是服务的消费方。DO组件的内内外部是完整被隐藏和保护起来的,操作它的唯一最好的法子是通过它公开的接口进行访问。原来DO为了要和另外原来DO交互,则时需知道另外原来DO的标识信息,当原来DO的标识信息存在变化的之前 ,则时需要修改所有显示调用它的DO。而且时需要又例如于于控制器对象来负责管理维护系统的情況。

具体的例子:大多数桌面(由于APP)应用。

而且以上的评估是有例如于于局限性的,这里的评估是有点痛 为分布式超媒体系统的需求量身定做的。比如通信的内容是细粒度的控制信息,这样PF风格的什么都有优点就不复存在了;而且由于用户交互的通信由于是时需的,PF则根本就不适用。同样的,由于客户端这样对请求进行缓存,这样分层+缓存的风格则只会增加延迟,而不让带来任何好处。原来的大问題时需针对每五种类型的通信大问題进行单独对比。下面的表格总结一下上方介绍到的所有的架构风格。

UPF在PF的基础上,增加了原来所有过滤器都时需具有相同接口的约束。例如于于约束会在PF的基础上,产生如下的架构属性:

具体的例子:TCP/IP协议,分层的网络协议栈。

具体的例子:DNS系统。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意时需保留此段声明,且在文章页面明显位置给出原文连接,而且保留追究法律责任的权利。

具体的例子:redis有利于 执行lua脚本。

 MA风格来源于REV+COD。在MA中,原来完整的计算组件,它的情況,代码、执行代码所需的数据都被一块儿移动到了远程站点。它是已REV和COM五种最好的法子一块儿工作的。

具体的例子:发布/订阅的消息系统。

LCS是在LS和CS的结合体。有利于 理解为在CS的基础上增加了代理组件和网关组件,对于客户端而言,代理组件是原来共享服务器,它接受请求并把它转发给服务器。网关组件在客户端组件和代理组件看来就像是原来正常的服务器,而且网关组件内内外部而且将它转发给了内内外部的例如于于服务器。在CS和LS的基础上,LCS改善了如下的架构属性:

架构风格与基于网络的软件采集-导读:http://www.infoq.com/cn/articles/doctor-fielding-article-review

在PF风格中,每个组件(过滤器)会从输入端读取数据,并在输出端输出数据(亦有利于 增量防止,而并不等到完整防止完再交给下原来过滤器)。这里的架构约束是原来过滤器时需完整独立于例如于于的过滤器(零耦合)。多个过滤器原来头尾相连组合起来,就像是原来管道,什么都有称之为管道和过滤器风格(简称PF)。例如于于风格有利于 产生如下好多个的架构属性:

架构风格与基于网络的软件采集:http://www.infoq.com/cn/minibooks/web-based-apps-archit-design

Architectural Styles and the Design of Network-based Software Architectures:https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

通知是对于组件中的情況变化的公告,C2并不让对通知中应该蕴含那先 内容加以限制。连接器的首要职责是消息的路由和广播,其次是消息的过滤。引入对于消息的分层过滤,有利于 防止EBI的可伸缩性的大问題,一块儿改善可进化性和可重用性。

C2是EBI和LCS的组合形成的风格。C2在EBI的基础上,支持大粒度的重用,并通过加强基础层独立性来支持系统组件的灵活组合。异步通知消息向下传递,异步请求消息向上传递,这是组件之间通信的唯一最好的法子。例如于于约束加强了对高层依赖的松耦合(服务请求有利于 被忽略),而且于底层实现了零耦合(不让知道系统使用了通知),原来既改善了对整个系统的控制,又这样丧失EBI的大多数优点。

合并了LCS和C$SS五种风格,其产生的架构属性为LCS和C$SS的组合(而且不让把重复的CS结算两次)。

具体的例子:Telnet,SSH。

为了降低DO中受到对象标识信息的影响,通常会使用五种由于多种架构风格来辅助通信,比如EBI和被代理的CS风格。原来的目的在于引入原来名称解析组件,用来把原来通用的服务的名称解析为原来有利于满足该请求的对象的特定名称,并使用例如于于特定名称的对象来防止请求。尽管它改善了可重用性和可进化性,而且额外的间接层会产生一定的网络开销,从而降低用户感知的性能。具体的例子:CORBA,ODP。

把COD再加到签名所说的LC$SS风格上,这之前 把代码被看作是另五种形式的数据元素,而且并不让妨碍LC$SS的优点,一块儿也会叠加COD的优点。

缓存风格是克隆好友仓库风格的原来变种:克隆好友个别请求的结果,以便被上方的请求复用那先 结果。例如于于风格有利于 产生如下好多个的架构属性:

以上的每五种架构风格有的是组件之间推崇五种特定的交互类型。当组件跨域广域网的分布的之前 ,应用的有利于 用就会取决于对于网络的使用由于误用。通过对已架构风格对于架构属性的影响来刻画架构,有利于取舍出更适合此类应用的采集。

具体的例子:浏览器中的JS。

具体的例子:SQL。

做了4篇博客的前期准备工作,下一篇就之前 之前 刚开始介绍那先 是REST了。以上 如有错误之处,欢迎指正!

 具体的例子:shadowsocks等。

衔接上文[解读REST] 3.基于网络应用的架构,上文介绍了一组自洽的术语来描述和解释软件架构;怎么利用架构属性评估原来架构风格;以及对于基于网络的应用架构来说,那先 架构属性是值得我们我们我们我们儿重点关注评估的。本篇在以上的基础上,列举一下例如于于常见的(REST除外)的适用于基于网络应用的架构风格,并使用对比架构属性的最好的法子对其进行评估。

按照层次来组织,每一层都使用下层的服务,而且为其上层提供服务。层内内外部的细节对于相邻的层而已是完整被隐藏起来的。例如于于风格有利于 产生如下好多个的架构属性:

通过利用多个多线程池池 来提供相同的服务,即为RR风格。那先 多个分散的服务对于客户端来说,就好像是只能原来集中的服务。例如于于风格有利于 产生如下好多个的架构属性:

具体的例子:比如GIT(分布式的版本管理系统本地有着完整的仓库副本),CVS(集中式的版本管理系统本地也是有完整的仓库副本的,而且写操作是时需网络的)等。

具体的例子:比如linux的标准输入输出流,asp.net core中的middleware也否有(这样跨越网络)具有相同接口的约束的UPF。

理解本真的REST:http://www.infoq.com/cn/articles/understanding-restful-style/

采集的目的是为了满足由于超出应用的需求,而有的是为了创创造创造发明五种特殊的交互拓扑由于五种特殊的设计最好的法子。当设计原来系统时所取舍的架构风格,时需与那先 需求保持一致,而有的是相抵触。而且应该最好的法子那先 架构风格所产生的架构属性来对架构风格进行评估。架构属性是相对的,由于再加以原来架构约束,增强了某原来架构属性,也由于会消弱另外原来架构属性;此外,原来架构属性是被增强了还是被消弱了,也会受到系统实现的的影响。

基于事件集成的风格也被成为隐式调用风格由于事件系统风格。通过消除了解连接器接口的标识信息的必要性,它有利于 降低组件之间的耦合。此架构风格有的是之间调用另外原来组件,而且通过原来组件发布由于广播原来或多个事件。而且由系统负责调用例如于于注册了对那先 事件感兴趣的组件。原来的系统一般后要 有原来事件总线,所有的组件都通过例如于于总线监听它们人及感兴趣的事件。例如于于风格有利于 产生如下好多个的架构属性:

RS是CS的五种变体,它试图使客户端组件的简化性最小化由于使它们的可重用性最大化。每个客户在服务器上启动原来会话,而且调用服务器的一系列服务,最后退出会话。应用情況被保存在服务器上。例如于于风格有利于 产生如下好多个的架构属性:

COM风格来源于CS+VM风格(而且又不同于REV),客户端组件知道怎么访问一组资源,而且我而且知道怎么防止它们。客户端时需向服务端请求一份有利于 防止这次责资源的代码,这次责代码在客户端本地执行。例如于于约束在CS+VM的基础可不可以够 产生如下的架构属性:

具体的例子:RPC等。

所有的移动代码风格的基础有的是VM(或解释器)风格。VM风格五种并有的是基于网络的风格,而且它通常在REV和COD风格中于原来组件结合在一块儿使用。代码在原来满足了安全和可靠性的受控的环境中执行,VM通常被用作脚本语言的引擎,来执行特定的任务。例如于于风格有利于 产生如下好多个的架构属性:

具体的例子:SUN的NFS。

服务器组件提供了一组服务,并监听对那先 服务的请求;客户端组件通过原来连接器把请求发送给服务器。服务器有利于 拒绝例如于于请求,有利于够 执行例如于于请求,并把响应发送给客户端。服务端通常来说是原来永不终止的多线程池池 ,通常是为多个客户端提供服务的。例如于于约束身旁的原则是分离关注点(而且并不关心会话情況是在服务端还是客户端),例如于于风格有利于 产生如下好多个的架构属性:

在CS的基础上,增加原来约束:服务端组件上不允许有会话情況。从客户端发给的服务器的每个请求都时需蕴含理解请求所时需的所有信息,即只能在服务端上保存请求上下文信息(比如上原来请求的信息),会话情況应该都保存的客户端。例如于于约束会在CS的基础上,产生如下的架构属性: