系统架构设计师-软件架构设计(6)

目录

一、物联网分层架构

二、大数据分层架构

三、基于服务的架构(SOA)

        1、SOA的特征

        2、服务构件与传统构件的区别

四、Web Service(WEB服务)

        1、Web Services 和 SOA的关系

五、REST(表述性状态转移)

六、ESB(企业服务总线)

七、微服务

        1、微服务的优点

        2、微服务的缺点

        3、微服务架构模式方案

        4、微服务与SOA的区别

八、云计算 

        1、云计算优点

        2、云计算【按服务类型分类】

        3、云计算【按部署方式分类】

        4、云计算架构

九、云原生架构

        1、云原生架构设计原则

        2、云原生架构模式

        3、云原生架构反模式

        4、微服务设计约束

        5、云原生应用 

        6、云原生开发 

十、边缘计算


一、物联网分层架构

        1、感知层负责为物联网采集和获取信息。(解决数据获取问题。传感器、芯片、通信模组)

        2、网络层负责向上层传输感知信息和向下层传输命令。(传递和处理信息。网络、通信标准 / 协议)

        3、平台层负责把感知层收集到的信息通过大数据、云计算等技术进行有效的整合和利用。(操作平台、软件开发、设备管理平台、连接管理平台)

        4、应用层解决信息处理和人机交互问题。(应用服务:例:智慧物流、智慧医疗、食品安全、智慧园区等、智能终端:例:手机App)

二、大数据分层架构

 

三、基于服务的架构(SOA)

        SOA(面向服务架构)是一种应用程序体系结构,在这种体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。

        1、SOA的特征

        (1)松散耦合(2)粗粒度服务(3)标准化接口

 

        2、服务构件与传统构件的区别

        (1)服务构件粗粒度,传统构件细粒度居多。

        (2)服务构件的接口是标准的,主要是WSDL(Web服务描述语言,是为描述Web服务发布的XML格式)接口,传统构件常以API形式出现。

        (3) 服务构件的实现与语言无关,传统构件绑定某种特定语言

        (4)服务构件可以通过构件容器提供QoS(一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术)的服务,传统构件完全由程序代码直接控制。

 

四、Web Service(WEB服务)

        UDDI:UDDI是一种用于描述、发现、集成Web Service的技术,它是Web Service协议栈的一个重要部分。通过UDDI,企业可以根据自己的需要动态查找并使用Web服务,也可以将自己的Web服务动态地发布到UDDI注册中心,供其他用户使用。

        WSDL:WSDL就是WebService接口对应的WSDL文件,该文件通过xml格式说明如何调用,可以看做WebService的接口文档(使用说明书)。

        SOAP:简单对象访问协议,是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息

        1、Web Services 和 SOA的关系

        SOA是一种思想,是一种架构理念,Web Service是一种来实现这理念的技术方法,Web Service是实现SOA的标准

        在SOA中,所有服务之间要松耦合,Web Service之间的通信是通过SOAP协议进行的,SOAP协议是基于XML实现的松耦合的协议。

        SOA服务需要对他们自己的服务本身进行描述,WSDL就是用来描述如何访问到SOA的服务

        SOA服务存在于一个目录中,UDDI就是用来描述从哪里得到SOA服务的,只需要完成SOA的注册就可以了。

 

五、REST(表述性状态转移)

        REST(Representational State Transfer,表述性状态转移)是一种通常使用HTTP和XML进行基于Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。 

        REST的5个原则:

        (1)网络上的所有事物都被抽象为资源。

        (2)每个资源对应一个唯一的资源标识。

        (3)通过通用的连接件接口对资源进行操作。

        (4)对资源的各种操作不会改变资源标识。

        (5)所有的操作都是无状态的。

 

