【系统架构设计】软件架构设计(2)

【系统架构设计】软件架构设计(1)

  • 软件架构概述
  • 架构需求与软件质量属性
  • 软件架构风格
  • 层次系统架构风格
  • 面向服务的架构
    • SOA概述
    • 微服务
    • 微服务和SOA差异

软件架构概述

架构需求与软件质量属性

软件架构风格

层次系统架构风格

面向服务的架构

SOA概述

面向服务的架构(Service -Oriented Architecture ,SOA),与SOA 紧密相关的技术有UDDI、WSDL、SOAP、REST等,而这些技术都是以XML为基础而发展起来的。

  1. UDDI(Universal Description Discovery and Integration ,统一描述、发现和集成)

提供了一种服务发现、查找和定位的方法,是服务的信息注册规范,以便被需要该服务的用户发现和使用它。UDDI规范描述了服务的概念,同时也定义了一种编程接口。通过UDDI提供的标准接口,企业可以发布自己的服务供其他企业查询和调用,也可以查询特定服务的描述信息,并动态绑定到该服务上。

ps:UDDI 有点类似微服务的Nacos,服务注册中心,但要注意 服务提供者、服务请求者、服务注册中心里面服务注册中心为可选项,可以直接使用静态绑定的服务,服务提供者则可以把描述直接发送给服务请求者

  1. WSDL(Web Service Description Language ,Web服务描述语言)

是对服务进行描述的语言,它有一套XML的语法定义。WSDL描述的重点是服务,它包含服务实现定义和服务接口定义。

在这里插入图片描述

  1. SOAP(Simple ObjectAccess Protocol ,简单对象访问协议)

定义了服务请求者和服务提供者之间的消息传输规范。SOAP用XML来格式化消息,用HTTP来承载消息。通过SOAP应用程序可以在网络中进行数据交换和远程过程调用(Remote Procedure Call,RPC)。主要包括** 封装、编码规则、RPC、绑定四个部分。SOAP消息基本上是从发送端到接收端的单向传输**,但它们常常结合起来执行类似于请求/应答的模式。而且所有的SOAP消息都用XML进行编码

  1. REST(Representation State Transfer , 表达式状态转移)

是一种只使用HTTP 和XML进行基于Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。它的简单性和缺少严格配置文件的特性,使得它与SOAP很好隔离开来,从根本上来说只支持几个操作(POST \GET \ PUT \ DELETE),这些操作适用于所有的信息。REST提出了如下的一些设计概念和准则:

  • 网络上的所有事情都被抽象为资源
  • 每个资源对应一个唯一的资源标识
  • 通过通用的连接件接口对资源进行操作
  • 对资源的各种操作都不会改变资源标识
  • 所有的操作都是无状态的

ps:操作无状态‌意味着在当前的操作中,不需要依赖或参考任何历史信息或数据。这种操作通常支持短连接,比如浏览新闻网站上的新闻,一旦从服务器获取资源后,就可以与服务器断开连接,因为当前的操作不需要历史数据的支持。简单来说,无状态操作就像是服务器对于每个请求都视为第一次请求,不会依赖之前的请求数据,每次请求都是独立的,服务器不会保存任何与请求方相关的状态数据‌

微服务

微服务的核心特点为:小,且专注于做一件事情、轻量级的通信机制、松耦合、独立部署

ps :‌轻量级通信机制中的轻量级主要指的是通信协议与语言无关、与平台无关,且创建和销毁不需要消耗太多的资源,可以在程序中经常创建和销毁session的对象。

微服务的优势:

  1. 技术异构性

在微服务架构中,每个服务都是一个相对独立的个体,每个服务都可以选择适合于自身的技术来实现。同时,在应用新技术时,微服务架构也提供了更好的试验场。因为对于单块的系统而言,采用一个新的语言、数据库或者框架都会对整个系统产生巨大的影响,这样导致我们想尝试新技术时,望而却步。但微服务不同,我们完全可以只在一个微服务中采用新技术, 待
技术使用熟练之后,再推广到其他服务。

  1. 弹性

弹性主要讲的是系统中一部分出现故障会引起多大问题。在单块系统中,一个部分出现问题,可能导致整体系统的问题。而微服务架构中,每个服务可以内置可用性的解决方案与功能降级方案,所以比单块系统强。

  1. 扩展
  2. 简化部署

在大型单块系统中,即使修改一行代码,也需要重新部署整个应用系统。这种部署的影响很大、风险很高,因此不敢轻易地重新部署。而微服务架构中,每个服务的部署都是独立的,这样就可以更快地对特定部分的代码进行部署。

  1. 与结织组织相匹配

