RPC、HTTP、DSF、Dubbo,每个都眼熟,就是不知道有什么联系?

news2025/2/24 12:23:44

一、HTTP 和 RPC

首先,http 与 rpc 有什么区别这个问题不太严谨,因为这俩就不是一个层级的东西。

HTTP

这个大家太熟悉了吧?日常接触最多的恐怕就是各种http协议的接口了。

没错,http它是一个协议。

其他在这里就不打算铺开了,以前整理过一些内容,有需要的可以跳转翻翻看:

  • 一、http介绍、TCP/IP 协议族
  • 二、IP,TCP 和 DNS、三次握手
  • 三、HTTP 协议基础、四次挥手
  • 四、HTTP 缺点
  • 五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因

RPC

RPC 是一种技术的代名词,全称是远程过程调用

远程?那是不是也有本地过程调用

没错,举个例子说明一下:

  • 本地过程调用:你的电脑上启动了一个服务A,运行程序的时候服务A里的各种方法的互相调用,就是本地了。
  • 远程过程调用:而隔壁小王也启动了一个服务B,他还说他里面提供了一个功能非常劲爆的方法,你也想去调用,这就是远程了。

而至于你怎么调用到小王服务器里的方法,那就是个实现方式的问题了。你为了简单,直接走http协议也行。如果觉得http满足不了需求,那么也可以基于tcp自定义一个协议。

远程调用过程

远程调用过程大概就是下图所示:

二、DSF

在工作中我发现公司有不少应用的名字是 DSF 打头的,DSF(Distributed Service Framework)其实就是指分布式服务框架

简单介绍 2 个点:为什么要用到分布式、这套DSF的包含的内容。

为什么要用到分布式

为什么要用到分布式服务?换个方式问那就是:分布式解决了什么问题。

首先,分布式架构是由单体架构演进而来,我司的业务系统也不例外。业务早期为了降低开发成本,实现快速上线,通常使用单体架构,所有的业务模块都在同一个应用里。

随着业务规模的扩张,单体应用的缺点就暴露出来,比如:

  • 系统耦合性高,当后面增加的功能越来越多,代码量巨增的时候,之前某个主程脑海中划分好的模块边界可能越来越模糊,导致调用关系混乱。
  • 改一赠二出现越来越多,经常存在开发修改了某个功能,而导致其他的功能有问题。
  • 某个功能有问题,整个一起回滚。
  • 语言单一,不能根据场景选择更合适的语言。比如其中有个模块系统主要是大数据分析,用 python 自然更加合适,因为它有丰富的类库。
  • 系统不易于拓展部署,比如系统中有一个功能流量很大,顶不住了就要加机器,那么在新机器上还是部署整个应用,不能单独的部署这个大流量的服务,会造成一定的资源浪费。 。。。

为了解决这些问题,于是把之前的业务进行垂直拆分成多个系统。系统与系统之间通过网络交互来完成各项业务处理,每个系统互相独立,可以单独部署。这种多个组件合作对外提供服务的形式,就是分布式了。

但是分布式同样也有它的缺点

  • 从之前的单应用调用,现在变成了多个应用直接的交互,调用链路变长,带来了网络开销,同时也给定位问题增加了难度。
  • 为了让你的应用更可靠,还有考虑其他的异常情况,比如调用失败、因某些问题导致的高频调用,对此还得做些 限流、熔断之类的措施。
  • 出现问题,可能会涉及多个服务的回滚,互相之间会有影响。
  • 环境变复杂了,增加了测试的复杂度。 。。。

简单来说,分布式帮我们克服了单体带来的瓶颈,但是为了分布式服务的稳定性,我们需要考虑更多的东西。

DSF包含的内容

那么一套分布式服务平台都有哪些内容,这里简单列举一下(以我司自研为例):

  • 服务注册:服务提供方上传契约信息,契约中包含服务组信息、服务信息、API信息等。
  • 服务发现:服务消费方寻址,基于某种粒度可以找到需要。
  • 服务调用:自定义超时时间、失败重试次数等,支持同步、异步调用等。
  • 负载均衡:比如支持轮询策略。
  • 网关:还可以通过网关对外提供一些rest api调用。
  • 健康检查:对服务提供方实例进行健康检查。
  • 服务拓扑:应用调用的上下游链路拓扑图。
  • 服务监控:展示服务运行状态、调用指标等。
  • 报警:当某个服务的实例异常数超过阈值,触发报警。
  • 限流:用于保护系统。
  • web前台:方便查看各种信息,各种常用功能的入口。 ...

