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

目录

前言:

二、软件架构层面的复用

三、什么是面向服务的架构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.mzph.cn/news/208877.shtml

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

相关文章

树莓派 5 - Raspberry Pi 5 入门教程

系列文章目录 文章目录 ​​​​​​​ 前言 如果您是第一次使用 Raspberry Pi,请参阅我们的入门指南(how to get started)。 Raspberry Pi 5 Raspberry Pi 5 配备了运行频率为 2.4GHz 的 64 位四核 Arm Cortex-A76 处理器,CPU 性…

LangChain+通义千问+AnalyticDB向量引擎保姆级教程

本文以构建AIGC落地应用ChatBot和构建AI Agent为例,从代码级别详细分享AI框架LangChain、阿里云通义大模型和AnalyticDB向量引擎的开发经验和最佳实践,给大家快速落地AIGC应用提供参考。 前言 通义模型具备的能力包括: 1.创作文字&#xf…

【已解决】SpringBoot Maven 打包失败:class lombok.javac.apt.LombokProcessor 错误

文章目录 出错原因解决办法总结 最新项目部署的时候&#xff0c;出现了一个maven打包失败的问题&#xff0c;主要是lombok这个组件出的问题&#xff0c;具体的错误信息如下&#xff1a; 我的lombok版本如下&#xff1a; <dependency><groupId>org.projectlombok&l…

Android View.inflate 和 LayoutInflater.from(this).inflate 的区别

前言 两个都是布局加载器&#xff0c;而View.inflate是对 LayoutInflater.from(context).inflate的封装&#xff0c;功能相同&#xff0c;案例使用了dataBinding。 View.inflate(context, layoutResId, root) LayoutInflater.from(context).inflate(layoutResId, root, fals…

nodejs+vue+微信小程序+python+PHP的黄山旅游景点购票系统设计与实现-计算机毕业设计推荐

本文首先对该系统进行了详细地描述&#xff0c;然后对该系统进行了详细的描述。管理人员增加了系统首页、个人中心、用户管理、景点分类管理、景点简介管理、旅游路线管理、文章分类管理、公告文章管理、系统管理理等功能。黄山旅游景点购票系统是根据当前的现实需要&#xff0…

mysql 链接超时的几个参数详解

mysql5.7版本中&#xff0c;先查看超时设置参数&#xff0c;我们这里只关注需要的超时参数&#xff0c;并不是全都讲解 show variables like %timeout%; connect_timeout 指的是连接过程中握手的超时时间,在5.0.52以后默认为10秒&#xff0c;之前版本默认是5秒&#xff0c;主…

【vscode写vue代码是白色怎么办】

【vscode写vue代码是白色怎么办】 在插件列表中搜索Vetur 安装即可

Redis 命令全解析之 Hash类型

文章目录 ⛄介绍⛄命令⛄RedisTemplate API⛄应用场景 ⛄介绍 Hash类型&#xff0c;也叫散列&#xff0c;其value是一个无序字典&#xff0c;类似于Java中的 HashMap 结构。 String结构是将对象序列化为JSON字符串后存储&#xff0c;当需要修改对象某个字段时很不方便&#xf…

降维技术——PCA、LCA 和 SVD

一、说明 降维在数据分析和机器学习中发挥着关键作用&#xff0c;为高维数据集带来的挑战提供了战略解决方案。随着数据集规模和复杂性的增长&#xff0c;特征或维度的数量通常变得难以处理&#xff0c;导致计算需求增加、潜在的过度拟合和模型可解释性降低。降维技术通过捕获数…

用队列实现栈

问题描述&#xff1a; 请你仅用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通队列的全部四种操作&#xff08;push、top、pop和empty&#xff09;。 实现MyStack类&#xff1a; void push(int x) 将元素x压入栈顶。int pop()移除并返回栈顶…

手写 Promise:深入理解异步编程的基石

手写 Promise&#xff1a;深入理解异步编程的基石 本文将带您逐步实现一个简单的 Promise&#xff0c;以帮助您深入理解异步编程的基本概念。通过自己动手编写 Promise 的过程&#xff0c;您将更好地理解 Promise 的工作原理和常见用法&#xff0c;并能够应用于实际项目中。 …

什么是网站劫持

网站劫持是一种网络安全威胁&#xff0c;它通过非法访问或篡改网站的内容来获取机密信息或者破坏计算机系统。如果您遇到了网站劫持问题&#xff0c;建议您立即联系相关的安全机构或者技术支持团队&#xff0c;以获得更专业的帮助和解决方案。

Angular 进阶之四:SSR 应用场景与局限

应用场景 内容丰富&#xff0c;复杂交互的动态网页&#xff0c;对首屏加载有要求的项目&#xff0c;对 seo 有要求的项目&#xff08;因为服务端第一次渲染的时候&#xff0c;已经把关键字和标题渲染到响应的 html 中了&#xff0c;爬虫能够抓取到此静态内容&#xff0c;因此更…

【面试专题】MySQL篇①

1.MySQL中&#xff0c;如何定位慢查询? ①介绍一下当时产生问题的场景&#xff08;我们当时的一个接口测试的时候非常的慢&#xff0c;压测的结果大概5秒钟&#xff09; ②我们系统中当时采用了运维工具&#xff08; Skywalking &#xff09;&#xff0c;可以监测出哪个接口…

PostgreSQL从小白到高手教程 - 第38讲:数据库备份

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第38讲&#…

running小程序重要技术流程文档

一、项目文件说明&#xff1a; &#xff08;注&#xff1a;getMyMoney无用已删除&#xff09; 二、重要文件介绍 1.reinfo.js&#xff1a;位于utils文件下&#xff0c;该文件封装有统一的请求URL&#xff0c;和请求API同意封装供页面调用&#xff1b;调用时候需要在页面上先…

【C语言】操作符详解(一):进制转换,原码,反码,补码

目录 操作符分类 2进制和进制转换 2进制转10进制 10进制转2进制 2进制转8进制和16进制 2进制转8进制 2进制转16进制 原码、反码、补码 操作符分类 操作符中有一些操作符和二进制有关系&#xff0c;我们先铺垫一下二进制的和进制转换的知识。 2进制和进制转换 其实我们经…

vertica主键列能插入重复值的处理办法

问题描述 开发同事反馈在vertica中创建含主键列的表中插入重复数据时没有进行校验&#xff0c;插入重复值成功。经过测试着实可以插入重复值&#xff0c;这个坑有些不一样。 创建表和插入语句如下&#xff1a; --创建表 CREATE TABLE dhhtest(ID VARCHAR(64) PRIMARY KEY );…

使用Microsoft Dynamics AX 2012 - 5. 生产控制

生产控制的主要职责是生产成品。为了完成这项任务&#xff0c;制造业需要消耗物品和资源能力&#xff08;人员和机械&#xff09;。制造过程可能包括半成品的生产和库存。半成品是指物品包括在成品材料清单中。 制造业的业务流程 根据公司的要求&#xff0c;您可以选择申请Dy…

某马点评——day04

达人探店 发布探店笔记 改一下&#xff0c;图片保存路径就可以直接运行测试了。 查看探店笔记 Service public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IBlogService {Resourceprivate IUserService userService;Overridepublic Resu…