六、ESB(企业服务总线)

        企业服务总线(EnterpriseServiceBus,ESB)是构建基于面向服务体系结构(SOA)解决方案时所使用基础架构的关键部分,是由中间件技术实现并支持SOA的一组基础架构功能。ESB支持异构环境中的服务、消息,以及基于事件的交互,并且具有适当的服务级别可管理性。简而言之,ESB提供了连接企业内部及跨企业间新的和现有软件应用程序的功能,以一组丰富的功能启用管理和监控应用程序之间的交互。在SOA分层模型中,ESB用于组件层以及服务层之间,它能够通过多种通信协议连接并集成不同平台上的组件将其映射成服务层的服务。 

        (1)提供位置透明性的消息路由和寻址服务

        (2)提供服务注册和命名的管理功能。

        (3)支持多种的消息传递范型

        (4)支持多种可以广泛使用的传输协议。

        (5)支持多种数据格式及其相互转换

        (6)提供日志和监控功能。

 

七、微服务

        【微服务】顾名思义,就是很小的服务,所以它属于面向服务架构的一种。

        与面向服务架构的区别类似于 雕版印刷VS活字印刷

        1、微服务的优点

        (1)复杂应用解耦:小服务(且专注于做一件事情),化整为零,易于小团队开发。

        (2)独立:独立开发,独立测试以及独立部署(简单部署)独立运行(每个服务独立在其独立进程中)。 

        (3)技术选型灵活:支持异构,如每个服务使用不同数据库

        (4)容错:故障隔离在单个服务中,通过重试、平稳退化等机制实现应用层容错。

        (5)松耦合,易扩展:可根据需求独立扩展。

 

        2、微服务的缺点

        (1)分布式环境下的数据一致性【更复杂】

        (2)测试的复杂性【服务间依赖测试】

        (3)运维的复杂性 

 

        3、微服务架构模式方案

        (1)聚合器微服务(2)链式微服务(3)数据共享微服务 (4)异步消息传递微服务

 

        4、微服务与SOA的区别

 

八、云计算 

        云计算是集合了大量计算设备和资源,对用户屏蔽底层差异的分布式处理架构,其用户与提供实际服务的计算资源是相分离的。

        1、云计算优点

                超大规模、虚拟化、高可靠性、高可伸缩性、按需服务、成本低【前期投入低、综合使用成本也低】。

        2、云计算【按服务类型分类】

        (1)SaaS【软件即服务】:基于多租户技术实现,直接提供应用程序

        (2)PaaS【平台即服务】虚拟中间件服务器、运行环境和操作系统。

        (3)LaaS【基础设施即服务】:包括服务器、存储和网络等服务。

        3、云计算【按部署方式分类】

        (1)公有云:面向互联网用户需求,通过开放网络提供云计算服务。

        (2)私有云:面向企业内部提供云计算服务。

        (3)混合云:兼顾以上两种情况的云计算服务。

        4、云计算架构

        (1)管理层:提供对所有层次云计算服务的管理功能。

        (2)用户访问层:方便用户使用云计算服务所需的各种支撑服务,针对每个层次的云计算服务都需要提供相应的接口。

        (3)应用层:提供软件服务,如:财务管理系统、客户关系管理系统、商业智能。

        (4)平台层:为用户提供对资源层服务的封装,使用户可以构件自己的应用。

        (5)资源层:提供虚拟化的资源,从而隐藏物理资源的复杂性,如:服务器,存储。

 