三、Dubbo

对于分布式服务框架,如果有自研能力的话,可以结合公司业务实际情况进行高度定制化。如果初期不具备这样的条件,很多公司会选择成熟的开源框架直接使用,dubbo 就是这样的框架。

Dubbo 是阿里巴巴 2011年开源的一个基于 Java 的 RPC 框架,它实现了面向接口的代理 RPC 调用,并且可以配合 ZooKeeper 等组件实现服务注册和发现功能,并且拥有负载均衡、容错机制等。

dubbo 架构

这是官方文档的架构图,描述了 Dubbo 微服务组件与各个中心的交互过程。

  • Registry 注册中心:协调 Consumer 与 Provider 之间的地址注册与发现。
  • ConfigCenter 配置中心:存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性;负责服务治理规则(路由规则、动态配置等)的存储与推送。
  • Metadata 元数据中心:接收 Provider 上报的服务接口元数据,为 Admin 等控制台提供运维能力(如服务测试、接口文档等);作为服务发现机制的补充,提供额外的接口/方法级别配置信息的同步能力,相当于注册中心的额外扩展。

以上三个中心并不是运行 Dubbo 的必要条件,用户完全可以根据自身业务情况决定只启用其中一个或多个,以达到简化部署的目的。通常情况下,所有用户都会以独立的注册中心 开始 Dubbo 服务开发,而配置中心、元数据中心则会在微服务演进的过程中逐步的按需被引入进来。

所以,如果想快速实现一个分布式服务框架,就可以基于dubbo的方案来进行开发,既可以拿来就用,后续也可以进行二次开发。

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

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

相关文章

Nginx+Tomcat实现负载均衡、动静分离

目录 一、Nginx负载均衡实现原理 1.Nginx 实现负载均衡是通过反向代理实现 2、Nginx配置反向代理主要参数 3、动静分离原理 4、Nginx静态处理优势 5、并发量和吞吐量计算 二:7层反向代理 1、环境准备 ​2、配置Nginx Server 3、tomcat1 和tomcat2配置 4、 搭…

Jmeter性能测试 (入门)

Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后, 能用Jmeter搞定的事情,你就不会使用LoadRunner了。 本文将通过一个实际的测试例…

浪涌保护器的选型和原理(SPD)

SPD是Surge Protective Device的简写,中文名称有:电涌保护器、浪涌保护器、防雷栅、雷电浪涌防护器、防雷器等。 SPD浪涌保护器其内部包含至少一个非线性元件。当电涌出现时,SPD能在极短的时间导通,将电流泄放到地,其…

如何有效的提升餐饮油烟的监控力度

摘要:现阶段餐饮行业发展十分迅速,为了更好地提升餐饮油烟的监控力度,强化餐饮业油烟在线监控系统的设计成为重中之重。油烟在线监控系统的强化可以降低油烟的排放量,同时在排烟的过程中,还可搜集到更多的数据和信息。…

用“Function“替代“eval“进行动态代码生成

一、背景 在JavaScript中我们有时会遇到这么一个场景:“函数可能要根据不可预知的条件执行代码”。比如说计算器中的加减乘除,用户无法直接将操作符"、-、*、/"作为参数传入函数中,因此我们一般会采取字符串形式的操作符&#xff0…

asp.net高校食谱管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net高校食谱管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言 开发 asp.net高校食谱管理系统VS开发s…

Spring - Bean的实例化流程及生命周期

文章目录 Bean的实例化流程及生命周期一、Bean实例化基本流程1.1 Bean实例化基本流程1.2 总结 二、 Bean 后处理器2.1 介绍2.2 BeanFactoryPostProcessor Bean工厂后处理器2.2.1 入门2.2.2 Bean工厂后处理器注册BeanDefinition2.2.3 BeanDefinitionRegistryPostProcessor专门注…

2023年软件测试工程师如何提升?测试工程师破局进阶...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 熟练掌握基本的测…

