软考:CORBA架构

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.rhkb.cn/news/459536.html

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

相关文章

沧穹科技室内音频“北斗”定位技术亮相第三届北斗规模应用国际峰会

10月24日-28日,由国家发展改革委、国家网信办、交通运输部、湖南省人民政府共同主办的第三届北斗规模应用国际峰会于株洲国际会展中心隆重开幕。沧穹科技总经理戴坚先生受邀出席开幕式,公司自研室内音频“北斗”定位产品亮相北斗规模应用示范场景区。 峰…

NSSCTF刷题篇web部分

源码泄露 [FSCTF 2023]寻找蛛丝马迹 这个源码泄露,可以记录一下,涉及的知识点比较多 打开环境 查看源码, 第一段flag 乱码,恢复一下 乱码恢复网站:乱码恢复 (mytju.com) 剩下的就只说方法 http://node4.anna.nss…

Pytest-Bdd-Playwright 系列教程(2):支持在多浏览器、多环境中执行测试

Pytest-Bdd-Playwright 系列教程(2):支持在多浏览器、多环境中执行测试 前言一、 修改 conftest.py 文件二、创建配置文件三、修改search_steps.py文件四、运行测试总结 前言 本文教程知识点: 支持在多浏览器、多环境中执行测试 …

【ROS概述】C++运行hello world

Python和C通用步骤: 一、创建工作空间并初始化 1、新建工作空间(work space)——使用终端(ctrlaltT) mkdir -p 空间名称/src 2、进入工作空间 cd 空间名称 可以在文件里看到同步变化,并且demo01_ws文…

SpringBoot项目上高并发问题的解决方案

案例:多个用户同时购买数量为1的商品,所以只能有一个购买成功 不加锁 会重复购买 乐观锁,加字段处理,在并发少的时候可以使用 加版本号字段,第一次查询数量的时候读取到版本号,更新数量时用同样的版本号更新…

前端经典【面试题】持续更新HTML、CSS、JS、VUE、FLUTTER、性能优化等

HTML/CSS 面试题 什么是语义化 HTML&#xff1f; 说明&#xff1a;语义化 HTML 使用 HTML 标签来描述内容的含义&#xff0c;而不仅仅是其外观。使用语义化标签可以提高可读性和可访问性&#xff0c;并对 SEO 友好。示例&#xff1a; <header><h1>网站标题</h1&…

服务器数据恢复—异常断电导致服务器挂载分区无法访问的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌服务器同品牌存储&#xff0c;Linux centos7EXT4文件系统。 服务器故障&#xff1a; 意外断电导致服务器操作系统不能正常启动。经过修复后系统可以正常启动&#xff0c;但是挂载的分区无法正常访问。使用fsck修复这个问题分区&#xff…

gin入门教程(7): 使用 Logrus + Lumberjack 创建日志中间件

结合 Logrus 和 Lumberjack&#xff0c;可以创建一个高效的日志中间件&#xff0c;用于记录请求和响应。以下是实现步骤&#xff1a; 1. 安装依赖 首先&#xff0c;确保安装了 Logrus 和 Lumberjack&#xff1a; go get github.com/sirupsen/logrus go get gopkg.in/natefin…

汉明距离汉明重量

目录 汉明距离汉明重量检错&纠错应用场景例题 汉明距离 在信息论中&#xff0c;两个等长字符串之间的汉明距离&#xff08;英语&#xff1a;Hamming distance&#xff09;是两个字符串对应位置的不同字符的个数。换句话说&#xff0c;它是将一个字符串变换成另外一个字符串…

v4.7版本使用线下付款方式不给管理员发送新订单通知问题修复

在app/api/controller/v1/order/StoreOrderController.php文件中&#xff0c;将红框内的代码注释&#xff0c;加上绿框的代码即可修复 if ($this->services->setOrderTypePayOffline($order[order_id])) {event(NoticeListener, [$order, admin_pay_success_code]);retur…

行为设计模式 -命令模式- JAVA

