[架构之路-259]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 面向服务的架构SOA与微服务架构(以服务为最小的构建单位)

news2024/11/25 12:27:58

目录

前言:

二、软件架构层面的复用

三、什么是面向服务的架构SOA

3.1 什么是面向服务的架构

3.2 面向服务架构的案例

3.3 云服务:everything is service一切皆服务

四、什么是微服务架构

4.1 什么是微服务架构

4.2 微服务架构的案例

五、企业服务总线ESB

5.1 什么是企业服务器总线

5.2 常见的企业服务总线


前言:

随着软件规模的扩大,对软件复用的需求越发强烈,有函数级别的复用,有对象了类级别的复用,也有软件组件层的复用,也有架构层面的复用,抽象出软件架构的作用:一面是为了软件产品的需要,另一方面,成功或优秀的软件架构本身也可以被后续软件复用。

二、软件架构层面的复用

在软件架构中,复用是通过将通用的架构模式、设计模式、组件、服务等进行提取和重复使用的方式来实现的。通过复用,可以提高系统的可维护性、可扩展性和可重用性,减少重复开发的工作量,并提高开发效率和质量。实际上,前人总结出来的成功的软件架构或软件架构风格,就是为了被其他或项目复用的。

以下是一些常见的软件架构复用方式:

  1. 分层架构:将系统分为多个层次,每个层次负责不同的功能,通过定义良好的接口和约定,使得每个层次可以被多个应用程序复用。

  2. 领域驱动设计(Domain-Driven Design,DDD):将系统按照业务领域进行划分,并通过领域模型、聚合根等概念来提高领域内的复用性。

  3. 微服务架构:将系统拆分为多个小型、独立的服务,每个服务专注于完成特定的业务功能,通过服务间的通信实现复用。

  4. 中间件和框架:使用现有的中间件和框架,如数据库中间件、消息队列、Web框架等,来提供通用功能,减少开发工作。

  5. 设计模式:使用常用的设计模式,如工厂模式、单例模式、观察者模式等,来解决特定的设计问题,提高系统的可复用性。

  6. 组件化架构:将系统划分为多个组件,每个组件具有独立的功能和接口,可以在不同的应用中进行复用。

复用软件架构的关键在于良好的设计和规范,以及对通用功能和模块的抽象和封装。同时,需要注意在复用过程中平衡通用性和定制性的考虑,以保证复用的有效性和灵活性。

三、什么是面向服务的架构SOA

面向服务的架构SOA是以服务为架构的最小构建单元。

3.1 什么是面向服务的架构

面向服务的架构(Service-Oriented Architecture,SOA)是一种设计原则和架构风格,旨在实现系统的模块化、可扩展和可重用。

在面向服务的架构中,系统被分割为一组相互独立的服务,每个服务代表一个特定的业务功能。这些服务通过定义明确定义的接口和协议进行通信,可以部署在不同的服务器上,使用不同的技术和平台来实现。

以下是面向服务的架构的一些特点和优势:

  1. 松耦合:服务之间通过接口进行通信,彼此不直接依赖。这种松耦合的特点使得系统更加灵活和可维护,能够独立地更新、替换和扩展服务,而不会对其他服务造成影响。

  2. 可重用性:面向服务的架构鼓励将通用的功能封装成服务,并在系统中复用。这种复用性可以减少重复开发工作量,提高开发效率和质量。

  3. 模块化:将系统拆分为多个服务单元,每个服务专注于一个特定的业务功能。这种模块化的设计可以简化系统的复杂性,使得系统更易于理解、测试和维护。

  4. 可扩展性:每个服务可以独立地进行水平扩展,根据实际需求增加或减少服务的实例数量,从而提高系统的性能和容错性。

  5. 跨平台和跨语言:面向服务的架构允许不同的服务使用不同的技术和平台进行实现,使得系统具有更大的灵活性和互操作性。

  6. 业务驱动:面向服务的架构强调与业务需求的紧密对应,使得系统能够更好地适应变化的业务需求和业务流程。

面向服务的架构可以通过使用标准的服务协议(如SOAP、REST)和服务注册与发现机制(如服务目录、服务注册表)来实现服务之间的通信和管理。同时也需要考虑如安全性、事务处理和性能优化等方面的问题来保证系统的稳定性和可靠性。

3.2 面向服务架构的案例

