【软考速通笔记】系统架构设计师⑭——面向服务架构设计理论与实践

文章目录

  • 一、前言
  • 二、基础知识
    • 2.1 介绍
    • 2.2 作用
  • 三、参考架构
  • 四、主要协议
  • 五、设计原则
  • 六、设计模式
    • 6.1 服务注册模式
    • 6.2 企业服务总线模式
    • 6.3 微服务模式
    • 6.4 微服务架构模式方案
  • 七、注意事项

一、前言

笔记目录大纲请查阅:【软考速通笔记】系统架构设计师——导读

二、基础知识

2.1 介绍

面向服务的体系结构(Service-Oriented Architecture,SOA)。

从软件的基本原理定义,可以认为SOA是一个组件模型,它将引用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。

接口是采用中立的方式进行定义,它应该独立于实现服务的硬件平台、操作系统和编程语言。

这使得构建在各种各样的系统中的服务可以一种统一和通用的方式进行交互。

2.2 作用

SOA的主要作用:打破信息孤岛,把应用和资源转换成服务。以及把这些服务变成标准的服务,形成资源的共享。

三、参考架构

企业集成架构可以划分为6大类

  • 业务逻辑服务(Business Logic Sevice):负责处理企业的核心业务逻辑,是SOA架构中的核心部分。
  • 控制服务(Control Service):包括实现人、流程、信息集成的服务,以及执行这些集成逻辑的能力。
  • 连接服务(Connectivity Service):通过提供企业服务总线,实现分布在各个架构元素中的服务间的连接性。。
  • 业务创新和优化服务(Business Innovation and Optimization Service):用于监控业务系统运行时服务的业务性能,并通过及时了解到的业务性能和变化,采取措施适应变化的事情。
  • 开发服务(Development Service):贯彻这个软件开发生命周期的开发平台,从需求分析到建模、设计、开发、测试和维护等全方面的工具支持。
  • IT服务管理(IT Service Management):支持业务系统运行的各种基础设施管理能力或服务,如安全服务、目录服务、系统管理和资源虚拟化。

四、主要协议

  • UDDI协议(Universal Description, Discovery, and Integration):用于描述、发现和集成Web服务的目录协议。提供了一个平台,企业可以发布和发现服务信息,包括服务的技术细节、接口和绑定信息。
  • Web服务描述语言(WSDL - Web Services Description Language):WSDL是一种XML格式的标准语言,用于描述Web服务。3个基本属性:
    • 服务做些什么——服务所提供的操作(方法)?
    • 如何访问服务——服务交互的数据格式和必要协议?
    • 服务位于何处——协议相关的地址,如URL?
  • SOAP协议(Simple Object Access Protocol):在分散式或分布式环境中交换信息的简单协议,基于XML的协议。
  • REST规范(Representational State Transfer):即RESTful,使用HTTP请求来获取、修改和传输数据。它通常使用JSON或XML格式的数据交换,并且具有无状态、可缓存和统一接口的特点。

五、设计原则

  • 无状态:服务应该是无状态的,即不依赖于其他服务的上下文和状态。
  • 单一实例:服务应该具有单一实例,避免多个实例之间的冲突和不一致。
  • 明确定义的接口:服务接口由WSDL定义,用于指明服务的公共接口与其内部专用实现之间的界线。
  • 自包含和模块化:独立进行部署、版本控制、自我管理和恢复。
  • 粗粒度:过细的服务粒度会增加系统的复杂性和管理成本;而过粗的服务粒度则会影响系统的灵活性和可重用性。因此,需要根据实际需求合理控制服务粒度
  • 服务之间松耦合:服务之间应该保持松耦合的关系,降低服务之间的依赖性和相互影响。
  • 重用能力:服务应该具有重用能力,通过服务注册和发现机制实现服务的共享和复用。
  • 互操作性、兼容和策略声明:服务应该通过策略声明来确保服务的安全性和可靠性

六、设计模式

6.1 服务注册模式

通过服务注册中心来管理和维护服务的信息,包括服务的名称、地址、接口等。服务消费者可以通过服务注册中心来查找和调用所需的服务。

6.2 企业服务总线模式

ESB是一种用于在不同服务之间传输和转换消息的软件架构模式。它提供了一组标准化的服务和接口,用于在不同服务之间进行通信和协作。

6.3 微服务模式

微服务是一种将应用程序构建为一组小型、自治的服务的方法。每个服务都运行在独立的进程中,并使用轻量级通信机制(如HTTP或REST API)进行通信。微服务架构具有高度的灵活性和可扩展性,能够快速地响应市场变化。
微服务模式特点:

  • 复杂应用解耦:将大应用拆成小服务,每个服务专注一个功能。
  • 独立:独立开发、测试和部署。
  • 技术选型灵活:各服务可根据需要选择技术,不受整体架构限制。
  • 容错:服务间独立通信,单个服务故障不影响整体。
  • 松耦合,易扩展:服务间松耦合,添加或修改服务容易,适应性强。

