系统架构师考试学习笔记第四篇——架构设计实践知识(18)面向服务架构设计理论与实践

本章考点:

        第18课时主要学习面向服务架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。

        本课时知识架构如图18.1所示。

一、SOA的相关概念

(1)SOA的定义。从软件的基本原理定义,可以认为SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种
这样的系统中的服务可以一种统一和通用的方式进行交互。

(2)业务流程与业务流程执行语言(Business Process Execution Language,BPEL)。业务流程是指为了实现某种业务目的行为所进行的流程或一系列动作。使用BPEL,用户可以通过组合、编排和协调 Web 服务自上而下地实现面向服务的体系结构。BPEL目前用于整合现有的 Web
Services,将现有的Web Services按照要求的业务流程整理成为一个新的Web Services,在这个基础上,形成一个从外界看来和单个Service一样的Service。

二、SOA的发展历史

1.发展过程

(1)萌芽阶段:这种广泛使用的XML,允许组织定义文档的元数据,实现企业内部和企业之间的电子数据交换,规定了服务之间以及服务内部数据交换的格式和结构。
(2)标准化阶段:国际标准和规范-简单对象访问协议(Simple Object Access Protocol,SOAP)、Web服务描述语言(Web Services Description Language,WSDL)及通用服务发现和集成协议(Universal Description, Discovery and Integration, UDDI)。
(3)成熟应用阶段:3个重量级规范-SCA、SDO、WS-Policy.SCA和SDO构成了SOA编程模型的基础,而WS-Policy建立了SOA组件之间安全交互的规范。

2.SOA与微服务的区别

(1)微服务相比于SOA更加精细,微服务更多地以独立的进程的方式存在,互相之间并无影响。SOA架构与微服务架构的对比如图18.2所示。
(2)微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、平台限制。
(3)微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合。

三、SOA的参考架构

IBM的 Websphere 业务集成参考架构是典型的以服务为中心的企业集成架构,它可划分为6大类:
(1)业务逻辑服务(Business Logic Service)。用于实现业务逻辑的服务和执行业务逻辑的能力,其中包括业务应用服务(Business Application Service)、业务伙伴服务(Partner Service)以及应用和信息资产(Application and Information Asset)。
(2)控制服务(Control Service)。包括实现人(People)、流程(Process)和信息(Information)集成的服务,以及执行这些集成逻辑的能力。
(3)连接服务(Connectivity Service)。通过提供企业服务总线,实现分布在各种架构元素中服务间的连接性。
(4)业务创新和优化服务(Business Innovation and Optimization Service)。用于监控业务系统运行时服务的业务性能,并通过及时了解到的业务性能和变化,采取措施适应变化的市场。
(5)开发服务(Development Service)。贯彻整个软件开发生命周期的开发平台,从需求分析到建模、设计、开发、测试和维护等全面的工具支持。

(6)IT服务管理(IT Service Management).支持业务系统运行的各种基础设施管理能力或服务,如安全服务、目录服务、系统管理和资源虚拟化。

四、SOA主要协议和规范

        Web 服务最基本的协议包括UDDI、WSDL、SOAP,通过它们可以提供直接而又简单的WebService支持,如图18.3所示。

(1)UDDI 协议:统一描述、发现和集成协议。包含了服务描述与发现的标准规范,它使得商业实体能够彼此发现;定义它们怎样在Internet 上互相作用,并在一个全球的注册体系架构中共享信息。
(2)Web服务描述语言(Web Services Description Language,WSDL):WSDL是一个用来描述Web服务和说明如何与Web服务通信的XML语言。描述了Web服务的3个基本属性。

        1)服务做些什么-服务所提供的操作(方法)。
        2)如何访问服务-和服务交互的数据格式以及必要协议。
        3)服务位于何处-协议相关的地址,如URL。

(3)SOAP 协议:SOAP是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。
(4)REST规范:为了让不同的软件或者应用程序在任何网络环境下都可以进行信息的互相传递。微服务对外就是以REST API的形式暴露给调用者。RESTful即REST形式的,是对遵循REST设计思想同时满足设计约束的一类架构设计或应用程序的统称,这一类都可称为RESTful,可以理解为资源表述性状态转移:

        1)资源:将互联网中一切暴露给客户端的事物都可以看作是一种资源。
        2)表述:REST中用表述描述资源在Web中某一个时间的状态。
        3)状态转移:分为两种,应用状态-对某个时间内用户请求会话相关信息的快照,保存在客户端。资源状态-在服务端保存,是对某个时间资源请求表述的快照。
        4)超链接:通过在页面中嵌入链接和其他资源建立联系。