我们都知道,团队越大越难管理,同时团队越大也代表系统规模越大代码库越大,这样容易引起一系列的问题。且当团队是分布式的时候,问题更严重。微服务作为独立的个体,可以根据组织情况,灵活进行代码库部署,以及设置服务所有权。

  1. 可组合性

在微服务架构中,系统会开放很多接口供外部使用。当情况发生改变时,可以使用不同的方式构建应用,而整体化应用程序只能提供一个非常粗粒度的接口供外部使用。

  1. 对可替代性的优化

在单块系统中如果删除系统中的上百行代码,也许不知道会发生什么,引起什么样的问题,因为单块系统中关联性很强。但在微服务架构中,我们可以在需要时轻易地重写服务,或者删除不再使用的服务。

面临的挑战:

  1. 分布式系统的复杂度
  2. 运维成本
  3. 部署自动化

对于微服务架构而言,每个服务都是一个独立可部署的业务单元,每个服务的修改都需要独立部署。这样部署的成本是比较高的,如亚马逊,每天都要执行数十次、甚至上百次的部署,此时仍用人工部署是行不通的,要使用自动化部署。如何有效地构建自动化部署流水线,降低部署成本、提高部署频率,是微服务架构下需要面临的一个挑战。

  1. DevOps 与组织结构

微服务不仅表现出一种架构模型,同样也表现出一种组织模型。这种新型的组织模型意味着开发人员和运维的角色发生了变化,开发者将承担起服务整个生命周期的责任,包括部署和监控,而运维也越来越多地表现出一种顾问式的角色,尽早考虑服务如何部署。因此,如何在微服务的实施中,按需调整组织架构,构建全功能的团队,是一个不小的挑战。

  1. 服务间依赖测试

  2. 服务间依赖管理

微服务和SOA差异

微服务可以讲也是SOA的一种,但依旧有差异,主要表现在以下方面:

在这里插入图片描述

对应的在实现方面也存在差异

在这里插入图片描述

ps: 简单说,微服务是比较细化的,一个开发团队就是一个公司的业务;SOA 则是笼统的,然后一个开发团队是一个公司的部门。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言手撕实战代码_循环单链表和循环双链表

C语言手撕实战代码_循环单链表和循环双链表 循环单链表习题1.建立带头结点的循环链表2.设计一个算法,将一个带有头结点的循环单链表中所有结点的链接方向逆转3.设计一个算法,将一个循环单链表左移k个结点4.设计一个算法将循环单链表中的结点p的直接前驱删除5.设计算…

游泳耳机品牌前十名哪个牌子好?如何选高配游泳耳机不花冤枉钱?

在快节奏的现代生活中,音乐已成为许多人放松和充电的重要方式之一。无论是晨跑、通勤还是健身,音乐总能陪伴我们度过每一个瞬间。而对于游泳爱好者来说,能够在水中享受音乐,更是将这一运动提升到了一个新的层次。然而,…

uniapp/uniapp x总结

uni-app组成和跨端原理 上图所诉 App的渲染引擎:同时提供了2套渲染引擎,.vue页面文件由webview渲染,原理与小程序相同;.nvue页面文件由原生渲染,原理与react native相同。开发者可以根据需要自主选择渲染引擎。 uniapp…

【unity小技巧】获取免费开源的人物模型,并为obj fbx人物模型绑定骨骼、动画——mixamo的使用介绍

文章目录 前言地址上传自己的3D角色下载单动画下载动作包角色模型导入Unity动画导入unity设置动画骨骼动画骨骼不配的问题参考完结 前言 其实前面我已经推荐了几种获取人物模型的方法: 1、【unity小技巧】下载原神模型,在Blender中PMX模型转FBX模型&…

多商户商品下单限购问题修复

