当前位置: 首页 > news >正文

微服务、SOA 和 API 之间的区别

在软件开发中,组织的投资方式发生了重大转变,部署了面向架构的方法。这一切都始于 SOA,然后转变为我们称之为微服务的东西。添加到其中的是另一个概念,指定为 API。

在过去的几年里,SOA 和微服务仍然是讨论的话题。随着时间的推移,组织感到需要转变其工作流程并为其软件系统采用微服务。

首先,我们分别定义它们并找出差异所在。

您可能还喜欢: 微服务与 SOA:有什么区别?
微服务、SOA、API

不同的应用程序架构。
API 或应用程序编程接口
API 或应用程序编程接口是开发人员用于启动客户端和服务器之间通信的轻量级协议。API 的目的就是增加透明度,同时允许多个产品或服务相互交互。

最新的 DZone 参考卡

NoSQL 迁移要点


通过在 API 的帮助下添加不同的应用程序,可以轻松升级现有基础设施。当组织需要迁移到云或将其现有应用程序转移到云时,API 可以扩展支持。鉴于 API 的易用性,它可以帮助企业与 IT 团队协作,以便与云原生应用程序集成。这就是微服务概念出现的地方。

大多数云驱动的操作都基于微服务,并且它们使用 API 来连接到微服务。

根据 WSO2,API 现在占互联网流量的 25%。

当开发人员寻求将组织生态系统与云驱动的应用程序连接起来时,API 是最方便的方法之一。

API 的显着特征
概述确定两方连接方式的协议。
允许开发人员通过集成第三方服务来提高开发应用程序的生产力。
允许微服务与其他服务进行通信。
在当今的互联世界中,信息通过 API 共享给外部和内部团队,安全性是首要问题。API 提供对安全标准和安全需求的遵守。
SOA 或面向服务的架构
SOA 是一种面向企业的架构形式。它被视为软件开发的一种形式,其中应用程序的不同模块借助特定于网络的通信协议向另一个模块提供服务。现在,通信可以是任何内容,从传递单个参数到请求一条信息或协作多个服务。

SOA 主要强调由每个组件在独立环境中执行的单独功能的开发。它可以是验证付款或允许第三方登录等任何内容。

SOA架构图

SOA 架构元素
显然,面向服务的架构并不是模块化应用程序,而是连接或组合不同的服务来构建应用程序。简单来说,面向服务的架构更多的是提供服务,而不考虑事实和方式。

您也可以将它们视为微服务的简化版本。它们是松散耦合的,并使用企业总线消息传递协议来启动两个服务之间的通信。

根据 Gartner 的数据:

“SOA 减少了冗余并提高了可用性、可维护性和价值。这产生了更易于使用和维护的可互操作的模块化系统。SOA 创建更简单、更快的系统,从而提高敏捷性并降低总体拥有成本 (TCO)。”
随着时间的推移,精心设计的 SOA 会提高敏捷性。

SOA 的显着特征
SOA 是整体应用程序的粗粒度形式。
SOA 使用 IP 网络与不同的服务进行通信和连接。
SOA 支持多种消息协议,例如 AMQP、MSMQ 和 SOAP。
微服务
微服务作为一个通用术语,是一种软件开发方法,专注于开发模块或较小的应用程序块。稍后,这些可以在任何应用程序中独立部署,并在 API 的帮助下进行通信。与面向服务的架构(使用企业级消息传递协议,特别是 IP)不同,微服务诱导 API 与不同的模块连接。

马丁·福勒名言

换句话说,微服务允许开发人员创建更小的服务,然后将每个服务组合起来作为单个应用程序紧密地工作。将整个应用程序开发为一个独立的概念显得非常繁琐,而微服务减轻了开发人员的任务,使他们能够独立地处理单独的模块,然后集成所有服务以形成应用程序。

每个模块或构建的服务都能够运行自己的进程。这些服务可以与使用轻量级协议(称为 API)的任何其他服务集成。正是这些 API 使两个微服务能够相互通信。

例如,假设您有一个医疗保健门户,并且想要添加一个身份验证页面。您可以做的是创建一个专门用于身份验证的独特应用程序,然后使用任何类型的通信协议将其集成到现有基础设施中。

微服务架构图

微服务架构
微服务的显着特征
微服务消除了集中治理的概念。
允许开发人员构建可以独立运行的较小模块。
允许团队分别处理不同的服务,然后根据需要重新组合它们。
微服务是颗粒化的 SOA。
微服务通常部署在容器中。
当我们将这三者放在一起考虑时,我们知道 API 是开发人员用来启动两个服务或应用程序之间的通信的协议或标准。

兰迪·赫夫纳名言