九、云原生架构

        云原生是基于分布部署和统一运营的分布式云,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。

        【云原生架构与云计算架构的区别

        云计算是on cloud,在云上,云原生是in clound,在云中。

        1、云原生架构设计原则

        (1)服务化原则:使用微服务。

        (2)弹性原则:可根据业务变化自动伸缩。

        (3)可观测原则:通过日志、链路跟踪和度量。

        (4)韧性原则:面对异常的抵御能力。

        (5)所有过程自动化原则:自动化交付工具。

        (6)零信任原则:默认不信任网络内部和外部的任何人 / 设备 / 系统。

        (7)架构持续演进原则:业务高速迭代情况下的架构与业务平衡。

        2、云原生架构模式

        (1)服务化架构模式:典型代表【微服务】,服务拆分使维护压力大增。

        (2)Mesh化架构模式:把中间件框架(RPC、缓存、异步消息)从业务进程中分离,由Mesh进程完成

        (3)Serverless模式:非常适合于事件驱动的数据计算任务

        (4)存储计算分离模式:各类暂态数据(如session)用云服务保存。

        (5)分布式事务模式:解决微服务模式中多数据源事务问题。

        (6)可观测架构:包括Logging、Tracing、Metrics三个方面。

        (7)事件驱动架构:本质上是一种应用 / 组件间的集成架构模式。

        3、云原生架构反模式

        (1)庞大的单体应用

                【需要多人开发的业务模块,考虑通过服务化进行拆分,并让组织与架构匹配】

        (2)单体应用 “ 硬拆 ” 为微服务(服务拆分要适度)

                【小规模软件的服务拆分(为拆而拆)、数据依赖(服务间数据依赖)、性能降低】

        (3)缺乏自动化能力的微服务

                【手动维护大量微服务是不现实的】

        4、微服务设计约束

        (1)微服务个体约束

                【每个微服务都是独立的,修改一个微服务不能影响另一个微服务】

        (2)微服务于微服务之间的横向关系

                【通过第三方服务注册中心来满足服务的可发现性】

        (3)微服务于数据层之间的纵向约束

                【数据是微服务的 “ 私产 ” ,访问时需要通过微服务】

        (4)全局视角下的微服务分布式约束

                【高效运维整个系统】

        5、云原生应用 

        6、云原生开发 

十、边缘计算

        【边缘计算】是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。

        【边缘计算的本质】计算处理职能本地化。

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

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

相关文章

【C++】STL——queue的介绍和使用、queue的push和pop函数介绍和使用、queue的其他成员函数

文章目录 1.queue的介绍2.queue的使用2.1queue构造函数2.2queue的成员函数(1)empty() 检测队列是否为空,是返回true,否则返回false(2)size() 返回队列中有效元素的个数 (3)front() 返…

如何在Visual Studio Code中用Mocha对TypeScript进行测试

目录 使用TypeScript编写测试用例 在Visual Studio Code中使用调试器在线调试代码 首先,本文不是一篇介绍有关TypeScript、JavaScript或其它编程语言数据结构和算法的文章。如果你正在准备一场面试,或者学习某一个课程,互联网上可以找到许多…

tdengine入门详解

TDengine是什么? TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计,基于C语言开发。 什么是时序数据库?时序数据产生…

C++ 对象数组

**数组元素不仅可以是基本数据类型,也可以是自定义类型。**例如,要存储和处理某单位全体雇员的信息,就可以建立一个雇员类的对象数组。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。 因此,和基…

Libevent开源库的介绍与应用

libeventhttps://libevent.org/ 一、初识 1、libevent介绍 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络&#xff…

Linux系统安装部署MongoDB完整教程(图文详解)

前言:本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程,我的服务器采用的是Centos7,在部署之前我重装了我的服务器,目的是为了干净整洁的给大家演示我是如何一步步的操作的,整体部署还是挺简洁&#xff0c…

如何维护你的电脑:提升性能和延长使用寿命

如何维护你的电脑:提升性能和延长使用寿命 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦&…

【机器学习】西瓜书习题3.3Python编程实现对数几率回归

参考代码 结合自己的理解,添加注释。 代码 导入相关的库 import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt from sklearn import linear_model导入数据,进行数据处理和特征工程 # 1.数据处理&#x…

Go语音介绍

Go语言介绍 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言,是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。 编译型语言——源代码编…

Redis 6.5 服务端的读取缓冲区和输出缓冲区执行源码

