一起谈.NET技术,走向ASP.NET架构设计——第六章:服务层设计(中篇)

简介:   Façade设计模式  在SOA客户端的设计中,最常用的模式就是Façade模式了。Façade模式简化了复杂子系统的调用接口,也就说,Façade隐藏了子系统之间的复杂关系,给客户端一个简单的调用接口。

  Façade设计模式

  在SOA客户端的设计中,最常用的模式就是Façade模式了。Façade模式简化了复杂子系统的调用接口,也就说,Façade隐藏了子系统之间的复杂关系,给客户端一个简单的调用接口。 

   Façade模式的好处如下:

1. 它可以使得第三方的类库经过包装之后,通过一个简单的接口就可以调用,如下图所示。

2. 它可以通过抽象等方式来解耦其他系统之间的依赖。

3. 它可以使得各个子系统之间的调用复杂度隐藏,通过一个简单的接口就可以调用,如下图所示

  在上面的图中:

  1. 客户端调用Façade的一个简单的API来执行一个任务。客户端不知道Façade内部是如何实现的,可能只一个任务的执行涉及到很多内部子系统的交互和合作。

  2. SubSystemA和SubSystemB才是真正的任务执行者。

  下面我们就来看看客户端和服务层之间进行通信的一些模式。

  注:把这些模式讲完之后就讲一个如何使用这些模式的例子。

  Document Message和Request-Reponse模式(“文档消息模式”和”请求-响应模式”)

  在体会”文档消息模式”的好处之前,我们先来看看一种通信方式:RPC(Remote Procedure Call 远程过程调用):RPC方式通过暴露很多不同参数的API来实现提供不同服务,如下:

 
   
Customer[] RetrieveCustomers( string country);
Customer[] RetrieveCustomers (
string country, string postalCode);
Customer[] RetrieveCustomers (
string country, string postalCode, string street);

  上面的服务接口允许客户端通过三种方式来获取用户的信息:通过提供不同的参数来实现。这种方式的维护很难的,而且往往把客户端搞糊涂,而且服务器端可能最后向客户端暴露很多名字一样的方法,尽管可以在WCF中改变方法最后显示到客户端的名字,但是方法依然泛滥。

  “文档消息模式”可以让客户端以统一和灵活的方式和服务进行通信。“文档消息模式”把客户端把所有的请求的信息包装成为一个信息体,发送给服务端,而且服务端的接口的定义也非常的简单,如下:

 
   
Customer[] FindBy(CustomerSearchRequest request);

  这个消息体的定义如下:

 
 
public class CustomerSearchRequest
{
public string Country { get ; set ; }
public string PostalCode { get ; set ; }
public string Street { get ; set ; }
}

  有的时候消息体还携带其他额外的信息到服务端,如服务的版本号,验证授权标识等。当然了,这些额外的,相同的信息,我们可以定义一个请求消息的基本,然后让所有的请求消息都集成基类。

  通过使用”文档消息模式”,我们就解决了之前RPC的一些问题,当然服务端对消息要做一些处理的。

   ”文档消息模式”一般和”请求-响应模式”一起使用。如之前的例子,我们是直接返回了Customer的数组,其实有些时候可能不想把业务类的定义暴露出来,而且可能我们还要给客户端返回添加额外的信息,那么我们的服务端的接口定义如下:

 
   
CustomerSearchResponse RetrieveCustomers(CustomerSearchRequest request);

  其实在之前的一些章节中的代码的例子,很多都演示了这样的模式的使用。

  大家可以看看一般”文档消息模式”和”请求-响应模式”的图示:

  Reservation 模式(预约保留模式)

  一般情况下,SOA中服务器那边都是无状态的,但是可能有些时候,我们需要服务器端来保存一个长时间运行的服务的一些状态,在这段时间内,客户端可能向服务器端发送很多的请求都被当成一个事务或者一个工作单元来处理。

  Reservation模式就是来解决这样的问题的:

  1. 我们可以发送一个请求给服务器,从服务端响应中获取一个预约的唯一编号

  2. 客户端余下的请求中都带上这个编号,以便服务器那边可以把这些请求当做一个事务处理来完成。

  通常情况下,这个预约的编号是有一定的期限的,也就说,一段时间之后,这个编号在服务端那边就过期了,主要是为了避免资源的耗费以及一些安全问题。 

  我们还是看看下面的一个在线订票系统中使用“Reservation 模式”的图示:

  在上图中:

  1. 客户端首先调用ReserveTickets服务方法,并且提供一些基本的信息给服务器:订阅2张票等。

  2. 服务端的响应就返回了一个预约的Id和一个过期的时间。

  3. 客户端程序执行一个逻辑。这些逻辑可能会从涉及到把获取customer的详细信息作为订票一个处理过程,或者进行更多的复杂的客户端和服务端的交互。

  4. 最后客户端把服务端需要的信息连同预约的Id一同提交,调用PurchaseTicket方法,然后服务端就返回订票成功的编号。

  可能上面的例子不是很恰当,大家明白其中的意思就行。

  Idempotent模式(等幂模式) 

  在调用服务接口的时候,可能出现:用同样的参数来多次调用同一个服务接口,这种情况,但是可能是我们想要的,但是也可以不是我们想要的。例如,在订单系统中,由于某些原因,导致用户把同一个账单提交了多次(如,不小心点了多次提交按钮),那么系统中的数据就出问题。所以可以采用Idempotent模式来确保相同的参数提交多次,但是服务端只是处理一次。 

  Idempotent模式的基本思想是这样的:每一次的客户端的请求,都被赋予了一个唯一的请求标识(如,这个标识的生成规则可能是通过这个请求的一些参数做一些算法来生成)。在服务端就在一个存储区域检查这个唯一的标识时候已经被处理过了,是否有对应的响应信息,如果有,那么直接把响应信息返回;如果没有,那么处理这个请求。

  如下图所示:

  今天就写到这里,下一篇就开始利用WCF来做一个Demo了。

