软考:CORBA架构

news2024/11/23 12:40:13

CORBA过时了吗

CORBA指南

个人小结:
IPC,进程间通信,Socket应用在不同机器之间的通信
RPC是一种技术思想而非一种规范

  • 但站在八九十年代的当口,简单来说,就是我在本地调用了一个函数,或者对象的方法,实际上是调用了远程机器上的函数,或者远程对象的方法,但是这个通信过程对于程序员来说是透明的,即达到了一种位置上的透明性。

RPC,远程过程调用中间件。
为什么说是一场噩梦

  • 数据格式和编码不同
  • 以前没有跨平台的语言

所以后面出现了CORBA架构,但是随着Java的出现,EJB框架,自身就支持了RPC调用。

RPC可以解决后台的瓶颈问题,就是说传统的RPC,需要特定的框架来支持。

说白了,就是如何传递对象,后面使用XML传递,再后来,使用Web Service SOAP协议来描述,通过HTTP、TCF或者传输协议进行传递。

CORBA

客户端和服务端架构下,分布式调用的产物。
ORB 对象请求代理,处理通信过程
IDL:接口描述语言,共享接口定义,通过编译工具可以将IDL文件编译成多种语言的客户端stub代码和服务端skeleton代码。

分布式对象解决方案,解决的问题是什么?

分布式对象解决方案主要解决的问题包括:

  1. 跨平台通信:分布式对象技术允许不同硬件平台、操作系统和编程语言之间的通信。它通过中间件来屏蔽网络硬件平台的差异性和操作系统与网络协议的异构性,使得应用软件能够比较平滑地运行于不同平台上。

  2. 对象间的方法调用:在分布式系统中,对象可能分布在不同的地址空间和网络节点上。分布式对象解决方案允许这些对象之间进行方法调用,就像它们在同一个进程中一样。

  3. 数据一致性:在分布式系统中,由于数据分布在不同的节点上,保证数据的一致性是一个挑战。分布式对象解决方案通过事务管理和锁机制来确保数据的一致性。

  4. 容错性和可靠性:分布式系统可能面临节点故障的问题。分布式对象解决方案通过冗余和故障转移机制来提高系统的容错性和可靠性。

  5. 扩展性:随着数据量的增长,系统需要动态扩展以适应不断增长的需求。分布式对象解决方案支持通过添加更多的节点来扩展系统,从而提高存储容量和处理能力。

  6. 安全性:分布式系统需要保护数据免受未授权访问和篡改。分布式对象解决方案提供数据加密和访问控制等安全功能来保护数据的安全性。

  7. 分布式事务处理:在跨多个数据库或服务的事务操作中,需要保证事务的一致性、隔离性、持久性和原子性。分布式对象解决方案提供了如两阶段提交(2PC)、三阶段提交(3PC)和Try-Confirm-Cancel(TCC)等分布式事务解决方案。

  8. 分布式锁:为了解决分布式系统中的并发问题,确保在多个节点上同时访问共享资源时的数据一致性和安全性,分布式对象解决方案提供了分布式锁机制,如基于Redis或Zookeeper的分布式锁。

  9. 性能优化:分布式对象存储解决方案关注系统的性能优化,包括网络延迟、磁盘I/O、CPU利用率等方面的优化,以提高系统的整体性能和响应速度。

  10. 元数据管理:在分布式对象存储中,元数据的管理至关重要,因为它包含了关于对象的信息,如名称、大小、创建时间、修改时间以及存储位置等。高效的元数据管理系统能够快速响应客户端的查询请求,并指导数据访问路径,提高数据访问的效率和准确性。

这些解决方案使得分布式系统能够更加灵活、可扩展、可靠和安全地处理大规模数据和复杂的计算任务。

Java语言本身跨平台,Java RMI只专注于一种语言的解决方案,编写简单。无需CORBA那样为了适配各种语言而引入IDL。 这句话怎么理解?

这句话主要在比较Java RMI(Remote Method Invocation)和CORBA(Common Object Request Broker Architecture)两种分布式计算技术,强调了Java RMI在特定场景下的优势。下面是对这句话的详细解释:

