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

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

之前的面试经历中,除了经常被问到 HTTP 相关的知识外,还有被问过 http 与 rpc 的区别的。再加上工作中经常与公司的一些DSF应用打交道,于是我又会联想到 dubbo,那么今天要梳理的内容关键词就有了这些: http、rpc、dsf、dubbo 。


一、HTTP 和 RPC


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


HTTP


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


没错,http它是一个协议。


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



RPC


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


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


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


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


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


远程调用过程


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


1268169-20220225231216061-1778809353.png


二、DSF


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


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


为什么要用到分布式


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


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

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


  • 系统耦合性高,当后面增加的功能越来越多,代码量巨增的时候,之前某个主程脑海中划分好的模块边界可能越来越模糊,导致调用关系混乱。


  • 改一赠二出现越来越多,经常存在开发修改了某个功能,而导致其他的功能有问题。


  • 某个功能有问题,整个一起回滚。


  • 语言单一,不能根据场景选择更合适的语言。比如其中有个模块系统主要是大数据分析,用 python 自然更加合适,因为它有丰富的类库。


  • 系统不易于拓展部署,比如系统中有一个功能流量很大,顶不住了就要加机器,那么在新机器上还是部署整个应用,不能单独的部署这个大流量的服务,会造成一定的资源浪费。


。。。

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


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


  • 从之前的单应用调用,现在变成了多个应用直接的交互,调用链路变长,带来了网络开销,同时也给定位问题增加了难度。


  • 为了让你的应用更可靠,还有考虑其他的异常情况,比如调用失败、因某些问题导致的高频调用,对此还得做些 限流、熔断之类的措施。


  • 出现问题,可能会涉及多个服务的回滚,互相之间会有影响。


  • 环境变复杂了,增加了测试的复杂度。


。。。

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


DSF包含的内容


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


  • 服务注册:服务提供方上传契约信息,契约中包含服务组信息、服务信息、API信息等。


  • 服务发现:服务消费方寻址,基于某种粒度可以找到需要。


  • 服务调用:自定义超时时间、失败重试次数等,支持同步、异步调用等。


  • 负载均衡:比如支持轮询策略。


  • 网关:还可以通过网关对外提供一些rest api调用。


  • 健康检查:对服务提供方实例进行健康检查。


  • 服务拓扑:应用调用的上下游链路拓扑图。


  • 服务监控:展示服务运行状态、调用指标等。


  • 报警:当某个服务的实例异常数超过阈值,触发报警。


  • 限流:用于保护系统。


  • web前台:方便查看各种信息,各种常用功能的入口。


...

三、Dubbo


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


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


dubbo 架构


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


1268169-20220227113317131-1677655019.png


  • Registry 注册中心:协调 Consumer 与 Provider 之间的地址注册与发现。


  • ConfigCenter 配置中心:存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性;负责服务治理规则(路由规则、动态配置等)的存储与推送。


  • Metadata 元数据中心:接收 Provider 上报的服务接口元数据,为 Admin 等控制台提供运维能力(如服务测试、接口文档等);作为服务发现机制的补充,提供额外的接口/方法级别配置信息的同步能力,相当于注册中心的额外扩展。


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


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

相关文章
|
6月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
6月前
|
负载均衡 Dubbo Java
Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术
随着微服务架构的兴起,远程过程调用(RPC)框架成为了关键组件。Dubbo,作为阿里巴巴的开源RPC框架,已经演进到了3.x版本,带来了许多新特性和技术改进。本文将探讨Dubbo 3.x中的一些最新技术,包括服务注册与发现、负载均衡、服务治理等,并通过代码示例展示其使用方式。
359 9
|
6月前
|
缓存 安全 API
RPC vs. HTTP:谁主沉浮在网络通信的江湖?
RPC vs. HTTP:谁主沉浮在网络通信的江湖?
900 0
|
6月前
|
Dubbo Cloud Native 网络协议
【Dubbo3技术专题】「服务架构体系」第一章之Dubbo3新特性要点之RPC协议分析介绍
【Dubbo3技术专题】「服务架构体系」第一章之Dubbo3新特性要点之RPC协议分析介绍
94 1
|
3月前
|
负载均衡 网络协议 小程序
SpringCloud远程调用为啥要采用HTTP,而不是RPC?
【8月更文挑战第28天】在微服务架构日益盛行的今天,SpringCloud凭借其强大的生态系统和灵活的集成能力,成为了众多企业构建微服务系统的首选框架。在微服务之间的远程调用中,一个常见的问题是选择HTTP还是RPC(远程过程调用)作为通信协议。本文将深入探讨SpringCloud为何更倾向于采用HTTP而非RPC进行远程调用。
325 5
|
1月前
|
负载均衡 Java 开发者
Spring Cloud 远程调用:为何选择 HTTP 而非 RPC?
【10月更文挑战第1天】在微服务架构中,远程服务调用是一个核心环节。面对HTTP和RPC(Remote Procedure Call,远程过程调用)这两种通信协议,Spring Cloud 选择了HTTP作为其主要通信手段。本文将深入探讨Spring Cloud选择HTTP而非RPC的原因,以及这一选择在实际工作中的优势。
81 0
|
1月前
|
负载均衡 API 数据格式
RPC和HTTP的区别?
RPC和HTTP的区别?
74 0
|
2月前
|
XML 负载均衡 监控
分布式-dubbo-简易版的RPC框架
分布式-dubbo-简易版的RPC框架
|
3月前
|
API 开发者 微服务
RPC和 HTTP协议
【8月更文挑战第8天】RPC(远程过程调用)使程序能像本地调用般请求远程服务,简化网络通信细节。其优点包括高效的数据传输及严格的类型定义,适合微服务间的高效通信。HTTP(超文本传输协议)则是用于万维网数据传输的通用协议,以文本为基础,易于理解和调试,并被广泛支持。两者各有侧重,RPC偏高速服务通信,HTTP则更适用于多样化的网络场景。选择时需根据具体需求决定。
|
3月前
|
前端开发 C# 开发者
WPF开发者必读:MVVM模式实战,轻松构建可维护的应用程序,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离关注点,提高了代码的可维护性和可扩展性。本文详细介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定与逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种模式,开发者可以更高效地构建桌面应用程序。希望本文能帮助你在WPF开发中更好地应用MVVM模式。
173 0