面向服务的架构已被广泛应用于各个领域,下面列举几个实际案例:

  1. 云计算平台:云计算平台如亚马逊AWS、微软Azure和谷歌云平台等采用基于服务的架构。它们将各种基础设施服务(如计算、存储、网络等)以及中间件服务(如消息队列、数据库等)作为独立的可复用服务,通过API进行调用。

  2. 电子商务平台:在线购物网站如亚马逊、eBay和淘宝等采用面向服务的架构。这些平台将商品管理、订单处理、支付服务、物流追踪等功能作为独立的服务,并通过服务间的调用来实现整个电商系统的运作。

  3. 银行和金融系统:面向服务的架构在银行和金融领域也得到广泛应用。例如,银行系统中的支付服务、账户管理、风险评估等功能可以作为独立的服务,通过服务调用来提供各种金融服务。

  4. 知识图谱和搜索引擎:大型知识图谱和搜索引擎,如谷歌搜索、百度和维基百科等,都采用了面向服务的架构。它们将数据存储、索引服务、查询服务等作为独立的服务,通过服务之间的通信和协作来提供高效的搜索和知识获取功能。

  5. 企业服务总线(Enterprise Service Bus,ESB):ESB是一种支持面向服务的架构的中间件技术,用于集成和管理企业内部的各种应用和服务。它提供了统一的消息传递、协议转换、安全性和可靠性保证等功能,使得不同的应用和服务能够无缝地进行交互和集成。

这些案例只是面向服务的架构在实际应用中的几个例子。面向服务的架构在许多领域中具有广泛的适应性和可扩展性,让系统更灵活、可维护和可扩展。

3.3 云服务:everything is service一切皆服务

"云服务:everything is service(一切皆服务)"是云计算领域的一个重要概念,强调了云计算提供的服务化模式和思维方式。

"一切皆服务"意味着将各种计算资源(如计算、存储、数据库、网络等)功能(如人工智能、大数据分析、物联网等)都以服务的形式提供一切的软件功能或实现都可以作为服务!!!!都可以被反复服用!!!

无论是企业还是个人用户,都可以通过云服务提供商的平台来消费和使用这些服务,而无需担心底层的复杂性和维护工作。

云服务采用了面向服务的架构,并通过服务级别协议(Service Level Agreements,SLAs)对服务进行约束和保证。用户可以根据实际需求灵活地选择和使用各种服务,并根据实际使用情况进行弹性扩展和付费。

以下是一些云服务的例子:

  1. 基础设施即服务(Infrastructure as a Service,IaaS):提供虚拟化的计算资源(如虚拟机、存储、网络等),用户可以在云平台上创建和管理自己的虚拟数据中心。

  2. 平台即服务(Platform as a Service,PaaS):提供开发和运行应用程序所需的平台环境,用户可以使用预置的开发工具、运行时环境等来开发和部署应用。

  3. 软件即服务(Software as a Service,SaaS):提供各种应用程序作为服务,用户通过云平台直接使用这些应用,无需关心底层的软件安装和维护。

  4. 数据库即服务(Database as a Service,DBaaS):提供数据库管理系统作为服务,用户可以使用数据库功能来存储和管理数据,无需关心数据库的部署和维护。

  5. 大数据分析即服务(Analytics as a Service,AaaS):提供大数据分析和人工智能服务,用户可以通过云平台使用各种数据分析和机器学习算法来获取洞察和优化业务。

  6. AIaaS(AI as a Service):指的是将人工智能能力作为云服务提供给用户。它允许企业和开发者利用人工智能的能力,而无需构建和维护自己的人工智能基础设施和模型。

        通过"一切皆服务"的理念,云服务将计算资源和应用功能封装成可消费的服务,为用户提供了更灵活、高效和成本效益的方式来构建和管理他们的应用和业务。

四、什么是微服务架构

4.1 什么是微服务架构

微服务架构是一种将一体化的应用程序拆分为多个小型、独立部署的服务的方法每个服务都具有自己的业务功能和相应的 API 接口。每个服务都是运行在其自己的进程中,并且可以使用不同的编程语言、数据库和技术栈。

微服务架构的主要特点如下:

  1. 独立性:每个服务都是独立且自治的,这意味着系统中的其他服务不会因为其中一个服务故障或故障而受到影响。每个服务都有自己的数据存储和处理能力,可以独立管理和扩展。

  2. 灵活性:每个服务可以独立开发、测试和部署,这使得服务的迭代速度更快,可以更快地响应用户需求和市场变化。

  3. 可组合性:每个服务都提供 API 接口,这使得不同的服务可以组合成一个完整的应用程序。这使得应用程序可以更加灵活、可拓展和可维护。

  4. 可替换性:由于每个服务是自治的,所以可以使用不同的技术栈和解决方案来实现每个服务。如果服务出现问题,可以更换使用新技术栈的服务,而不会影响整个系统。

  5. 可扩展性:由于每个服务都是独立的,可以根据需要自由地增加或减少服务的数量。这使得系统可以更加灵活地应对流量高峰以及应用程序规模的变化。