Java语言本身跨平台:

Java语言设计之初就提出了“一次编写,到处运行”(Write Once, Run Anywhere,简称WORA)的理念。这意味着用Java编写的程序可以在不同的操作系统上运行,而无需修改代码。这是因为Java程序在运行时会被编译成字节码(.class文件),这些字节码可以在任何安装了Java虚拟机(JVM)的平台上执行。
Java RMI专注于Java语言:

Java RMI是一种Java特有的技术,它允许Java程序调用运行在其他Java虚拟机上的Java对象的方法。由于RMI是为Java语言设计的,因此它不需要像CORBA那样支持多种编程语言。
编写简单:

Java RMI的API相对简单,Java开发者可以比较直观地使用它来实现远程方法调用。开发者只需要继承java.rmi.Remote接口并实现相应的远程接口,然后使用java.rmi.server.UnicastRemoteObject类来导出远程对象,就可以进行远程调用了。
无需CORBA那样的IDL:

CORBA是一种更为通用的分布式计算框架,它支持多种编程语言。为了实现不同语言之间的互操作性,CORBA引入了接口定义语言(Interface Definition Language,简称IDL)。IDL是一种独立于编程语言的接口描述语言,它定义了远程对象的接口。开发者需要使用IDL来定义接口,然后使用IDL编译器生成不同语言的存根代码(Stubs和Skeletons),以实现不同语言之间的通信。
相比之下,Java RMI不需要IDL,因为它只关注Java语言。Java RMI在编译时自动生成远程对象的存根代码,这简化了开发过程,减少了开发者需要编写的代码量。
总结来说,这句话强调了Java RMI在Java语言环境下的优势:它利用了Java的跨平台特性,提供了一种简单直观的方式来实现Java程序之间的远程方法调用,而无需像CORBA那样为了支持多种语言而引入复杂的IDL机制。这使得Java RMI在纯Java环境中的分布式计算变得更加容易和高效。

RPC和目前的Web Rest关系对比

RPC(Remote Procedure Call,远程过程调用)是一种允许一个程序(客户端)通过网络向另一个程序(服务器)请求服务的协议。它使得开发者可以像调用本地函数一样调用远程服务器上的函数或方法,而无需关心底层网络通信的细节

HTTP + JSON + REST是一种常见的Web服务实现方式。HTTP是一种应用层通信协议,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,而REST(Representational State Transfer)是一种软件架构风格,用于设计网络服务。RESTful API通常使用HTTP动词(如GET、POST、PUT、DELETE)来操作资源,并通过URI(Uniform Resource Identifier)来标识资源的位置

RPC和HTTP + JSON + REST的关系和区别主要体现在以下几个方面:

通信协议:

RPC可以使用多种传输协议,如TCP、UDP、HTTP等,而HTTP + JSON + REST主要基于HTTP协议。
RPC的通信协议可以自定义,而HTTP是一种标准化的协议。
数据格式:

RPC可以使用多种数据格式,如XML、JSON、Protocol Buffers等,而HTTP + JSON + REST通常使用JSON作为数据交换格式。
JSON因其轻量级和易于使用,成为RESTful API最常用的数据格式。
服务契约:

RPC通常需要一个接口定义语言(IDL)来定义服务接口,而RESTful API的服务契约是通过HTTP方法和URL来定义的。
RESTful API的接口设计遵循REST原则,强调资源的概念,而RPC更侧重于函数或操作的调用。
跨语言能力:

RPC框架如gRPC支持多种语言,可以实现跨语言的服务调用,而RESTful API由于基于HTTP和JSON,也具有很好的跨语言能力。
开发和使用:

RPC框架通常提供了客户端存根和服务器端骨架的生成,简化了远程调用的开发。例如,gRPC使用Protocol Buffers作为其接口定义语言,并能生成多种语言的存根代码

RESTful API的开发通常更直观,因为它基于HTTP方法和资源的概念,易于理解和使用。
适用场景:

