`

NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导

阅读更多

  如果你的应用是通过服务来提供功能,将服务分离出来一层是相当重要的。这篇将介绍服务的设计,和设计服务的过程中可能遇到的问题,以及服务的设计步骤。

  在服务层,你定义服务接口的实现,以及数据契约。一个重要的概念就是服务不应该暴露实现的细节,已经在应用内部使用的业务实体。确保你的业务实体不至于过度影响数据契约。服务层应该提供翻译数据契约和业务实体的组件。

  

  上图中的深黑色框中的就是服务层。服务层通常包括下面的部分:

  服务接口。服务已接口的形式暴露。你可以将服务接口看做是应用暴露给潜在消费者的,关于业务逻辑实现的外观(主要是业务逻辑层的逻辑)。

  消息类型。当通过服务层来交换数据,数据结构被包装为操作支持的消息结构。服务层也包括数据类型和定义在消息中使用的数据类型的契约。

  设计考虑

  在设计服务层的时候,有很多因素要考虑。但是在设计的时候,一定要考虑消息相关的因素。主要是服务使用消息为基础的交互,通过网络,肯定要比在进程中交互慢,服务和它的消费者的交互通常使用异步方式。另外,在服务端和消费者之间传递的消息可能被路由,修改,接收到的和发送的时候不是一个顺序,甚至在没有使用有保证的投递的情况下可能会丢失。可以参考下面的设计原则:

  •   将服务设计为应用范围,而不是组件范围。服务操作应该是粗粒度的,集中于应用操作。服务操作定义的粒度细,可能会导致性能和伸缩性问题。但是,应该确保服务不会返回大量的数据。例如:一个服务操作可能返回大量的统计数据,你应该返回适当量的数据,而不是一次返回大量的数据。确保这个量对于服务和消费者来说都比较合适。
  •   在设计服务和数据契约的时候考虑扩展性,不要假定你已经知道客户端是谁。换句话说,数据契约应该设计为,扩展它们的时候,对于服务的消费者没有影响。
  •   只为服务契约进行设计。服务层应该只提供功能,而不应该暴露实现功能的细节。同样,如果你需要改变服务契约来提供新的功能,新的操作和类型和现有的契约不具有向后兼容性的话,考虑修订你的契约。
  •   从基础架构关注中分离服务层关注。
  •   用标准的元素组成实体。
  •   在设计的时候,考虑非法的请求。不是所有的服务请求都是合法的,对输入的数据进行合法性验证,验证长度、类型,决绝和清除所有的非法输入。
  •   确保服务可以被发现,对于重复的消息可以管理。确保重复的消息不会被处理,或者是重复的处理对于结果没有影响。
  •   确保服务可以管理不是按照顺序接受的消息。如果有可能,即使消息不是按照发送的时候的顺序到达的,一样可以按照正确的顺序处理他们。

  特定的设计问题

  •   用户验证
  •   授权
  •   通信
  •   异常管理
  •   消息通道
  •   消息结构
  •   消息端点
  •   消息保护
  •   消息路由
  •   消息翻译
  •   服务接口
  •   数据验证

  用户验证

  用户验证用来角色服务消费者的身份。为服务层设计一个有效的身份验证策略对于安全和可靠性是非常重要的。验证失败会导致系统受到各种攻击,可以参考下面的设计原则:

  •   为用户验证选合适的技术,在可能的时候使用平台的特征。
  •   考虑为服务代码实现不同的信任设置。
  •   确保在使用基本验证,或者是明文的身份信息的时候使用SSL协议。

  技术考虑

  下面的指导会帮助你选择适当的技术:

  •   在需求简单的时候,考虑使用webservice。
  •   如果你需要高级的功能,例如可靠的会话,事务,消息日志,性能,支持多协议的情况下,考虑使用WCF。
  •   如果你决定使用ASMX,考虑使用WSE。但是,通常情况下,如果你需要WSE的安全,考虑迁移到WCF。
  •   如果你决定使用WCF。如果你需要和非WCF和非Windows的系统进行交互,考虑使用在SOAP的基础上使用HTTP协议。如果是内网应用,考虑使用TCP来提高性能和传输安全。如果支持的WCF客户端在同一台机器上,考虑使用命名管道协议。

  部署考虑

  服务层可以和其它层部署在同一个物理层,也可以单独部署在一个物理层。将服务层和业务逻辑层部署在同一个物理层,来提高性能。可以参考下面的原则:

  •   将服务层和业务逻辑层部署在同一个物理层,来提高性能,除非有安全考虑,需要分开部署。
  •   如果服务和服务的消费者在同一个物理层,考虑使用命名管道和共享内存协议。
  •   如果服务被本地的另外一个应用访问,考虑使用TCP协议来通信。
  •   如果服务是通过互联网来访问的,考虑使用HTTP协议进行通信。

  设计步骤

  一个设计服务层的方法是从服务接口开始,要在服务中暴露的方法和协议。又被叫做协议设计优先。一旦定义好服务接口,下一步就是设计服务实现。可以参考下面的设计原则:

  •   定义数据和消息契约的结构。
  •   定义服务支持的服务契约。
  •   设计业务实体到数据契约之间的翻译。
  •   设计和业务逻辑交互的抽象方法。

  

  未完待续。。。。。。。。。。。。。。。。。。。。。。。

分享到:
评论

相关推荐

    牛【SystemVerilog】路科验证V2学习笔记(全600页)

    "牛【SystemVerilog】路科验证V2学习笔记(全600页)"是一份详尽的学习资料,涵盖了路科验证方法论的第二版(V2)在SystemVerilog中的应用。 笔记内容可能包含了以下几个关键知识点: 1. **基础语法**:...

    【SystemVerilog】路科验证V2学习笔记(全600页).pdf

    SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 ...

    大型金融数据中心网络架构设计V2.pptx

    本资源摘要信息来自一个关于大型金融数据中心网络架构设计的PPT文件,内容涵盖了金融数据中心网络架构设计的演进路线、金融网络应用场景的划分、数据中心应用服务域、双活数据中心网络解决方案、商业银行数据中心...

    【SystemVerilog】路科验证V2学习笔记(全600页)

    SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 ...

    SystemVerilog路科验证V2学习笔记

    SystemVerilog路科验证V2是一个SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注,可快速获取自已需要的知识,喜欢的平台可下载试试! 介绍设计描述和验证语言SystemVerilog的基本...

    一种结合车联网和C-V2X的终端设备系统架构设计.pdf

    结合车联网和C-V2X技术的终端设备系统架构设计,旨在通过高效的通信模块和先进的信息处理能力,推动智能交通系统的发展,实现交通事故的减少和交通效率的提升,最终为驾驶者提供一个更安全、更便捷的驾驶体验。...

    AADL 学习笔记_V2_aadl_

    在“AADL学习笔记.docx”文档中,读者可以期待找到对这些概念的详细解释、实例演示以及如何将它们应用到实际项目中的指导。这份笔记对于正在学习AADL或准备采用AADL进行系统设计的人来说是一份宝贵的资源。

    云平台系统架构设计文档v2.docx

    云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2....

    Application Architecture Guide v2

    《应用架构指南v2》是微软发布的一份深入探讨应用架构的重要文档,旨在为软件开发者、架构师和项目管理者提供一套全面的指导原则和最佳实践。这份指南详细阐述了如何设计、构建和优化应用程序,以确保其高效、可扩展...

    《软件架构设计文档》ADMEMS模板v2.docx

    "软件架构设计文档ADMEMS模板v2" 软件架构设计文档是软件开发过程中的重要文档,旨在描述软件系统的架构设计,包括软件系统的总体架构、组件之间的关系、数据流向、接口定义等。下面是基于ADMEMS模板v2的软件架构...

    《合作式智能运输系统 车用通信系统应用层及应用数据交互标准》(TCSAE 53-2017)全文 中国 V2X 标准.pdf

    TCSAE(中国汽车工程学会)发布的《合作式智能运输系统 车用通信系统应用层及应用数据交互标准》(TCSAE 53-2017)是中国在V2X领域内首项正式标准,标志着国内相关技术的规范化发展。 该标准TCSAE 53-2017旨在提升...

    【SystemVerilog】路科验证V2学习笔记.7z

    本文将深入探讨“路科验证V2”学习笔记中的关键知识点,主要基于提供的"SV部分讲义"。 一、SystemVerilog基础 1. **数据类型**:SystemVerilog提供了丰富的数据类型,包括位(bit)、逻辑(logic)、整型(int)、...

    王晓波-从微服务到Serverless+架构应用与实践V2-32页.pdf

    微服务和Serverless是当前云计算架构设计中非常热门的概念,它们在解决传统单体应用所面临的可伸缩性、运维复杂性和快速迭代等问题上表现出了明显优势。在王晓波所著的《从微服务到Serverless+架构应用与实践》这份...

    云平台系统架构设计文档v2.pdf

    云平台系统架构设计文档v2.pdf云平台系统架构设计文档v2.pdf云平台系统架构设计文档v2.pdf云平台系统架构设计文档v2.pdf云平台系统架构设计文档v2.pdf云平台系统架构设计文档v2.pdf云平台系统架构设计文档v2.pdf云...

    V2X车路协同系统设计方案综述_裴丽珊.pdf

    系统层主要涉及到V2X 车路协同系统的软件架构设计,包括基于LTE-V 和DSRC 的V2X 车路协同系统整体架构设计;应用层主要涉及到V2X 车路协同系统在自动驾驶领域中的应用,包括环境感知、信息交互与协同控制等功能。 ...

    【论文】旷视科技提出的新型轻量架构ShuffleNet V2

    随着移动设备计算能力的不断提升,以及深度学习技术的不断进步,轻量级神经网络架构设计将继续成为研究热点,ShuffleNet V2作为其中的重要里程碑之一,其创新点和实践经验对后续研究与应用都将有着深远的指导意义。

    kinect V2 学习资料

    从内容中可以看出,本文档主要是针对初学者设计,它介绍了如何从零开始搭建一个用于Windows 8.1平台的Kinect V2应用程序。文中提到了如何在Visual Studio 2013中创建一个项目,并且确保了使用的是适合Windows Store...

    微服务架构分享V2.pptx

    微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于 ...

    LSD-TEST430F5438-01_V2_1学习板实验指导书

    通过以上知识点的梳理,可以看出LSD-TEST430F5438-01_V2_1学习板实验指导书覆盖了从硬件资源介绍到软件编程实践的全面内容,旨在帮助学习者深入理解MSP430F5438单片机的各项特性和实际应用,是一份非常实用的学习...

Global site tag (gtag.js) - Google Analytics