问题: 当商品设置限购为 1 时,够买数量未超过限购,但是还是提示超出限购数量 修复方法: 修改代码路径: app\common\repositories\store\order\StoreOrderCreateRepository.php 修改代码一: i s p a y s a r r a y u n i q u e ( a r r a y c o l u m n ( is_pays array_un…

Python 设置Excel工作表页边距、纸张大小/方向、打印区域、缩放比例

在使用Excel进行数据分析或报告制作时,页面设置是确保最终输出效果专业、美观的关键步骤。合理的页面设置不仅能够优化打印效果,还能提升数据的可读性。本文将详细介绍如何使用Python操作Excel中的各项页面设置功能。 目录 Python 设置Excel工作表页边…

AutosarMCAL开发——基于EB FEE驱动

这目录 1. FEE原理2.EB配置以及接口应用3.总结 1. FEE原理 在Fls解析文章中介绍了Flash与EEPROM储存器的区别,本文将介绍FEE具体实现原理。 FEE模块,全称Flash EEPROM Emulation Module,旨在使用Flash模拟EEPROM以增加使用寿命。 术语解释 p…

CTFHUB | web进阶 | JSON Web Token | 无签名

一些JWT库也支持none算法,即不使用签名算法。当alg字段为空时,后端将不执行签名验证 开启题目 账号密码随便输,登录之后显示只有 admin 可以获得 flag 在此页面抓包发到 repeater,这里我们需要用到一个 Burp 插件,按图…

瑞吉外卖-登录时报错:接口404异常

一、错误描述 出现“系统接口404异常”的弹窗,同时一直显示登录中,而无法跳转到后台页面。 二、解决方法 1. 检查浏览器的网址 确保为localhost:8080/backend/page/login/login.html,而不是idea自动生成的,修改过来即可。 2.确…

Unity XR Interaction Toolkit 通过两个手柄控制物体放大缩小

1:给物体添加 XR General Grab Transformer 脚本 2:XR Grab Interactable 的 select mode 选择 Multiple

SpringIoCDI

前言👀~ 上一章我们介绍了Spring MVC,今天介绍Spring核心功能之一IoC Spring到底是什么? Spring IoC 什么是 IoC 容器? IoC 介绍 DI 介绍 IoC详解 获取Bean对象的其他方式 Bean的存储 方法注解 Bean 扫描路径 DI详解 …

拼图游戏02

文章目录 概要整体架构流程代码过程小结 概要 现在需要将图片添加界面中 关键点在于它如何动态地根据游戏状态更新用户界面。它使用了Swing的布局管理器来定位组件,并且通过ImageIcon和JLabel来显示图像。注意,路径字符串中的反斜杠在Java中是转义字符…

选择排序(直接选择排序和堆排序)

一、直接选择排序 1.基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 2.动图展示 3.思路讲解 ①在元素集合array[i]—array[n-1]中选择关键码最大&…

以简单的例子从头开始建spring boot web多模块项目(一)

目的:从头梳理,如何手工从头建立多模块项目。 步骤: 1、建立maven项目,类型:maven Archetype,Name:ParentDemo 选择JDK版本,Archetype:org.apache.maven.archetypes:maven-archetype-quickstart…

网络UDP报文详细解析

目录 一、简介二、详细介绍三、其他相关链接1、TCP报文段的详细图总结2、TCP三次握手和四次挥手详解3、socket通信原理及相关函数详细总结4、网络包IP首部详细解析 一、简介 本文主要介绍UDP报文格式。 二、详细介绍 UDP是一种无连接、不可靠的用户数据报协议,其…

《图解设计模式》笔记(四)分开考虑

九、Bridge模式:将类的功能层次结构与实现层次结构分离 类的两个层次结构和作用 类的功能层次结构:希望增加新功能时 父类有基本功能,在子类中增加新功能 Something父类 …├─SomethingGood子类 想要再增加新功能 Something父类 …├─So…

Windows All download

前言 微软家族产品下载HEU_KMS_Activator download Windows PC desktop download 微软官网all 地址,地址1国内镜像地址,地址1 Windows 常规使用,运维,部署csdn 专栏 ,付费专栏 参考 版本微软官网Windows 7,8,10,…

hyperf 协程作用和相关的方法

什么是协程 协程是一种轻量级的线程,由用户代码来调度和管理,而不是由操作系统内核来进行调度,也就是在用户态进行 判断当前是否处于协程环境内 在一些情况下我们希望判断一些当前是否运行于协程环境内, 对于一些兼容协程环境与…

使用html-docx-js + fileSaver实现前端导出word

因为html-docx-js是16年的老库了,它代码里面用到的with语法现在严格模式不允许,用npm直接引入会报错,所以我们需要用其它方式引入 首先要将html-docx-js的代码放到项目中 html-docx-js/dist/html-docx.js at master evidenceprime/html-do…

modbus协议与RS-485协议的区别

在工业自动化领域,Modbus协议和RS-485通信协议都是常见且重要的技术标准。Modbus协议是一种通信协议,而RS-485则是一种物理层通信标准。 1.Modbus协议 Modbus协议是一种串行通信协议,最初由Modicon(现为施耐德电气公司&#xff0…