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

软考: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则以其简单性和广泛的适用性而流行。

相关文章:

软考:CORBA架构

CORBA过时了吗 CORBA指南 个人小结: IPC,进程间通信,Socket应用在不同机器之间的通信 RPC是一种技术思想而非一种规范 但站在八九十年代的当口,简单来说,就是我在本地调用了一个函数,或者对象的方法&…...

qt QSaveFile详解

QSaveFile 是 Qt 提供的一个类,用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性,以防止文件损坏。使用 QSaveFile,您可以创建一个临时文件,并在成功写入后将其重命名为目标文件,这样可以避免在写入过程…...

【Linux】线程池详解及其基本架构与单例模式实现

目录 1.关于线程池的基本理论 1.1.线程池是什么? 1.2.线程池的应用场景: 2.线程池的基本架构 2.1.线程容器 2.2.任务队列 2.3.线程函数(HandlerTask) 2.4.线程唤醒机制 3.添加单例模式 3.1.单例模式是什么&…...

运输层知识点汇总3

目录 前言 二、为什么在TCP首部中有一个首部长度字段,而UDP的首部就没有这个字段? 三、一个TCP报文段的数据部分最多为多少字节?为什么?如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号&#xff0…...

浔川社团官方联合会提前入驻

近期,我们浔川社团官方发现文章再次被不明网站转发。这一情况引起了我们的高度警觉和深刻反思。我们一直致力于为大家提供高质量、有价值的内容,用心创作每一篇文章,以展现我们社团的风采和理念。然而,这些不明网站未经授权的转发…...

比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis

【实验名称】 实验一:绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders, 20 0000users, …...

C++研发笔记8——C语言程序设计初阶学习笔记6

在第一部分——课前准备的学习中,我就提到了学习C语言的过程中,练习是必不可少的环节,所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型: A.char B.d…...

0softmax和背后的最大熵(极大似然法)

只要无穷阶矩都一样,那么两个分布一定一样。 整理思路:1、设定样本的概率模型与目标概率模型一致(两个模型特性函数一致)建立服从伯努利分布的变量(此处需要理解样本空间及变量的关系)对两个模型进行降维&a…...

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站,并向其发送虚假插件,通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种,自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…...

最新Compose环境版本

1.gradle gradle 8.10.2 插件版本 8.7.1 Android Studio Ladybug | 2024.2.1 Patch 1 2.model 下 的 build.gradle.kts plugins {alias(libs.plugins.android.application)alias(libs.plugins.kotlin.android)alias(libs.plugins.kotlin.compose)id("kotlin-kapt&qu…...

流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(一)

闲着没事做,记录一下开发项目用过的协议,项目中,大多是是实时显示播放的,通过私有协议,传输到上位机,实时播放,延时小于200ms,仿照这些协议,定义的数据格式。如果用这些协…...

【智能大数据分析 | 实验四】Spark实验:Spark Streaming

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…...

es实现自动补全

目录 自动补全 拼音分词器 安装拼音分词器 第一步:下载zip包,并解压缩 第二步:去docker找到es-plugins数据卷挂载的位置,并进入这个目录 第三步:把拼音分词器的安装包拖到这个目录下 第四步:重启es 第…...

【日志】Unity3D模型导入基本问题以及浅谈游戏框架

2024.10.22 真正的谦逊从来不是人与人面对时的谦卑,而是当你回头看那个曾经的自己时,依旧保持肯定与欣赏。 【力扣刷题】 暂无 【数据结构】 暂无 【Unity】 导入外部模型资源报错问题 在导入外部资源包的时候一般都会报错,不是这个资源模…...

1.8K Star,简洁易用 Web 端创意画板

Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 在数字创作的时代,找到一款功能强大且易于使用的绘图工具…...

WPF中的<Style.Triggers>

Triggers介绍 在XAML中,Triggers是Style元素的一部分,用于定义在特定条件触发时应用的样式更改。这些触发器可以响应各种事件和属性值的变化,例如控件的状态变化(如鼠标悬停、焦点状态)、数据绑定值的变化等。 以下是…...

pod相关面试题总结(持续更新)

1:当一个Pod有多个容器时,如果连接到指定的容器? #查看当前空间下的pod [rootmaster210 pods]# kubectl get pods NAME READY STATUS RESTARTS AGE linux85-nginx-tomcat 2/2 Running 0 63s [rootmaster210 …...

Matlab学习03-符号的替换及运算(接上一篇)

在上一篇的学习中,我知道了符号变量的声明👇 Matlab学习02-matlab中的数据显示格式及符号变量-CSDN博客 接下来开始学习符号运算相关的内容,并学习最为核心的matlab程序设计。之前的学习都是为了程 序设计做铺垫,程序设计又是为了…...

Windows中API-磁盘管理笔记

硬盘是由一组堆积的盘片组成类似于圆柱体组成,每个盘片的数据都以电磁方式存储在同心圆或轨道中,轨道的最小可寻址单元是扇区;基本磁盘:最常用于windows的存储类型,指的是**包含分区的磁盘。**在基本磁盘上只能创建和删…...

010 操作符详解 上

写代码的实质是在写方法体 —— 刘铁猛 操作符概览 操作符本质 操作符的本质是函数的“简记法” 操作符 简写Add函数 34 等同Add(3,4)操作符不能脱离与它关联的数据类型可以说操作符就是与固定数据类型关联的一套算法的简记法 如下图所示算法的简记法 操作符的优先级 可以使…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...