6.4 微服务架构模式方案

在微服务架构中,可以采用多种模式方案来实现服务的构建和部署。

  • 聚合器微服务设计模式:可以将多个服务组合成一个业务流程;
  • 链式微服务设计模式:可以将多个服务按照顺序连接起来形成一个服务链;
  • 数据共享微服务设计模式:可以在多个服务之间共享数据,共用一个数据库;
  • 异步消息传递微服务设计模式:可以通过消息队列实现服务的异步通信和协作。

七、注意事项

  • 服务粒度:服务粒度的选择对于SOA架构的成功至关重要。过细的服务粒度会增加系统的复杂性和管理成本;而过粗的服务粒度则会影响系统的灵活性和可重用性。因此,需要根据实际需求合理控制服务粒度。
  • 无状态服务的设计:服务都是独立的、自包含的请求,在实现这些服务时不需要前一个请求的状态,也就是说服务不应该依赖于其他服务的上下文和状态。
  • 服务性能和可靠性:SOA架构需要通过网络进行服务调用,可能会带来额外的延迟和失败风险。因此,需要关注服务的性能和可靠性问题,确保服务的稳定性和可用性。
  • 服务版本控制和演化:随着系统的演化和变化,服务的接口和实现可能会发生变化。因此,需要建立有效的版本控制和管理机制来管理服务的版本和演化过程。
  • 安全和隐私:在SOA架构中,服务之间的通信和数据交换需要保证安全和隐私。因此,需要采用适当的安全措施来保护服务的安全性和隐私性。
  • 标准化和规范化:为了确保不同服务之间的互操作性和兼容性,需要制定统一的标准和规范来指导服务的设计、开发和部署过程。

若觉得文章对你有帮助,随手『点赞』、『收藏』、『关注』,也是对我的支持。

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

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

相关文章

K8S的资源配置

资源配额 当多个用户或团队共享具有固定节点数目的集群时,人们会担心有人使用超过其基于公平原则所分配到的资源量。资源配额是帮助管理员解决这一问题的工具。资源配额,通过 ResourceQuota 对象来定义,对每个命名空间的资源消耗总量提供限制…

Python+OpenCV系列:入门环境搭建、图像读写、像素操作、色彩空间和通道、

入门环境搭建、图像读写、像素操作、色彩空间和通道 **Python与OpenCV环境搭建、图像处理与色彩空间介绍****引言****1. Python和OpenCV的环境搭建****1.1 安装Python和OpenCV****1.2 配置开发环境** **2. 图像的读取、显示与保存****2.1 图像的读取****2.2 图像的显示****2.3 …

在Docker中部署禅道,亲测可用

1、确保centos中已安装docker docker -v 2、启动docker systemctl start docker 3、可设置docker开机启动 systemctl enable docker.service 4、获取最新版禅道开源版镜像 docker pull idoop/zentao 5、运行镜像生成禅道容器【创建 /data/www /data/data 目录】 doc…

vitepress组件库文档项目 markdown语法大全(修正版)

#上次总结的 有些语法是用在markdown文档中的 使用到vitepress项目中有些语法可能有出入 于是我再总结一版 vitepress项目中的markdown语法大全 在阅读本章节之前,请确保你已经对 Markdown 有所了解。如果你还不了解 Markdown ,请先学习一些Markdown 教…

String IP和Int IP的互相转换

android中,wifiManager.connectionInfo.ipAddress 可以获取到wifi的ip地址,但这是一个int值,如何转换为常见的如192.168.1.129这种形式,以及这种形式如何转换回int值的形式。 这里ip分为4段,每一段的值都是0 ~ 255&am…

Blender导入下载好的fbx模型像的骨骼像针戳/像刺猬

为什么我下载下来的骨骼模型和我自己绑定的模型骨骼朝向完全不一样 左边是下载的模型 右边是我自己绑定的模型 左边的模型刚刚感觉都是像针一样往外戳的,像刺猬一样那种。 解决方法勾选自动骨骼坐标系

python 清华pip镜像源报HTTP error 403