微服务架构的本质是一个分布式系统,需要考虑分布式架构中的各种问题,如服务发现、负载均衡、故障转移、数据管理和安全性等。微服务架构要求开发团队具备更高的技术能力和团队协作能力,但在应对快速变化的市场和业务需求方面具有非常明显的优势。

4.2 微服务架构的案例

微服务架构已经被广泛地应用于众多成功的应用程序中,下面是几个比较具有代表性的案例:

  1. Netflix

Netflix 是一个知名的在线视频平台,它以微服务架构来构建其应用程序。Netflix 将其应用程序拆分为超过 500 个微服务,每个微服务都有自己的部署管道和数据存储方案。Netflix 的微服务架构允许其快速地适应市场,构建并提供新功能和服务。

  1. Uber

Uber 是一家非常成功的系统级的物流运输和出行平台,它主要基于微服务架构构建Uber 的微服务架构允许其将应用程序拆分为多个独立的服务,包括订单管理、支付、定位和路线规划等服务。这使得 Uber 能够快速响应市场需求和路况变化。

  1. Amazon

Amazon 是最早引入微服务架构的公司之一,它使用微服务架构来构建其云服务、市场和库存管理系统。微服务架构为 Amazon 提供了更为灵活和可扩展的系统架构,同时也减少了系统重构的风险。

  1. Airbnb

Airbnb 是一个在线房屋出租平台,它利用微服务架构来构建其核心系统。Airbnb 的微服务架构允许其将应用程序拆分为多个小型服务,包括搜索、订阅、预订和房源管理等服务。微服务架构为 Airbnb 提供了更大的敏捷性,更快的迭代速度和更佳的维护性。

这些公司都已经证明了微服务架构在构建复杂、高度可扩展的应用程序方面的巨大价值,它已经成为构建现代应用程序的一种主流方法。

五、企业服务总线ESB

5.1 什么是企业服务器总线

企业服务总线(Enterprise Service Bus,ESB)是一种中介软件架构,用于促进企业内部不同应用系统之间的集成和通信。ESB 提供了一种统一的、可靠的消息传递机制,以及服务管理和转换功能,使各个系统能够以松耦合的方式相互通信。

ESB 主要包含以下组件和特性:

  1. 消息传递:ESB 通过在不同应用程序之间传递消息来实现集成。消息可以是一种标准格式,如 XML 或 JSON,也可以是特定于某个应用程序的自定义格式。ESB 可以确保消息的可靠投递,并提供消息路由和转换等功能。

  2. 中介器:ESB 充当应用程序之间中介器,负责接收、处理和路由消息。它可以处理不同协议之间的转换,例如将消息从一个应用程序的 SOAP Web 服务转换为另一个应用程序的 REST API。

  3. 服务管理ESB 提供服务注册和发现机制,允许应用程序发布其提供的服务订阅其他服务。这使得应用程序可以通过 ESB 轻松地发现和使用其他应用程序的功能,促进了服务的重用和集成。

  4. 安全性和身份验证:通过提供安全机制和身份验证功能,ESB 可以确保通信在不同系统之间是安全和可信的。它可以处理身份验证和授权,保护敏感数据的传输,并实施访问控制策略。

  5. 监控和日志记录:ESB 提供监控和日志记录功能,可以跟踪消息的流动和处理情况。这使得开发人员和管理员可以实时了解系统的状态和性能,并进行故障排除和优化。

        ESB 的目标是简化企业内部系统集成,并提供灵活、可扩展和可靠的集成解决方案。它使企业能够更容易地实现应用程序之间的互操作性,降低集成成本和复杂性,并加快新功能的开发和交付。

5.2 常见的企业服务总线