目录
相关文章
|
2月前
|
存储 机器学习/深度学习 数据库
阿里云服务器X86/ARM/GPU/裸金属/超算五大架构技术特点、场景适配参考
在云计算技术飞速发展的当下,云计算已经渗透到各个行业,成为企业数字化转型的关键驱动力。选择合适的云服务器架构对于提升业务效率、降低成本至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供大家了解和选择参考。
439 61
|
1月前
|
运维 监控 Cloud Native
智联招聘 × 阿里云 ACK One:云端弹性算力颠覆传统 IDC 架构,打造春招技术新范式
在 2025 年春季招聘季的激战中,智联招聘凭借阿里云 ACK One 注册集群与弹性 ACS 算力的深度融合,成功突破传统 IDC 机房的算力瓶颈,以云上弹性架构支撑千万级用户的高并发访问,实现招聘服务效率与稳定性的双重跃升。文章介绍了 ACK One+ACS 的弹性架构如何解决了春招的燃眉之急,让智联招聘的技术团队能够聚焦创新业务开发,欢迎关注。
|
1月前
|
运维 Kubernetes Cloud Native
智联招聘 × 阿里云 ACK One:云端弹性算力颠覆传统 IDC 架构,打造春招技术新范式
在 2025 年春季招聘季的激战中,智联招聘凭借阿里云 ACK One 注册集群与弹性 ACS 算力的深度融合,成功突破传统 IDC 机房的算力瓶颈,以云上弹性架构支撑千万级用户的高并发访问,实现招聘服务效率与稳定性的双重跃升。
|
2月前
|
人工智能 缓存 自然语言处理
Bolt DIY架构揭秘:从模型初始化到响应生成的技术之旅
在使用Bolt DIY或类似的AI对话应用时,你是否曾好奇过从输入提示词到获得回答的整个过程是如何运作的?当你点击发送按钮那一刻,背后究竟发生了什么?本文将揭开这一过程的神秘面纱,深入浅出地解析AI对话系统的核心技术架构。
92 5
|
1月前
|
数据采集 存储 算法
人才招聘系统开发全解析:从技术底层到商业逻辑的完整架构优雅草卓伊凡|小无|果果|阿才
人才招聘系统开发全解析:从技术底层到商业逻辑的完整架构优雅草卓伊凡|小无|果果|阿才
81 2
人才招聘系统开发全解析:从技术底层到商业逻辑的完整架构优雅草卓伊凡|小无|果果|阿才
|
2月前
|
机器学习/深度学习 人工智能 算法
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
该研究系统梳理了大型多模态推理模型(LMRMs)的技术发展,从早期模块化架构到统一的语言中心框架,提出原生LMRMs(N-LMRMs)的前沿概念。论文划分三个技术演进阶段及一个前瞻性范式,深入探讨关键挑战与评估基准,为构建复杂动态环境中的稳健AI系统提供理论框架。未来方向聚焦全模态泛化、深度推理与智能体行为,推动跨模态融合与自主交互能力的发展。
157 13
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
|
2月前
|
存储 人工智能 自然语言处理
为什么混合专家模型(MoE)如此高效:从架构原理到技术实现全解析
本文深入探讨了混合专家(MoE)架构在大型语言模型中的应用与技术原理。MoE通过稀疏激活机制,在保持模型高效性的同时实现参数规模的大幅扩展,已成为LLM发展的关键趋势。文章分析了MoE的核心组件,包括专家网络与路由机制,并对比了密集与稀疏MoE的特点。同时,详细介绍了Mixtral、Grok、DBRX和DeepSeek等代表性模型的技术特点及创新。MoE不仅解决了传统模型扩展成本高昂的问题,还展现出专业化与适应性强的优势,未来有望推动AI工具更广泛的应用。
220 4
为什么混合专家模型(MoE)如此高效:从架构原理到技术实现全解析
|
21天前
|
存储 缓存 运维
微信读书十周年,后台架构的技术演进和实践总结
微信读书经过了多年的发展,赢得了良好的用户口碑,后台系统的服务质量直接影响着用户的体验。团队多年来始终保持着“小而美”的基因,快速试错与迭代成为常态。后台团队在日常业务开发的同时,需要主动寻求更多架构上的突破,提升后台服务的可用性、扩展性,以不断适应业务与团队的变化。
44 0
|
2月前
|
人工智能 负载均衡 API
长连接网关技术专题(十二):大模型时代多模型AI网关的架构设计与实现
随着 AI 技术快速发展,业务对 AI 能力的渴求日益增长。当 AI 服务面对处理大规模请求和高并发流量时,AI 网关从中扮演着至关重要的角色。AI 服务通常涉及大量的计算任务和设备资源占用,此时需要一个 AI 网关负责协调这些请求来确保系统的稳定性与高效性。因此,与传统微服务架构类似,我们将相关 API 管理的功能(如流量控制、用户鉴权、配额计费、负载均衡、API 路由等)集中放置在 AI 网关层,可以降低系统整体复杂度并提升可维护性。 本文要分享的是B站在大模型时代基于多模型AI的网关架构设计和实践总结,希望能带给你启发。
143 4
|
3月前
|
存储 机器学习/深度学习 算法
阿里云X86/ARM/GPU/裸金属/超算等五大服务器架构技术特点、场景适配与选型策略
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别。本文将深入解析这些架构的特点、优势及适用场景,帮助用户更好地根据实际需求做出选择。