五、SOA设计的标准要求

(1)文档标准化。SOA服务具有平台独立的自我描述XML文档。Web服务描述语言是用于描述服务的标准语言。
(2)通信协议标准。SOA服务用消息进行通信,该消息通常使用XML Schema来定义(也称作 XML Schema Definition, XSD)。
(3)应用程序统一登记与集成。在一个企业内部,SOA服务通过一个扮演目录列表(Directory Listing)角色的登记处(Registry)来进行维护。应用程序在登记处(Registry)寻找并调用某项服务。统一描述、定义和集成是服务登记的标准。
(4)服务质量(QoS)主要包括:
        1)可靠性:服务消费者和服务提供者之间传输文档时的传输特性(且仅仅传送一次、最多传送一次、重复消息过滤、保证消息传送)。
        2)安全性:Web 服务安全规范用来保证消息的安全性。
        3)策略:服务提供者有时候会要求服务消费者与某种策略通信。例如,服务提供商可能会要求消费者提供 Kerberos 安全标示才能取得某项服务。
        4)控制:在SOA中,进程是使用一组离散的服务创建的。BPEL4WS或者WSBPEL(WebService Business Process Execution Language)是用来控制这些服务的语言。
        5)管理:针对运行在多种环境下的所有服务,必须有一个统一管理系统,以便系统管理员能够有效管理。任何根据WSDM实现的服务都可以由一个WSDM 适应(WSDM-compliant)的管理方案来管理。

六、SOA的作用与设计原则

(1)SOA的主要作用:打破信息孤岛,把应用和资源转换成服务。以及把这些服务变成标准的服务,形成资源的共享。
(2)SOA的设计原则主要有:
        1)无状态。以避免服务请求者依赖于服务提供者的状态。
        2)单一实例。以高内聚的实现方法,来避免功能冗余。
        3)明确定义的接口。服务的接口由WSDL定义,用于指明服务的公共接口与其内部专用实现之间的界线。
        4)自包含和模块化。服务封装了那些在业务上稳定、重复出现的活动和组件,实现服务的功能实体是完全独立自主的,独立进行部署、版本控制、自我管理和恢复。
        5)粗粒度。服务数量不应该太大,依靠消息交互而不是远程过程调用(Remote Procedure Call;RPC),通常消息量较大,但是服务之间的交互频度较低。

        6)服务之间的松耦合性。服务使用者看到的是服务的接口,其位置、实现技术和当前状态等对使用者是不可见的,服务私有数据对服务使用者是不可见的。
        7)重用能力。服务应该是可以复用的。
        8)互操作性、兼容和策略声明。为了确保服务规约的全面和明确,利用策略来定义可配置的互操作语义,来描述特定服务的期望、控制其行为。利用策略声明确保服务期望和语义兼容性方面的完整和明确。

七、SOA的设计模式

1.服务注册表模式

服务注册表支持驱动SOA治理的服务合同、策略和元数据的开发、发布和管理。
(1)服务注册:应用开发者,也叫服务提供者,向注册表公布它们的功能。
(2)服务位置:也就是服务应用开发者,帮助它们查询注册服务,寻找符合自身要求的服务。
(3)服务绑定:服务的消费者利用检索到的服务合同来开发代码,开发的代码将与注册的服务绑定、调用注册的服务以及与它们实现互动。

2.企业服务总线模式

        企业服务总线模式提供一种标准的软件底层架构,各种程序组件能够以服务单元的方式“插入”到该平台上运行,并且组件之间能够以标准的消息通信方式来进行交互。其核心功能如下:
(1)提供位置透明性的消息路由和寻址服务。程序组件之间无须关注对方的路由和寻址。
(2)提供服务注册和命名的管理功能。
(3)支持多种消息传递范型(如请求/响应、发布/订阅等)。
(4)支持多种可以广泛使用的传输协议。
(5)支持多种数据格式及其相互转换。
(6)提供日志和监控功能。

3.微服务模式

        微服务架构将一个大型的单个应用或服务拆分成多个微服务,可扩展单个组件而不是整个应用程序堆栈,从而满足服务等级协议。微服务架构围绕业务领域将服务进行拆分,每个服务可以独立进行开发、管理和迭代,彼此之间使用统一接口进行交流,实现了在分散组件中的部署、管理与服务功能,使产品交付变得更加简单,从而达到有效拆分应用,实现敏捷开发与部署的目的。微服务模式的特点如下:
(1)复杂应用解耦:微服务架构将单一模块应用分解为多个微服务,同时保持总体功能不变。
(2)独立;微服务在系统软件生命周期中是独立开发、测试及部署的。
(3)技术选型灵活:微服务架构下系统应用的技术选型是去中心化的,每个开发团队可根据自身应用的业务需求发展状况选择合适的体系架构与技术。
(4)容错:由于各个微服务相互独立,故障会被隔离在单个服务中,并且系统其他微服务可通过重试、平稳退化等机制实现应用层的容错,从而提高系统应用的容错性。
(5)松耦合,易扩展:微服务架构中每个服务之间都是松耦合的,可以根据实际需求实现独立扩展,体现微服务架构的灵活性。单体应用架构与微服务架构的示意如图18.4所示。

4.微服务架构模式方案


微服务架构模式方案主要包括:
(1)聚合器微服务:聚合器充当流程指挥者,调用多个微服务实现系统应用程序所需功能。
(2)链式微服务:客户端或服务在收到请求后,会发生多个服务间的嵌套递归调用,返回经过合并处理的响应。
(3)数据共享微服务:该模式适用于在单体架构应用到微服务架构的过渡阶段,服务之间允许存在强耦合关系,例如存在多个微服务共享缓存与数据库存储的现象。
(4)异步消息传递微服务:对于一些不必要以同步方式运行的业务逻辑,可以使用消息队列代替 REST实现请求、响应,加快服务调用的响应速度。

5.微服务架构面临的问题与挑战

(1)服务发现与服务调用链跟踪变得困难。
(2)很难实现传统数据库的强一致性,转而追求最终一致性。

八、构建SOA架构时应该注意的问题

(1)原有系统架构中的集成需求包括;应用程序集成的需求、终端用户界面集成的需求、流程集成的需求以及已有系统信息集成的需求。
(2)服务粒度的控制以及无状态服务的设计的表述如下。
        1)服务粒度的控制:对于将暴露在整个系统外部的服务推荐使用粗粒度的接口,而相对较细粒度的服务接口通常用于企业系统架构的内部。
        2)无状态服务的设计:SOA系统架构中的具体服务应该都是独立的、自包含的请求,在实现这些服务的时候不需要前一个请求的状态,也就是说服务不应该依赖于其他服务的上下文和状态,即SOA架构中的服务应该是无状态的服务。

九、SOA实施的过程

(1)选择SOA解决方案主要从以下3个方面进行:
        1)尽量选择能进行全局规划的方案。
        2)选择时充分考虑企业自身的需求。
        3)从平台、实施等技术方面进行考察。
(2)业务流程分析主要关注:
        1)建立服务模型:自顶向下分解法、业务目标分析法、自底向上分析法。
        2)建立业务流程:建立业务对象(实体、过程、事件等业务对象)、建立服务接口、建立服务流程。

十、课后练习

1.下列关于SOA与微服务的描述,错误的是()。
A.微服务相比于SOA更加精细,微服务更多地以独立的进程的方式存在,互相之间并无影响
B.微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、平台限制
C.微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合
D.微服务更容易实现出高并发的特性,有助于实现互联网业务的秒杀促销活动

2.下列选项()不是关于SOA的服务架构。
A.业务逻辑服务
B.中间件服务
C.连接服务
D.控制服务

3.WSDL规范:Web服务描述语言(Web Services Descripton Language)是一个用来描述Web服务和说明如何与Web服务通信的XML语言,描述了Web服务的三个基本属性,即()。
a.服务做些什么 b.如何访问服务 c.服务位于何处 d.服务是否可用
A. abc
B. acd
C.bcd
D.abd

4.SOA的设计原则为无状态、单一实例、明确定义的接口、()、粗粒度、服务之间的松耦合性、重用能力、互操作性。
A.复用性和构件化
B.自包含和模块化
C.独立性和构件化
D.隔离性和归一化