以下是一些常见的企业服务总线(ESB)实例:

  1. Oracle Service Bus:Oracle Service Bus 是 Oracle 公司提供的一款综合性 ESB 解决方案。它通过提供中央集成架构、消息路由、转换和基于规则的业务流程编排等功能,帮助企业实现应用系统之间的集成和通信

  2. MuleSoft Anypoint Platform:MuleSoft Anypoint Platform 是一种全面的集成平台,其中包括 ESB 功能。它提供了用于构建、部署和管理 API、应用程序和数据集成的工具和服务。MuleSoft Anypoint Platform 的灵活性和可扩展性使其成为了企业中广泛采用的 ESB 解决方案之一。

  3. IBM Integration Bus:IBM Integration Bus(前身为 IBM WebSphere Message Broker)是 IBM 公司提供的一款企业级 ESB 解决方案。它提供了高度可靠的消息传递、数据转换和路由功能,允许企业内部的多个应用系统相互通信和集成。

  4. Apache ServiceMix:Apache ServiceMix 是一个基于开源的 ESB 和集成平台。它使用 Apache Camel 作为核心引擎,提供了消息路由、转换和流程编排等功能。Apache ServiceMix 具有灵活的插件架构,可以与其他开源技术无缝集成。

  5. TIBCO ActiveMatrix BusinessWorks:TIBCO ActiveMatrix BusinessWorks 是一种全面的集成功能平台,其中包括 ESB 功能。它提供了强大的消息传递、数据转换和流程编排能力,可帮助企业实现不同应用系统之间的高效集成和通信。

这些是一些常见的企业服务总线实例,它们提供了丰富的功能和工具,帮助企业实现应用程序之间的集成和交流。选择适合企业需求的 ESB 解决方案需要综合考虑架构要求、性能需求、可靠性和成本等因素。

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

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

相关文章

使用RSA工具进行对信息加解密

我们在开发中需要对用户敏感数据进行加解密,比如密码 这边科普一下RSA算法 RSA是非对称加密算法,与对称加密算法不同;在对称加密中,相同的密钥用于加密和解密数据,因此密钥的安全性至关重要;而在RSA非对称加密中,有两个密钥&…

PandoraFMS 监控软件 任意文件上传漏洞复现

0x01 产品简介 Pandora FMS 是用于监控计算机网络的软件。 Pandora FMS 允许以可视化方式监控来自不同操作系统、服务器、应用程序和硬件系统(例如防火墙、代理、数据库、Web 服务器或路由器)的多个参数的状态和性能。 0x02 漏洞概述 PandoraFMS upload_head_image.php 接…

队列排序:给定序列a,每次操作将a[1]移动到 从右往左第一个严格小于a[1]的元素的下一个位置,求能否使序列有序,若可以,求最少操作次数

题目 思路&#xff1a; 赛时代码&#xff08;先求右起最长有序区间长度&#xff0c;再求左边最小值是否小于等于右边有序区间左端点的数&#xff09; #include<bits/stdc.h> using namespace std; #define int long long const int maxn 1e6 5; int a[maxn]; int n; …

SpringBoot系列之启动成功后执行业务的方法归纳

SpringBoot系列之启动成功后执行业务逻辑。在Springboot项目中经常会遇到需要在项目启动成功后&#xff0c;加一些业务逻辑的&#xff0c;比如缓存的预处理&#xff0c;配置参数的加载等等场景&#xff0c;下面给出一些常有的方法 实验环境 JDK 1.8SpringBoot 2.2.1Maven 3.2…

机器学习之无监督学习:九大聚类算法

今天&#xff0c;和大家分享一下机器学习之无监督学习中的常见的聚类方法。 今天&#xff0c;和大家分享一下机器学习之无监督学习中的常见的聚类方法。 在无监督学习中&#xff0c;我们的数据并不带有任何标签&#xff0c;因此在无监督学习中要做的就是将这一系列无标签的数…

idea使用maven的package打包时提示“找不到符号”或“找不到包”

介绍&#xff1a;由于我们的项目是多模块开发项目&#xff0c;在打包时有些模块内容更新导致其他模块在引用该模块时不能正确引入。 情况一&#xff1a;找不到符号 情况一&#xff1a;找不到包 错误代码部分展示&#xff1a; Failure to find com.xxx.xxxx:xxx:pom:0.5 in …

NLP项目实战01之电影评论分类

介绍&#xff1a; 欢迎来到本篇文章&#xff01;在这里&#xff0c;我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言&#xff0c;我们将关注情感分析任务&#xff0c;即通过分析电影评论的情感来判断评论是正面的、负面的。 展示&#xff1a; 训练展示如下…

ABAP - Function ALV 01 Function ALV的三大基石