命令模式 一.简介二. 案例2.1 接收者&#xff08;Receiver&#xff09;2.2 命令接口实现对象&#xff08;ConcreteCommand&#xff09;2.3 调用者&#xff08; invoker&#xff09;2.4 获取Receiver对象2. 5 装配者客户端测试 三. 结论3.1 要点3.2 示例 前言 本设计模式专栏写了…

MySQL 数据库备份与恢复全攻略

MySQL 数据库备份与恢复全攻略 引言 在现代应用中&#xff0c;数据库是核心组件之一。无论是个人项目还是企业级应用&#xff0c;数据的安全性和完整性都至关重要。为了防止数据丢失、损坏或意外删除&#xff0c;定期备份数据库是必不可少的。本文将详细介绍 MySQL 数据库的备…

SQL Server 中,将单行数据转换为多行数据

在 SQL Server 中&#xff0c;将单行数据转换为多行数据通常涉及到将某个字段中的逗号分隔的值拆分成多行。这种操作通常称为“拆分”或“展开”&#xff08;Explode&#xff09;。以下是一些常用的方法来实现这一目标&#xff1a; 1. 使用内置函数 STRING_SPLIT 从 SQL Serv…

rabbitmq 使用注意事项

1&#xff0c;注意开启的端口号&#xff0c;一共四个端口号&#xff0c;1883是mqtt连接的端口号&#xff0c;如果没开&#xff0c;是连接不上的需要手动起mqtt插件。 //开始mqtt插件服务 rabbitmq-plugins enable rabbitmq_mqtt 2&#xff0c;15672端口是http网页登录的管理后…

智能汽车时代的“地平线”,下一个十年的“宁王”

文&#xff5c;刘俊宏 编&#xff5c;王一粟 在港交所上市的敲锣声中&#xff0c;余凯不会忘记9年前从百度大楼中走出&#xff0c;决定从一名科学家转型成一名创业者的夏天。 选择的创业方向&#xff0c;作为大名鼎鼎NEC实验室&#xff08;全球最早的人工智能实验室&#xf…

基于单片机的废气监测系统研究与实现

【 摘 要 】 如今为了尽早发现和防治各种各样的废气,减少对人们的危害,保护自身以及个人或者公共财产安全,需要自动化的报警器给人们提前预警。 随着 “ 科技时代 ” 的快速发展,传感器技术取得了飞速的发展和提升,应用它的地方越来越多,市场需求越来越紧迫,技术要求也越…

【C++初阶】模版入门看这一篇就够了

文章目录 1. 泛型编程2. 函数模板2. 1 函数模板概念2. 2 函数模板格式2. 3 函数模板的原理2. 4 函数模板的实例化2. 5 模板参数的匹配原则2. 6 补充&#xff1a;使用调试功能观察函数调用 3. 类模板3 .1 类模板的定义格式3. 2 类模板的实例化 1. 泛型编程 在C语言中&#xff0…

【React前端框架】全面解析:从入门到精通的最佳指南

&#x1f9d1;‍&#x1f4bc; 一名茫茫大海中沉浮的小小程序员&#x1f36c; &#x1f449; 你的一键四连 (关注 点赞收藏评论)是我更新的最大动力❤️&#xff01; &#x1f4d1; 目录 &#x1f53d; 前言1️⃣ React的基本概念2️⃣ React的安装与环境配置3️⃣ 组件的创建与…

Springboot项目搭建的问题

1.第一次出现这个问题是在使用postgresql进行搭建项目的时候&#xff0c;但是配置文件中的驱动一致导入不了 最后发现是meaven中依赖导入不进来&#xff08;不知道为什么&#xff09;&#xff0c;于是手动的在meaven中央仓库下载了对应的jar进行配置 然后项目可以正常启动 2.…

DBeaver如何导出insert的sql数据

前言 我们在使用DBeaver连接数据库的时候&#xff0c;有时候需要将数据库某张表的数据全部导出&#xff0c;用于导入到其他的数据库。一般导出的格式有csv&#xff0c;也要sql语句&#xff0c;今天就来介绍下如何导出sql语句。这样在其他新的数据库中&#xff0c;就能直接执行…