通篇全文都是不开启事务,不开启多线程,只有主线程去执行 借鉴 Redis源码与设计剖析 – 18.Redis网络连接库分析 客户端与集群之间数据的交互 IO多路复用与客户端、输出缓冲区和读取缓冲区之间的关系一、读取缓冲区1、新客户端连接时注册从socket读取事件…

【css】解决元素浮动溢出问题

如果一个元素比包含它的元素高&#xff0c;并且它是浮动的&#xff0c;它将“溢出”到其容器之外&#xff1a;然后可以向包含元素添加 overflow: auto;&#xff0c;来解决此问题&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head> <style>…

基于遗传算法的试题组卷(二)

实例讲解 一、准备工作 1、问题实体 问题实体包含编号、类型&#xff08;类型即题型&#xff0c;分为五种&#xff1a;单选&#xff0c;多选&#xff0c;判断&#xff0c;填空&#xff0c;问答&#xff0c; 分别用1、2、3、4、5表示&#xff09;、分数、难度系数、知识点。一…

C++ 智能指针

C 智能指针 为什么需要智能指针&#xff1f;auto_ptrunique_ptrshared_ptrweak_ptr智能指针的核心实现unique_ptr的简单实现Counter的简单实现share_ptr的简单实现weak_ptr简单实现 shared_ptr的线程安全性多线程无保护读写 shared_ptr 可能出现的问题make_shared()share_ptr/u…

卸载本机已安装的node.js(v.16.13.0版本)

因为要用多版本的node&#xff0c;准备安装一个nvm管理&#xff0c;所以需要先卸载掉原来安装的v.16.13.0版本。 记录一下卸载过程 1、在系统设置-应用里卸载node 妈蛋这样卸载报错。。找了下根本没有这个路径 那就只能最简单的方法了&#xff0c;全部删掉 1、删除node的安装…

IDEA用Gradle构建项目时,lombok插件无效的解决办法

Lombok 可用来帮助开发人员消除 Java 的重复代码&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;&#xff0c;比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File -> Settings ->…

通过MySQL删除Hive元数据信息

之前遇到过一个问题&#xff0c;在进行Hive的元数据采集时&#xff0c;因为Hive表的文件已经被删除了&#xff0c;当时是无法删除表&#xff0c;导致元数据采集也发生了问题&#xff0c;所以希望通过删除Hive表的元数据解决上述问题。 之前安装时&#xff0c;经过特定的配置后…

Qt实现自定义QDoubleSpinBox软键盘

在Qt应用程序开发中&#xff0c;经常会遇到需要自定义输入控件的需求。其中&#xff0c;对于QDoubleSpinBox控件&#xff0c;如果希望在点击时弹出一个自定义的软键盘&#xff0c;以便用户输入数值&#xff0c;并将输入的值设置给QDoubleSpinBox&#xff0c;该如何实现呢&#…

【MySQL】MySQL数据类型

文章目录 一、数据类型的分类二、tinyint类型2.1 创建有符号数值2.2 创建无符号数值 三、bit类型三、浮点类型3.1 float3.2 decimal类型 四、字符串类型4.1 char类型4.2 varchar类型 五、日期和时间类型六、枚举和集合类型6.1 enum的枚举值和set的位图结构6.2 查询集合find_in_…

大数据技术之Clickhouse---入门篇---SQL操作、副本

星光下的赶路人star的个人主页 积一勺以成江河&#xff0c;累微尘以崇峻极 文章目录 1、SQL操作1.1 Insert1.2 Update 和 Delete1.3 查询操作1.4 alter操作1.5 导出数据 2、副本2.1 副本写入流程2.2 配置步骤 1、SQL操作 基本上来说传统关系型数据库&#xff08;以 MySQL 为例…

Java 使用 Google Guava 实现接口限流

一、引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version> </dependency>二、自定义注解及限流拦截器 自定义注解&#xff1a;Limiter package com.haita…