森莫是Function ALV&#xff1f; 业务顾问和用户方面的名词定义为报表&#xff0c;在开发顾问方面定义的名词为ALV 通过调用Function方式展示的ALV叫做FunctionALV.Function的解释:封装好的函数 Function ALV的三大基石 Fieldcat :Function ALV字段级别的处理 Layout …

CentOS服务自启权威指南:手动启动变为开机自启动(以Jenkins服务为例)

前言 CentOS系统提供了多种配置服务开机自启动的方式。本文将介绍其中两种常见的方式&#xff0c; 一种是使用Systemd服务管理器配置&#xff0c;不过&#xff0c;在实际中&#xff0c;如果你已经通过包管理工具安装的&#xff0c;那么服务通常已经被配置为Systemd服务&#…

利用法线贴图渲染逼真的3D老虎模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

让聪明的车连接智慧的路,C-V2X开启智慧出行生活

“聪明的车 智慧的路”形容的便是车路协同的智慧交通系统&#xff0c;从具备无钥匙启动&#xff0c;智能辅助驾驶和丰富娱乐影音功能的智能网联汽车&#xff0c;到园区的无人快递配送车&#xff0c;和开放的城市道路上自动驾驶的公交车、出租车&#xff0c;越来越多的车联网应用…

ELK(四)—els基本操作

目录 elasticsearch基本概念RESTful API创建非结构化索引&#xff08;增&#xff09;创建空索引&#xff08;删&#xff09;删除索引&#xff08;改&#xff09;插入数据&#xff08;改&#xff09;数据更新&#xff08;查&#xff09;搜索数据&#xff08;id&#xff09;&…

【Copilot】Edge浏览器的copilot消失了怎么办

这种原因&#xff0c;可能是因为你的ip地址的不在这个服务的允许范围内。你需要重新使用之前出现copilot的ip地址&#xff0c;然后退出edge的账号&#xff0c;重新登录一遍&#xff0c;最后重启edge&#xff0c;就能够使得copilot侧边栏重新出现了。

mac苹果电脑清除数据软件CleanMyMac X4.16

在数字时代&#xff0c;保护个人隐私变得越来越重要。当我们出售个人使用的电脑&#xff0c;亦或者离职后需要上交电脑&#xff0c;都需要对存留在电脑的个人信息做彻底的清除。随着越来越多的人选择使用苹果电脑&#xff0c;很多人想要了解苹果电脑清除数据要怎样做才是最彻底…

Endnote在word中加入参考文献及自定义参考文献格式方式

第一部分&#xff1a;在word中增加引用步骤 1、先下载对应文献的endnote引用格式&#xff0c;如在谷歌学术中的下载格式如下&#xff1a; 2、在endnote中打开存储env的格式库&#xff0c;导入对应下载的文件格式&#xff1a;file>import>file>choose,import对应文件&a…

套接字应用程序

这章节是关于实现 lib_chan 库的 。 lib_chan 的代码在 TCP/IP 之上实现了一个完整的网络层&#xff0c;能够提供认证和Erlang 数据流功能。一旦理解了 lib_chan 的原理&#xff0c;就能量身定制我们自己的通信基础结构&#xff0c;并把它叠加在TCP/IP 之上了。 就lib_chan 本身…

PSP - 计算蛋白质复合物链间接触的残基与面积

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134884889 在蛋白质复合物中&#xff0c;通过链间距离&#xff0c;可以计算出在接触面的残基与接触面的面积&#xff0c;使用 BioPython 库 与 SA…

在Pytorch中使用Tensorboard可视化训练过程

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 本节课我们来讲一下如何在pytouch当中去使用我们的tensorboard 对我们的训练过程进行一个可视化 左边有一个visualizing models data and training with tensorboard 主要是这么一个教程 那么这里…

28BYJ-48步进电机的驱动

ULN2003的工作原理 28BYJ48可以用ULN2003来驱动&#xff0c;STM32使用开漏模式外接5V上拉电阻也可以产生5V电压&#xff0c;为什么不直接使用单片机的 GPIO来驱动的原因是虽然电压符合电机的驱动要求&#xff0c;但单片机引脚产生的驱动电流太小&#xff0c;因此驱动步进电机要…

IBM Qiskit量子机器学习速成(四)

量子核机器学习 一般步骤 量子核机器学习的一般步骤如下 定义量子核 我们使用FidelityQuantumKernel类创建量子核&#xff0c;该类需要传入两个参数&#xff1a;特征映射和忠诚度(fidelity)。如果我们不传入忠诚度&#xff0c;该类会自动创建一个忠诚度。 注意各个类所属的…