RPC适合于需要高度抽象和封装的分布式系统内部通信,可以提供更丰富的远程调用功能。
RESTful API适合于构建面向公众的Web服务,因为它简单、易于理解和使用,且易于与HTTP缓存、代理等Web基础设施集成。
总的来说,RPC和HTTP + JSON + REST都是实现分布式系统和服务导向架构的有效手段,选择使用哪种技术取决于具体的应用场景和需求。RPC提供了更多的控制和灵活性,而HTTP + JSON + REST则以其简单性和广泛的适用性而流行。

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

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

相关文章

uvm_info、uvm_warning,uvm_error、uvm_fatal

1、warning/error/fatal调试语句 调试语句除了uvm_info,UVM内部根据问题的严重性(severity)由低到高,还引入了uvm_warning/uvm_error/uvm_fatal。 它们也是UVM预定义的宏,格式跟umv_info很像,只是不再需要…

int main(int argc,char* argv[])详解

#include <stdio.h> //argc 是指命令行输入参数的个数; //argv[]存储了所有的命令行参数, //arg[0]通常指向程序中的可执行文件的文件名。在有些版本的编译器中还包括程序文件所在的路径。 //如:"d:\Production\Software\VC_2005_Test\Win32控制台应用程序\Vc_T…

Kafka-Windows搭建全流程(环境,安装包,编译,消费案例,远程连接,服务自启,可视化工具)

目录 一. Kafka安装包获取 1. 官网地址 2. 百度网盘链接 二. 环境要求 1. Java 运行环境 (1) 对 java 环境变量进行配置 (2) 下载完毕之后进行解压 三. 启动Zookeeper 四. 启动Kafka (1) 修改Conf下的server.properties文件&#xff0c;修改kafka的日志文件路径 (2)…

软件分享丨Marktext 编辑器

Marktext是一款开源免费的Markdown编辑器&#xff0c;它具有简洁优雅的界面设计和强大的功能&#xff0c;支持多种Markdown语法&#xff0c;包括表格、流程图、甘特图、数学公式、代码高亮等。Marktext还支持导出HTML和PDF格式的文档&#xff0c;非常适合需要编写Markdown文档的…

sersync实时同步部署案例

目录 sersync介绍 案例信息 操作步骤 服务端部署 客户端部署 创建存储目录 安装sersync 修改配置文件 启动服务 停止服务 测试 sersync介绍 sersync是一个基于inotifyrsync的实时文件同步工具&#xff0c;通过监控目录的变动达到实时同步的目的。 案例信息 拓扑…

【微软商店平台】如何将exe打包上传微软商店

打开微软合作者中心&#xff1a;https://partner.microsoft.com/en-us/dashboard/home点击App and Games板块可以创建项目。 3. 重新生成包含私钥的自签名证书 运行以下命令&#xff0c;确保生成的证书包含私钥&#xff1a; New-SelfSignedCertificate -Type CodeSigning -Su…

Git的初次使用

一、下载git 找淘宝的镜像去下载比较快 点击这里 二、配置git 1.打开git命令框 2.设置配置 git config --global user.name "你的用名"git config --global user.email "你的邮箱qq.com" 3.制作本地仓库 新建一个文件夹即可&#xff0c;然后在文件夹…

从零开始:构建一个高效的开源管理系统——使用 React 和 Ruoyi-Vue-Plus 的实战指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

QT界面开发:图形化设计、资源文件添加

设计界面介绍 此时我们创建项目时就可以选择添加UI选项了。 添加完之后&#xff0c;我们可以看到&#xff0c;文件中多出了一个存放界面文件的目录&#xff0c;下面有个.ui的界面文件。甚至pro的项目文件中也会添加一项内容。 我们点击界面文件中的.ui文件&#xff0c;我们可以…

mono源码交叉编译 linux arm arm64全过程

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

有道在线翻译外,这三款翻译工具值得一试!