报错信息 ERROR: HTTP error 403 while getting https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/52/79/a64937a2185b91a96cc5406e3ea58120980c725543d047e112fb3084a972/fake_useragent-2.0.0-py3-none-any.whl (from https://mirrors.tuna.tsinghua.edu.cn/pypi/we…

ASP.NET CORE API 解决跨域问题

环境 vs2022 .net 8 创建ASP.net Core API项目 配置跨域 编写ApiController 启动项目 得到服务器运行的 地址 在Hbuiler中创建web项目,编写代码 【运行】-【运行到浏览器】-选择一个浏览器,查看结果 正常显示 问题 如果允许所有源访问,有安全风险方…

Android 第三方框架:RxJava:源码分析:观察者模式

文章目录 观察者模式RxJava中的观察者模式总结 ​​​​​​​​​​​​​​观察者模式​​​​​​​ RxJava中的观察者模式 以Observable、ObservableOnSubscribe、Observer为例 Observable是被观察者 负责发射事件或数据 Observer是观察器 负责对从被观察者中获取的数…

【AI系统】MobileFormer

MobileFormer 在本文中,将介绍一种新的网络-MobileFormer,它实现了 Transformer 全局特征与 CNN 局部特征的融合,在较低的成本内,创造一个高效的网络。通过本节,让大家去了解如何将 CNN 与 Transformer 更好的结合起来…

如何实现表格选中时禁用树结构的复选框功能(El-Tree 与 El-Table 联动实现)

在前端开发中,树形结构和表格是常用的组件组合,尤其是在展示和管理复杂数据时。使用 Element UI 的 el-tree 和 el-table 组件,我们可以实现当表格中有选中行时,自动禁用树结构中的复选框,反之亦然。这不仅提升了用户体…

决策树:ID3、C4.5和CART特征选择方式

1 前言 该文章主要目的是记录ID3、C4.5和CART特征选择方式,这里只对决策树进行简单介绍。 决策树(Decision Tree)算法是一种有监督学习算法,它利用分类的思想,根据数据的特征构建数学模型,从而达到数据的筛…

【3D AIGC】Img-to-3D、Text-to-3D、稀疏重建(2024年文章汇总)

文章目录 1. Wonderworld:拓展图片边界,生成3D场景2. 3DTopia-XL:扩散模型辅助生成3. 3DGS-Enhancer: 通过视图一致2D Diffusion,提升无界3D Gaussian Splatting (NlPs2024 Spotlight)4. L3DG:Latent 3D Gaussian Diff…

三款电容麦的对比

纸面参数 第一款麦克风 灵敏度: -36 dB 2 dB(0 dB1V/Pa at 1 kHz) 灵敏度较低,需要更高的增益来拾取同样的音量。频率响应: 40 Hz - 18 kHz 响应范围较窄,尤其在高频区域。等效噪音级: ≤18 dB(A计权) 噪…

运行 GreatSQL 时为什么要求关闭透明大页

在大部分运维规范中,一般都会要求在运行 GreatSQL/MySQL 的环境中要关闭透明大页,那么到底什么是透明大页,为什么要关闭,打开有什么风险吗? 在此之前,我也是有点懵的,本文试着回答这个疑问&…

JUnit介绍:单元测试

1、什么是单元测试 单元测试是针对最小的功能单元编写测试代码(Java 程序最小的功能单元是方法)单元测试就是针对单个Java方法的测试。 2、为什么要使用单元测试 确保单个方法运行正常; 如果修改了代码,只需要确保其对应的单元…

Elasticsearch:使用硬件加速的 SIMD 指令实现超快 BBQ

作者:来自 Elastic Chris Hegarty 我们如何使用硬件加速 SIMD(Single Instruction Multiple Data - 单指令多数据)指令优化 BBQ 中的向量比较。 随着我们继续致力于让 Elasticsearch 和 Apache Lucene 成为存储和搜索向量数据的最佳场所&…

青龙面板添加任务执行自己的脚本文件(非订阅) 保姆级图文

目录 效果预览脚本存放的位置创建任务cron规则字段含义:常见的特殊字符: 可能你的脚本需要安装依赖总结 欢迎关注 『青龙面板』 专栏,持续更新中 欢迎关注 『青龙面板』 专栏,持续更新中 效果预览 你的python脚本 print(123)运行…

flink的安装配置(详细版本)

Standalone集群模式安装部署 conda deactivate 退出 base环境 Flink支持多种安装模式。 local(本地)——本地模式 standalone——独立模式,Flink自带集群,开发测试环境使用 standaloneHA—独立集群高可用模式,Fli…

Scala编程基础:模式匹配、解构赋值与正则表达式

在Scala编程语言中,模式匹配、解构赋值和正则表达式是三个非常强大的特性,它们可以让我们以更简洁、更直观的方式处理数据。本文将通过三个示例,详细解释这些特性的使用方法和背后的原理。 1. 模式匹配与case class 模式匹配是Scala中处理数…