Java反编译工具Jad的下载与使用示例

场景 Java反编译工具-JD-GUI下载以及使用: Java反编译工具-JD-GUI下载以及使用_霸道流氓气质的博客-CSDN博客 上面讲过Java反编译工具JD-GUI的使用,如果使用jad并通过命令如何实现反编译。 为了验证Java开发手册中为什么不推荐使用进行字符串拼接&…

基于轻量级卷积神经网络模型开发构建中国象棋棋子识别系统

关于棋类相关的AI类型的项目在我之前的文章中也有过不少的实践开发经历,这里就不再赘述了,感兴趣的话可以自行移步阅读即可: 《YOLOV5融合SE注意力机制和SwinTransformer模块开发实践的中国象棋检测识别分析系统》 《基于轻量级YOLO开发构建…

【IP技术】什么是IP地址?

一、IP地址概念 IP地址是一个32位的二进制数,它由网络ID和主机ID两部份组成,用来在网络中唯一的标识的一台计算机。网络ID用来标识计算机所处的网段;主 机ID用来标识计算机在网段中的位置。IP地址通常用4组3位十进制数表示,中间用…

(论文阅读)Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

论文地址 https://openreview.net/pdf?id_VjQlMeSB_J 摘要 我们探索如何生成一个思维链——一系列中间推理步骤——如何显著提高大型语言模型执行复杂推理的能力。 特别是,我们展示了这种推理能力如何通过一种称为思维链提示的简单方法自然地出现在足够大的语言模…

运用自动化测试脚本,测试下CSDN的登录功能模块

目录 前言 python程序目录 账号密码登录模块 测试用例执行模块 运行结果示例 前言 自动化测试的重要性越来越受到人们的重视,因为它可以提高测试效率、降低测试成本并减少人为错误的出现。为了满足这个需求,越来越多的公司开始采用自动化测试来保证…

项目跑不起来

Sa-Token/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempUtil.java:10:8 java: 写入cn.dev33.satoken.temp.SaTempUtil时出错: Output directory is not specified 写入cn.dev33.satoken.temp.SaTempUtil时出错: Output directory is not specified 答案&#xf…

c++的概述

c是面向对象、泛型编程。 1、 第一个c程序&#xff1a; #include <iostream>using namespace std;int main(int argc, char *argv[]) {//cout代表终端输出设备 endl换行cout << "Hello World! " << endl;cout << 100 << endl;std:…

Element-Plus el-upload组件批量上传图片问题记录

上传图片组件踩坑记录 1. 第一次尝试 最初的写法如下&#xff0c;在本地跑的时候每上传一张图片调一次接口&#xff0c;虽然图片回显正常了&#xff0c;但是每次都会自动多调一个如下图所示的apply-login 报错404&#xff0c;部署到测试环境后&#xff0c;就是每次都报错&…

linux(信号产生中)代码来验证

我们应该如何理解我们调用系统接口并不是简单的调用系统接口这么简单就完事了---我们有时候也是需要使用由操作系统为我们提供的操作系统的层面的数据类型 sigset_t 我们来介绍一种类型&#xff0c;从我们之前学的图来看&#xff0c;每一个信号不管是在block表还是在pending表…

鄂尔多斯市政务协同办公平台,让全市政务更协同高效

近年来&#xff0c;国家高度重视数字政务建设&#xff0c;以数字化推进国家治理体系和治理能力现代化&#xff0c;助力建设人民满意的服务型政府。 2018年&#xff0c;国务院办公厅印发《进一步深化“互联网政务服务”推进政务服务“一网、一门、一次”改革实施方案》&#xf…

这份阿里巴巴内部Spring Cloud Alibaba全套笔记,几乎涵盖了所有操作

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案&#xff0c;是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别&#xff1f; SpringCloud&#xff1a; 部分组件停止维护和更新&#xff0c;给开发带来不便;SpringCl…

缓存数据一致性探究

缓存是一种较低成本提升系统性能的方式&#xff0c;自它面世第一天起就备受广大开发者的喜爱。然而正如《人月神话》中的那句经典的“没有银弹”中所说&#xff0c;软件工程的设计没有银弹。 就像每一次发布上线修复问题的同时&#xff0c;也极易引入新的问题&#xff0c;自缓存…