主要区别 — SOA 与微服务
SOA 是服务驱动的,重点是最大限度地提高服务的可重用性。相反,微服务遵循分散式方法,其中整个应用程序在单独的组件中解耦,每个组件都可以在独立环境中单独使用。
SOA 利用企业总线消息传递协议来促进两个干预方之间的通信,而微服务则领先一步,使用 API 在两个组件之间进行通信。
SOA 旨在增强应用程序的可重用性,遵循尽可能多的共享方法。虽然微服务也可以重用,但它促进了解耦组件来构建不同的应用程序,遵循尽可能少的共享方法。
对于 SOA,应用程序中的任何更改或修改都需要更新整个整体。但对于部署微服务的组织来说,新功能需要新的服务集成。
SOA 使用多种消息传递协议,而微服务更倾向于安全方面,因此嵌入 API、https 等轻量级协议。
共享相同数据存储的服务容易遭受数据泄露。另一方面,微服务为每个应用程序部署独立的数据库,保持所存储信息的完整性。此外,这还有助于提高性能和规模。
SOA 提倡共享多个组件,这会导致数据依赖性的产生。微服务将每个组件耦合成一个独立的单元。这加快或提高了使用微服务构建的系统的速度。当然,这对于投资 SOA 的组织来说是一个很大的缺点。反过来,微服务具有更好的上市时间优势。
微服务是更小的组件,每个组件都旨在实现单一目的。SOA 的规模更大,并且涉及的组件满足多种功能。微服务是更小的组件,使其更易于维护。

相关文章:

微服务、SOA 和 API 之间的区别

在软件开发中,组织的投资方式发生了重大转变,部署了面向架构的方法。这一切都始于 SOA,然后转变为我们称之为微服务的东西。添加到其中的是另一个概念,指定为 API。 在过去的几年里,SOA 和微服务仍然是讨论的话题。随…...

python打印正反直角三角形

我们用while循环&#xff0c;第一行打印一颗星&#xff0c;第二行打印两颗星&#xff0c;依次循环到五颗 我们写while循环时&#xff0c;先定义一个变量&#xff0c;然后在循环中增加值 i0 while < 5:j0while j <i:print(*,end\t)j1print() # 换行i1我们还可以打印反…...

ubuntu安装Miniconda并举例使用

更新系统包 sudo apt update sudo apt upgrade官网下载Miniconda&#xff0c;最好是实体机下载后放进虚拟机&#xff0c;方法可以参考Xftp 7连接服务器或者本地虚拟机文章 https://docs.conda.io/en/latest/miniconda.html#linux-installers 进入安装目录执行&#xff0c;右键…...

如何保护您的数据免受.360勒索病毒的感染

导言&#xff1a; 网络安全漏洞和威胁伴随着我们的日常生活。其中&#xff0c; 360 勒索病毒成为了引发广泛关注的网络威胁之一。本文91数据恢复将深入探索 360 勒索病毒&#xff0c;揭示它背后的黑暗故事和如何防范此类风险。 如果受感染的数据确实有恢复的价值与必要性&#…...

2024计算机保研--哈工大、中山、国防科大

前言 标题中的学校是我在九月前差不多拿到 o f f e r offer offer&#xff0c;且有可能会去的学校&#xff0c;这篇博客也不能算是经验贴&#xff0c;只能算是血泪史吧。趁着我还记得这几个月的经历&#xff0c;还是记录一下吧&#xff0c;刚才刷知乎看了七月哥&#xff08;是…...

Hadoop分布式集群搭建教程

目录 前言环境准备一、创建虚拟机二、虚拟机网络配置三、克隆虚拟机四、Linux系统配置五、Hadoop的部署配置六、Hadoop集群的启动 前言 大数据课程需要搭建Hadoop分布式集群&#xff0c;在这里记录一下搭建过程 环境准备 搭建Haoop分布式集群所需环境&#xff1a; VMware&a…...

学习函数式编程、可变参数及 defer - GO语言从入门到实战

函数是⼀等公⺠、学习函数式编程、可变参数及 defer - GO语言从入门到实战 函数是⼀等公⺠ 在Go语言中&#xff0c;函数可以分配给一个变量&#xff0c;可以作为函数的参数&#xff0c;也可以作为函数的返回值。这样的行为就可以理解为函数属于一等公民。 与其他主要编程语⾔…...

Linux 文件链接

Linux 下的文件链接有两类。一个是类似于 win 电脑的快捷方式&#xff0c;我们称为软链接&#xff0c;软链接也可以叫做符号链接。另一种是通过文件系统的 inode 连接来产生的&#xff0c;类似于 windows 电脑的复制&#xff0c;但是不产生新的文件&#xff0c;我们称为硬链接。…...