在众多翻译工具中&#xff0c;有道在线翻译是很多小伙伴都会用的。而市场上当然也有很多好用的翻译工具&#xff0c;这里就来给大家介绍几个&#xff01; 福昕在线翻译 直达链接&#xff1a; fanyi.pdf365.cn/ 操作教程&#xff1a;立即获取 这也是一款在线翻译工具。它以…

解决 VScode 每次打开都是上次打开的文件问题

每次使用 VScode 打开总是上次的文件&#xff0c;可以简单设置即可&#xff0c;记录一下。 VScode Visual Studio Code&#xff08;简称VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构…

【分布式知识】分布式对象存储组件-Minio

文章目录 什么是minio核心特点&#xff1a;使用场景&#xff1a;开发者工具&#xff1a;社区和支持&#xff1a; 核心概念什么是对象存储&#xff1f;MinIO 如何确定对对象的访问权限&#xff1f;我可以在存储桶内按文件夹结构组织对象吗&#xff1f;如何备份和恢复 MinIO 上的…

【力扣 + 牛客 | SQL题 | 每日4题】牛客大厂笔试真题SQLW6, W7, W8

1. 牛客大厂笔试真题SQLW6&#xff1a;统计所有课程参加培训人次 1.1 题目&#xff1a; 描述 某公司员工培训信息数据如下&#xff1a; 员工培训信息表cultivate_tb(info_id-信息id,staff_id-员工id,course-培训课程)&#xff0c;如下所示&#xff1a; 注&#xff1a;该公…

不依赖F8键,如何快速进入电脑安全模式

如果不希望通过狂按F8键进入安全模式&#xff0c;可以尝试以下几种方法来进入电脑的安全模式&#xff1a; 方法一&#xff1a;使用Ctrl键 关闭电脑并重新启动。在电脑启动过程中&#xff0c;按下Ctrl键&#xff08;需要在Windows系统启动画面出现之前就开始按&#xff09;。当…

基于Django+Python的房屋信息可视化及价格预测系统设计与实现(带文档)

项目运行 需要先安装Python的相关依赖&#xff1a;pymysql&#xff0c;Django3.2.8&#xff0c;pillow 使用pip install 安装 第一步&#xff1a;创建数据库 第二步&#xff1a;执行SQL语句&#xff0c;.sql文件&#xff0c;运行该文件中的SQL语句 第三步&#xff1a;修改源…

Linux: network: wireshark IO图的一个问题

今天遇到一个问题&#xff0c;发现wireshark画的IO图&#xff0c;前几秒没有数据&#xff0c;但是根据Raw的pcap看&#xff0c;是有包的&#xff0c;这就迷惑了。 经同事提醒&#xff0c;这个IO在设置了多个画图filter的时候&#xff0c;可能导致开始前几秒没有输出。如下图 这…

Java中Thread类的基本认识与使用(如果想知道Java中有关Thread类的基本知识,那么只看这一篇就足够了!)

前言&#xff1a;在Java中&#xff0c;Thread类是实现多线程编程的核心。它允许程序同时执行多个任务&#xff0c;提高应用程序的响应能力和性能。通过Thread类&#xff0c;开发者可以轻松创建和管理线程&#xff0c;并实现复杂的并发操作。接下来&#xff0c;我们将探讨Thread…

Java中自增自减,赋值,逻辑,三元运算符

自增自减运算符 在某个变量前面或者后面加一--在某个变量前面或者后面减一 可以看见&#xff0c;当a输出时&#xff0c;a是没有变化的&#xff0c;说明如果是在变量后就是先使用再增加&#xff0c;而b输出时&#xff0c;b增加了1&#xff0c;说明如果是在变量前面就是先增加再…

机器人转人工时,开启实时质检(mod_cti基于FreeSWITCH)

文章目录 前言联系我们实现步骤1. 修改拨号方案2. 启用拨号方案 前言 在客户与机器人对话中&#xff0c;是不能开启质检功能的。因为机器人识别会与质检识别产生冲突。如果用户想通过机器人转接到人工时&#xff0c;开启质检功能&#xff0c;记录客户与人工之间的对话。应该如…