5.微服务架构将一个大型的单个应用或服务拆分成多个微服务,可扩展单个组件而不是整个应用程序堆栈,从而满足服务等级协议。微服务架构围绕业务领域将服务进行拆分,每个服务可以(),彼此之间使用统一接口进行交流,实现了在分散组件中的部署、管理与服务功能,使产品交付变得更加简单,从而达到有效拆分应用,实现敏捷开发与部署的目的。
A.独立进行开发、管理、迭代
B.独立进行部署、运维、升级
C.独立进行测试、交付、验收
D.独立进行发布、发现、访问

答案解析:

1、解析:微服务在实现高并发方面是局限的。只有没有调用关系的微服务,相对于单体服务来说,才有并发性的提升。
答案:D

2、解析:SOA的参考架构中包括业务逻辑服务(Business Logic Service)、控制服务(ControlService)、连接服务(Connectivity Service)、业务创新和优化服务(Business Innovation andOptimization Service)、开发服务(Development Service)、IT 服务管理(IT Service Management)。
答案:B

3、解析:服务做些什么:服务所提供的操作(方法)。如何访问服务:和服务交互的数据格式以及必要协议。服务位于何处:协议相关的地址,如URL.
答案:A

4、解析:SOA的设计原则为无状态、单一实例、明确定义的接口、自包含和模块化、粗粒度、服务之间的松耦合性、重用能力、互操作性。
答案:B

5、解析:微服务架构围绕业务领域将服务进行拆分,每个服务可以独立进行开发、管理和迭代,彼此之间使用统一接口进行交流,实现了在分散组件中的部署、管理与服务功能。
答案:A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/420721.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR

时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR 文章目录 一、基本原理二、实验结果三、核心代码四、代码获取五、总结 时序预测|基于小龙虾优化高斯过程GPR数据回归预测Matlab程序COA-GPR 多特征输入单输出 附赠基础GPR 一、…

mysql高级sql