1.go web之gin框架

Gin框架 一、准备 1.下载依赖 go get -u github.com/gin-gonic/gin2.引入依赖 import "github.com/gin-gonic/gin"3. &#xff08;可选&#xff09;如果使用诸如 http.StatusOK 之类的常量&#xff0c;则需要引入 net/http 包 import "net/http"二、基…...

工程物料管理信息化建设(十二)——关于工程物料管理系统最后的思考

目录 1 功能回顾1.1 MTO模块1.2 请购模块1.3 采购模块1.4 催交模块1.5 现场管理模块1.6 数据分析和看板模块1.7 其它模块 2 最后几个问题2.1 按管线发料和直接发料重叠2.2 YHA 材料编码的唯一性问题2.3 “合同量单-箱单-入库单” 数据映射 3 关于未来的思考3.1 三个专业之间的关…...

什么是API网关?——驱动数字化转型的“隐形冠军”

什么是API网关 API网关&#xff08;API Gateway&#xff09;是一个服务器&#xff0c;位于应用程序和后端服务之间&#xff0c;提供了一种集中式的方式来管理API的访问。它是系统的入口点&#xff0c;负责接收并处理来自客户端的请求&#xff0c;然后将请求路由到相应的后端服…...

Java 序列化和反序列化为什么要实现 Serializable 接口?

序列化和反序列化 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化. 反序列化&#xff1a;把字节序列恢复为对象的过程称为对象的反序列化. 什么时候需要用到序列化和反序列化呢或者对象序列化的两种用途… &#xff1a; (1) 对象持久化&#xff1a;把对象的…...

【【萌新的SOC学习之GPIO学习 水】】

萌新的SOC学习之GPIO学习 General Purpose I/O 通用I/O zynq-7000 SOC PS 分为四大部分 APU application Processor UintMemoryIO外设Interconnect 内部互联 PL &#xff1a; IO外设 GPIO可以连接通用的设备&#xff08;比如按键&#xff09; 也可以用GPIO模拟其他的协议 GP…...

10-Node.js入门

01.什么是 Node.js 目标 什么是 Node.js&#xff0c;有什么用&#xff0c;为何能独立执行 JS 代码&#xff0c;演示安装和执行 JS 文件内代码 讲解 Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff0c;因为这个特点&#xff0c;它可以用来…...

Redis 的过期键 | Navicat 技术干货

Redis 是一种高性能的内存数据存储&#xff0c;以其速度和多功能性而闻名。其中一个有用的特性是为键设置过期时间的功能。在 Redis 中&#xff0c;为键设置过期时间对于管理数据和确保过时或临时数据自动从数据库中删除是至关重要的。在本文中&#xff0c;我们将探讨在 redis-…...

IDC服务器商是如何保护服务器的数据安全

服务器是作为一个公司存储数据和管理服务的设备&#xff0c;随着网络的不断发展大数据的普遍性&#xff0c;所以数据安全问题也越来越受到企业和个体的重视&#xff0c;那么IDC服务器商家是如何对服务器的数据进行安全保护的呢&#xff1f; 配置防火墙。防火墙是服务器的必备工…...

c++中什么时候用double?

c中什么时候用double? 在C中&#xff0c;通常使用double数据类型来表示浮点数&#xff0c;特别是当需要更高的精度时。以下是一些情况下可以考虑使用double的示例&#xff1a; 1. **需要高精度的计算**&#xff1a;当您需要进行精确的浮点数计算时&#xff0c;double通常比flo…...

TCP/IP(四)TCP的连接管理(一)三次握手

一 tcp连接回顾 部分内容来自小林coding TCP篇 记录的目的&#xff1a; 亲身参与进来,加深记忆 ① 引入 前面我们知道&#xff1a; TCP 是面向连接 [点对点的单播]的、可靠的、基于字节流的传输层通信协议面向连接意味着&#xff1a;在使用TCP之前,通信双方必须先建立一…...

bash上下键选择选项demo脚本

效果如下&#xff1a; 废话不多说&#xff0c;上代码&#xff1a; #!/bin/bashoptions("111" "222" "333" "444") # 选项列表 options_index0 # 默认选中第一个选项 options_len${#options[]}echo "请用上下方向键进行选择&am…...

cf 1886A

题目是输入一个数字&#xff0c;分解成三个数字的和&#xff0c;这三个数字都不相同&#xff0c;并且都不可以被三整除&#xff0c;如果存在输出YES并且输出任意一组可能的三个数字&#xff0c;否则输出NO 代码 #include<bits/stdc.h> using namespace std;int main() …...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...