文章目录 一,查询1.按关键字排序1.1按关键字排序操作(1)按分数排序查询(不加asc默认为升序)(2)按分数降序查询(DESC)(3)使用where进行条件查询(4)使用ORDER BY语句对多个字段排序 1.2使用区间判断查询(and/…

如何通过内网穿透实现Pycharm远程服务器编译项目与服务器代码同步

文章目录 前言一、前期准备1. 检查IDE版本是否支持2. 服务器需要开通SSH服务 二、Pycharm本地链接服务器测试1. 配置服务器python解释器 三、使用内网穿透实现异地链接服务器开发1. 服务器安装Cpolar2. 创建远程连接公网地址 四、使用固定TCP地址远程开发 前言 本文主要介绍如…

Unity1 Prefab

修改预设体 进入预设体面板来改 在Hierarchy中可以给预制体添加对象 第一种方法:添加了之后把Hierarchy中的预制体拖到Project中的预制体上 就可以修改原本的预制体 第二种方法:添加了之后在inspector中 点revert 就是重置所有预制体 添加的就没有…

如何远程实时监控员工的电脑屏幕?远程桌面监控的五个可实现方法分享

想象一下,你在办公室喝着咖啡,员工的电脑屏幕却在数百公里之外实时呈现在你的眼前。你可以看到他们在干什么,是埋头工作还是悄悄摸鱼?远程桌面监控让这一切变得触手可及,简直像给了管理者一双“千里眼”! 如…

Mysql(二) - 约束, 进阶查询

目录 一.约束 1.not null 2.unique 3.default 4.primary key 5. foreign key 6.check 7. 综合使用 二.进阶查询 1.新增(插入查询的结果) 2.聚合查询 a.聚合函数 b.使用 3.分组查询 4.联合查询 a.内连接 b.外连接 c.自连接 d.子查询 5.合并查询 三.总结 一…

【Unity】简易而又实用的抽卡算法

1.两个数中任选一个&#xff08;抛硬币&#xff09; 基础版本&#xff1a; public int RandomBetweenTwoNumber(int a,int b) {float random Random.Range(0,1f);return radom<0.5f ? a : b ; } 升级版本&#xff08;支持概率调整&#xff09;&#xff1a; /*pa表示“…

微波无源器件 4 基于高阶定向耦合器的双极化波束形成网络

摘要&#xff1a; 一种Ka频段的双极化3dB定向耦合器被设计用于波束形成网络应用。所提出的解决方案对于紧凑Nolen网络。Nolen结构优于器平面和无损特别具有吸引力。两个平行方波导通过口径阵列耦合&#xff0c;设计用于获得两个正交极化之间的所需耦合和高隔离度。 索引词&…

数据结构(7.2_1)——顺序查找

顺序查找&#xff0c;又叫"线性查找"&#xff0c;通常用于线性表&#xff08;或者顺序表和链表&#xff09;。 算法思想&#xff1a;从头到尾全部查找出来&#xff08;或者反过来也OK&#xff09; 顺序查找的实现 typedef struct {//查找表的数据结构(顺序表)Elem…

对接后端download接口报未知异常错误

你一定遇到过这种情况&#xff0c;在一个项目中下载功能明明好好的&#xff0c;下载接口调用方法与前端调用方法封装的好好的&#xff0c;可是换了一个接口&#xff0c;竟然搞罢工了&#xff0c;类似下面这样的&#xff0c;你会不会无从下手&#xff0c;不知道该怎么办呢&#…

MATLAB实现PID参数自动整定

目录 1、项目说明 2、文件说明 1、项目说明 本项目旨在通过 MATLAB 语言实现 PID 参数的自动整定&#xff0c;并设计了一个直观易用的 GUI 界面。该系统特别适用于实验室环境下的 PID 参数自整定任务。整定的核心原则在于优化系统性能&#xff0c;使系统的衰减比尽可能接近理…

深度学习从入门到精通——yolov3算法介绍

YOLO v3 论文地址&#xff1a;https://pjreddie.com/media/files/papers/YOLOv3.pdf论文&#xff1a;YOLOv3: An Incremental Improvement 先验框 (1013)&#xff0c;(1630)&#xff0c;(3323)&#xff0c;(3061)&#xff0c;(6245)&#xff0c;(59 119)&#xff0c; (116 9…

vue页面使用自定义字体

一、准备好字体文件 一般字体问价格式为 .tff&#xff0c;可以去包图网等等网站去下载&#xff0c;好看的太多了&#xff01;&#xff01;&#xff01; 下载下来就是单个的 .tff文件&#xff0c;下载下来后可以进行重命名&#xff0c;但是不要改变他的后缀名&#xff0c;我把他…

小琳AI课堂:多模态模型的训练与应用

引言 大家好&#xff0c;这里是小琳AI课堂。今天我们将探讨一个热门且前沿的话题——多模态模型的训练与应用。让我们一起走进这个复杂而精致的艺术创作过程&#xff01; 训练关键步骤 1. 数据收集与预处理 准备工作&#xff1a;从多种来源和模态收集数据&#xff0c;如文…

LLM的指令微调新发现:不掩蔽指令

最近看到了一篇挺有意思的论文&#xff0c;叫《指令掩蔽下的指令调整》&#xff08;Instruction Tuning With Loss Over Instructions&#xff0c;https://arxiv.org/abs/2405.14394) 。 这篇论文里&#xff0c;研究者们对一个在指令微调中大家普遍接受的做法提出了疑问&#…

MMO:道具系统

本篇三部分&#xff1a; 道具分类 道具系统的接口设计&#xff08;C/S&#xff09; 道具系统的组成&#xff08;各种小方法&#xff09; 配置表&#xff0c;协议&#xff0c;数据库 //Array&#xff1a;打开宝箱获得多种道具 tables同目录下&#xff1a;Excel2Json.cmd生成…

【Python报错已解决】 SyntaxError: invalid syntax

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;修复缺失的括号或引号2.…

Redis相关命令详解

目录 一、认识Redis 二、string 1、重要知识 2、基础命令 3、Key值的设置 三、list 1、重要知识 2、存储结构 3、基础命令 4、list的应用场景 四、hash 1、重要知识 2、基础命令 五、set 1、重要知识 2、基础命令 3、具体应用 六、zset 1、重要知识 2、…

【保姆级教程】如何创建一个vitepress项目?

文章目录 安装前的准备工作项目安装创建文件初始化文件安装依赖遇到了 missing peer deps 警告&#xff1f;命令行设置向导 完成 安装前的准备工作 Node.js 18 及以上版本。通过命令行界面 (CLI) 访问 VitePress 的终端。支持 Markdown 语法的编辑器。推荐 VSCode 及其官方 Vu…

gpt plus获取指南

随着AI技术的发展&#xff0c;越来越多的人开始依赖GPT来提高工作效率。市场上有多个平台提供GPT服务&#xff0c;如何选择最适合自己的&#xff1f;本文将详细对比两个热门平台&#xff1a;「银河」和「环球」&#xff0c;帮助你快速决策。 环球链接 银河链接 结论先行&#…