Dubbo使用详解

在这里插入图片描述

简介

Dubbo是一个高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开发并开源。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。

Dubbo的主要特点包括:

  1. 高性能:Dubbo使用高效的网络框架和序列化框架,让分布式服务之间调用效率更高。
  2. 透明化:Dubbo在调用远程的服务的时候再本地有一个接口,就像调用本地方法一样去调用,底层实现好参数传输和远程服务运行结果传回之后的返回。
  3. 注册中心管理:Dubbo采用注册中心管理众多的服务接口地址,当你想调用服务的时候只需要跟注册中心询问即可,不像使用WebService一样每个服务都得记录好接口调用方式。
  4. 监控管理:Dubbo实现了服务方和调用方之间运行状态的监控,还能控制服务的优先级、权限、权重、上下线等,让整个庞大的分布式服务系统的维护和治理比较方便。

此外,Dubbo支持多种基于长连接的NIO框架抽象封装,包括多种线程模型、序列化以及“请求-响应”模式的信息交换方式。同时,它还提供软负载均衡、失败容错、地址路由、动态配置等集群支持。

Dubbo是一个功能强大的分布式服务框架,适用于构建高性能、可扩展和易维护的分布式系统。

在这里插入图片描述

在这里插入图片描述

前世今生

Dubbo的发展历程可以分为三个阶段:

  1. 诞生和开源:Dubbo最初于2008年在阿里巴巴内部诞生。2011年,Dubbo被开源,并在2012年发布了2.5.3版本后停止更新。
  2. 当当续命:2014年,当当发布了基于阿里开源的Dubbo 2.5.3版本的Dubbox,增加了REST协议的Dubbo版本。
  3. 重启和登顶Apache:2017年,阿里巴巴重启了Dubbo项目,并于2018年将其纳入Apache孵化器。2019年,Dubbo成为Apache顶级项目。同时,Dubbo发布了支持多种语言的版本,如dubbo.js、dubbo-go等。2020年,Dubbo发布了3.0版本,标志着向云原生项目的战略发展。

目前,Dubbo支持的版本主要是2.6.x和2.7.x。其中,2.6.x版本主要以bugfix和少量enhancements为主,因此能完全保证稳定性;而2.7.x作为社区的主要开发版本,得到了持续更新并增加了大量新feature和优化,同时也带来了一些稳定性挑战。

Dubbo的协议和注册中心是其核心组件之一。Dubbo协议的优点包括设计紧凑、请求响应的header一致等;缺点是无法通过header定位资源,header和body中字段存在冗余,协议无法扩展。然而,Dubbo也支持扩展多种协议,如当当扩展的REST协议和最新支持的gRPC协议等。

Dubbo的注册中心是其另一大特点。服务提供者可以通过注册中心动态地把自己暴露给消费者,无需消费者逐个更新配置文件。这使得服务提供者和消费者可以动态地加入和离开系统,提高了系统的灵活性和可维护性。

在这里插入图片描述

使用场景

Dubbo适合于高并发、高性能的RPC服务,比如金融、游戏等行业的应用场景。具体来说,Dubbo适用于以下场景:

  1. RPC分布式服务:当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。Dubbo可以帮助实现不同系统之间的服务调用,提高开发效率,实现业务的解耦。
  2. 服务治理和服务调用链追踪:Dubbo可以帮助实现服务治理、服务调用链追踪、服务降级、服务熔断等功能,这对于复杂的服务环境非常重要。
  3. 微服务架构:Dubbo适用于微服务架构下的一站式解决方案,提供了一系列开箱即用的功能和服务治理方案,如配置管理、服务发现、断路器、智能路由等。
  4. 消费者比提供者个数多:Dubbo适用于消费者比提供者个数多,且尽量避免传输大文件的场景。

此外,Dubbo还适合用于配置管理、服务依赖等场景。

在这里插入图片描述

主要优缺点

Dubbo是一个高性能、轻量级的分布式服务框架,具有许多优势和劣势。

  • 优势:
  1. 快速开发和部署:Dubbo提供了简洁的API和友好的用户界面,使得服务治理变得简单快速。同时,Dubbo支持多种语言和协议,可以快速地开发和部署服务。
  2. 高性能和稳定性:Dubbo采用了高性能的通信协议和序列化框架,使得服务之间的调用效率更高。此外,Dubbo的智能路由、负载均衡、容错等机制保证了服务的稳定性和可靠性。
  3. 服务治理能力强:Dubbo提供了丰富的服务治理功能,如动态配置、服务注册与发现、负载均衡、熔断降级等,使得服务的管理和维护更加方便。
  4. 易于集成和扩展:Dubbo提供了丰富的SPI机制和扩展点,使得用户可以根据自己的需求进行定制和扩展。同时,Dubbo也支持与其他微服务框架的集成,如Spring Cloud、gRPC等。
  5. 社区活跃度高:Dubbo是一个开源项目,拥有庞大的用户群体和活跃的社区。这意味着Dubbo有大量的使用案例和丰富的资源可供参考和使用。
  • 劣势:
  1. 版本兼容性差:由于Dubbo的版本更新较快,不同版本之间的兼容性可能存在一定问题。这可能导致用户在升级Dubbo时遇到一些困难和风险。
  2. 依赖管理复杂:Dubbo的服务依赖关系管理相对复杂,需要用户手动配置和管理。如果配置不当,可能导致服务调用链路出现问题。
  3. 监控功能有限:虽然Dubbo提供了一些基础的监控功能,但对于大规模服务的监控和管理可能不够满足需求。用户可能需要额外的监控工具或平台来完善监控体系。

在这里插入图片描述

服务注册与发现

Dubbo的服务注册与发现是Dubbo微服务架构中的重要基础组件之一。服务注册是指服务提供方在启动时将自己提供的服务注册到注册中心,以便服务消费者能够从注册中心获取所需的服务列表。服务发现则是在运行时,服务消费者通过注册中心发现服务提供者的IP地址和端口号,从而可以调用服务提供方提供的服务。

在Dubbo中,服务注册与发现的过程大致包括以下几个步骤:

  1. 服务提供者启动时,将自己提供的服务注册到注册中心,包括服务的元信息和接口信息。
  2. 服务消费者启动时,从注册中心获取服务提供者的列表,以便后续的服务调用。
  3. 服务消费者通过心跳机制定期向注册中心发送心跳包,以检测服务提供者的存活状态。
  4. 服务消费者在需要调用服务时,根据负载均衡策略选择一个合适的服务提供者,并与其建立连接进行远程调用。

Dubbo支持多种注册中心实现,如Zookeeper、Nacos、Etcd等。通过使用注册中心,Dubbo可以实现服务的自动注册与发现、负载均衡、容错处理等功能,提高了服务的可用性和可靠性。同时,Dubbo的服务注册与发现机制也使得服务之间的解耦成为可能,方便了服务的维护和管理。

在这里插入图片描述

Dubbo与SpringBoot整合

Dubbo与Spring Boot的整合主要有三种方式:dubboxml、dubbo-spring-boot-starter和javaapi。

  1. Dubbo XML方式:通过XML进行Dubbo配置,使用@ImportSource引入配置文件。这种方式可以借助XML的优势,细致化配置某些Dubbo特性。
  2. Dubbo Spring Boot Starter:通过Dubbo的注解进行服务暴露与引用,通过properties文件配置属性。这种方式不使用properties配置文件,使用@ImportSource引入dubboxml配置文件。
  3. Java API方式:通过Java API创建各种配置,比如RegistryConfig等,然后通过@Bean注入到容器中。

完成整合后,在Spring Boot启动类添加@EnableDubbo注解开启基于注解的Dubbo功能。最后,在resources/application.properties(或者application.yml)中添加相关配置。

以上就是Dubbo与Spring Boot的三种整合方式,用户可以根据实际需求选择最适合自己的方式。

Dubbo与Spring Boot的整合案例如下:

  1. 首先,创建一个Spring Boot项目,并在pom.xml中添加Dubbo和Spring Boot的依赖。
  2. 在Spring Boot启动类上添加@EnableDubbo注解开启Dubbo功能。
  3. 创建一个接口API,并在API中创建一个实体类User和一个接口UserService。实体类需要实现Serializable接口,否则后面调用可能会报错。
  4. 在UserService接口中定义一个get()方法,返回UserDTO对象。
  5. 在resources/application.properties(或者application.yml)中添加相关配置,包括dubbo.registry.address、dubbo.protocol.name等。
  6. 创建一个父项目,里面包含Api、Provide和Consume三个子项目。在Provide子项目中实现UserService接口,并将其暴露为Dubbo服务。在Consume子项目中引用UserService接口,并通过Dubbo进行调用。
  7. 在Consume子项目中创建一个配置类,使用@DubboReference注解引用UserService接口,并指定服务提供方的IP地址和端口号。
  8. 在Consume子项目中创建一个服务消费者类,调用UserService接口的方法,并获取UserDTO对象。
  9. 启动Spring Boot应用,观察控制台输出,确认Dubbo服务是否成功启动。
  10. 在Consume子项目中调用UserService接口的方法,观察控制台输出,确认是否成功获取到UserDTO对象。

以上就是一个简单的Dubbo与Spring Boot整合的案例,通过这个案例可以了解如何将Dubbo与Spring Boot进行整合,并实现服务的注册与发现、远程调用等功能。

在这里插入图片描述

传输协议与特点

Dubbo 支持多种传输协议和序列化协议,以下是一些主要的特点和适用场景:

  1. Dubbo 默认协议:
  • 单一 TCP 长连接,Hessian 二进制序列化和 NIO 异步通讯。
  • 适合小数据包大并发的服务调用和服务消费者数远大于服务提供者数的情况。
  • 不适合传送大数据包的服务。
  1. RMI 协议:
  • 采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。
  • 如果服务接口继承了 java.rmi.Remote 接口,可以和原生 RMI 互操作。
  • 因反序列化漏洞,需升级 commons-collections3 到 3.2.2版本或 commons-collections4 到 4.1 版本。
  • 对传输数据包不限,消费者和传输者个数相当。
  1. Hessian 协议:
  • 底层 Http 通讯,Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现可与原生 Hessian 服务互操作。
  • 通讯效率高于 WebService 和 Java 自带的序列化。
  • 参数及返回值需实现 Serializable 接口,自定义实现 List、Map、Number、Date、Calendar 等接口。
  • 适用于传输数据包较大,提供者比消费者个数多,提供者压力较大。
  1. HTTP 协议:
  • 基于 http 表单的远程调用协议,短连接,json 序列化。
  • 对传输数据包不限,不支持传文件。
  • 适用于同时给应用程序和浏览器 JS 使用的服务。
  1. WebService 协议:
  • 基于 Apache CXF 的 frontend-simple 和 transports-http 实现,短连接,SOAP文本序列化。
  • 可与原生 WebService 服务互操作。
  • 适用于系统集成、跨语言调用。
  1. Thrift 协议:对 thrift 原生协议的扩展添加了额外的头信息,使用较少,不支持传 null 值。
  2. 基于 Redis实现的 RPC 协议。
  3. 基于 Memcached 实现的 RPC 协议。
  4. 其他还有 FFI(Fast Foreign Interface)协议、gRPC等。

这些传输协议和序列化协议各有特点,适用于不同的应用场景。在实际应用中,用户可以根据实际需求选择最适合自己的协议。

在这里插入图片描述

安装与部署

  • 单节点部署
    Dubbo 是一种高性能、轻量级的 RPC(远程过程调用)框架,用于构建分布式系统。在部署 Dubbo 单节点时,需要按照以下步骤进行:
  1. 准备环境:安装 JDK 和 Tomcat,并确保它们能够正常运行。
  2. 下载 Dubbo 源码:从 Dubbo 官网或者其他可靠的源下载 Dubbo 源码。
  3. 构建 Dubbo:使用 Maven 构建 Dubbo,包括 common、facade 等模块。注意 pay-common-config 工程的构建,配置文件修改后需要重新构建,引用处也要重新构建。
  4. 部署服务:规划好服务部署目录,准备好服务管理脚本。例如,/home/wusc/edu/service/account/service-account.sh,并确保脚本可执行。
  5. 配置服务:在服务管理脚本中配置服务所需的 JAVA_HOME、JRE_HOME 等环境变量,以及 Dubbo 服务所需的参数。
  6. 启动服务:在终端中运行服务管理脚本,启动 Dubbo 服务。
  7. 测试服务:使用 Dubbo 提供的测试工具或者其他测试框架,对部署好的 Dubbo 服务进行测试,确保其正常运行。

以上是 Dubbo 单节点部署的基本步骤,具体操作可能会因 Dubbo 版本和环境的不同而有所差异。

  • 集群部署
    搭建 Dubbo 集群主要分为以下几个步骤:
  1. 准备环境:安装 JDK 和 Tomcat,并确保它们能够正常运行。
  2. 下载 Dubbo 源码:从 Dubbo 官网或者其他可靠的源下载 Dubbo 源码。
  3. 构建 Dubbo:使用 Maven 构建 Dubbo,包括 common、facade 等模块。注意 pay-common-config 工程的构建,配置文件修改后需要重新构建,引用处也要重新构建。
  4. 部署服务:规划好服务部署目录,准备好服务管理脚本。例如,/home/wusc/edu/service/account/service-account.sh,并确保脚本可执行。
  5. 配置服务:在服务管理脚本中配置服务所需的 JAVA_HOME、JRE_HOME 等环境变量,以及 Dubbo 服务所需的参数。
  6. 启动服务:在终端中运行服务管理脚本,启动 Dubbo 服务。
  7. 配置集群:在 Dubbo 服务中配置集群参数,例如 cluster=“failover”,表示使用 Failover 集群容错方式。还可以配置其他参数,例如 retries 表示重试次数,timeout 表示调用超时时间等。
  8. 测试集群:使用 Dubbo 提供的测试工具或者其他测试框架,对部署好的 Dubbo 集群进行测试,确保其正常运行。

以上是 Dubbo 集群搭建的基本步骤,具体操作可能会因 Dubbo 版本和环境的不同而有所差异。

在这里插入图片描述

Dubbo与Feign的区别与联系

Dubbo 和 Feign 都是用于构建分布式系统的工具,但它们在实现方式和使用上有一些区别和联系。

  1. 协议:Dubbo 支持多种传输协议,包括 Dubbo、Rmi、Http、Redis 等,可以根据业务场景选择最佳的方式。而 Feign 基于 Http 传输协议,短连接,不适合高并发的访问。
  2. 负载均衡:Dubbo 支持多种负载均衡算法,包括随机、轮询、活跃度、Hash 一致性等,还引入了权重的概念。Feign 只支持 N 种策略:轮询、随机、ResponseTime 加权。
  3. 容错策略:Dubbo 支持多种容错策略,例如 failover、failfast、brodecast、forking 等,并引入了 retry 次数、timeout 等配置参数。Feign 利用熔断机制来实现容错的,处理的方式不一样。
  4. 整合:Dubbo 除了注册中心需要进行整合,其它功能都自己实现了。而 Feign 大部分功能都是依赖全家桶的组件来实现的。

总的来说,Dubbo 和 Feign 在协议、负载均衡、容错策略和整合方面存在一些差异。Dubbo 更灵活,提供了更多的选项和自定义配置,适合复杂的分布式系统。Feign 则更加简洁和易用,适合快速构建微服务架构。在实际应用中,可以根据项目需求选择最适合的工具。

Dubbo与gRPC的区别和联系

Dubbo和gRPC是两种不同的分布式服务框架,它们各自具有一些特点和优势。

  1. 通讯协议:Dubbo基于TCP协议,而gRPC基于HTTP2.0协议。
  2. 序列化方式:Dubbo使用基于Java对象的序列化技术(如Hessian2),而gRPC使用Protocol Buffers(ProtoBuf)序列化协议。
  3. 服务注册与发现:Dubbo有自己的注册中心,如Zookeeper,而gRPC通常使用其他服务发现工具,如Consul或Etcd。
  4. 编程语言:Dubbo主要应用于JVM语言(如Java),而gRPC支持多种语言(如Go、C++、Python等)。
  5. 服务治理:Dubbo在服务治理方面具有较强的能力,可以基于服务维度进行治理。而gRPC自身的治理能力较弱,一般需要依赖其他工具或插件来增强治理能力。

总结起来,Dubbo和gRPC各有其优缺点,适用于不同的应用场景。如果项目主要使用Java语言,Dubbo是一个不错的选择。如果需要跨语言支持或者对性能有更高的要求,gRPC可能更合适。选择哪种框架还需要根据项目需求和团队技术栈来决定。

Dubbo与Thrift的区别与联系

Dubbo和Thrift是两种不同的RPC框架,它们在实现方式、适用场景和语言支持等方面存在一些差异。

  1. 实现方式:Dubbo通过java反射和动态代理实现,只支持Java。而Thrift通过IDL(接口定义语言)实现,支持跨语言机制。
  2. 适用场景:Dubbo是一个综合的SOA解决方案,而Thrift仅是一个RPC服务框架。Dubbo当前主要用作Java,而Thrift可以用作目前所熟知的各种语言。
  3. 注册中心:Dubbo使用Zookeeper作为注册中心,而Thrift没有内置的注册中心,通常需要结合其他工具或服务(如Apache ZooKeeper)来实现。
  4. 容错机制:Dubbo提供了容错机制来优雅地帮助服务调用者处理网络延迟、网络中断、服务异常等原因造成的暂时不可用问题。而Thrift并没有内置的容错机制,需要结合其他工具或服务来实现。
  5. 监控和报警:Dubbo支持服务治理,而Thrift不支持。Dubbo还提供了监控和报警功能,帮助开发人员快速发现问题和定位故障。

Dubbo和Thrift各有其优势和适用场景。如果你需要一个综合的SOA解决方案,或者你的项目主要使用Java语言,那么Dubbo可能更适合。如果你需要一个跨语言的RPC框架,或者你需要更灵活的容错和监控机制,那么Thrift可能更适合。在选择框架时,还需要考虑项目需求和团队技术栈。

在这里插入图片描述

注册到Zookeeper的过程

在Dubbo中,注册到Zookeeper的过程如下:

  1. 配置Zookeeper:在Dubbo的配置文件中,添加Zookeeper的配置信息,包括Zookeeper的地址和端口号等。
  2. 启动Zookeeper:确保Zookeeper服务已经启动并且正常运行。
  3. 创建Zookeeper客户端:在Dubbo服务中,需要创建一个Zookeeper客户端,以便将服务注册到Zookeeper中。
  4. 注册服务:使用Zookeeper客户端提供的API将服务注册到Zookeeper中。Dubbo会根据服务提供者的URL等信息生成一个唯一的节点路径,并将该节点路径和URL等信息存储在Zookeeper中。
  5. 发布服务:一旦服务被注册到Zookeeper中,其他服务就可以通过Zookeeper发现并调用该服务。Dubbo会自动将服务消费者的URL等信息发布到Zookeeper中,以便其他服务能够找到并调用该服务。
  6. 监控和报警:Dubbo还支持与Zookeeper配合实现监控和报警功能。可以使用Dubbo的监控中心功能,将监控数据发送到Zookeeper中,并利用Zookeeper的特性来实现报警功能。

Dubbo使用Zookeeper作为注册中心时,需要按照一定的步骤进行配置和实现。通过使用Zookeeper,可以实现服务的注册、发现、监控和报警等功能,提高分布式系统的可靠性和可维护性。

在这里插入图片描述

注册到Nacos的过程

Dubbo服务注册到Nacos的过程如下:

  1. 配置Nacos:在Dubbo的配置文件中,添加Nacos的配置信息,包括Nacos的地址、端口号、应用名等。
  2. 启动Nacos:确保Nacos服务已经启动并且正常运行。
  3. 创建Nacos客户端:在Dubbo服务中,需要创建一个Nacos客户端,以便将服务注册到Nacos中。
  4. 注册服务:使用Nacos客户端提供的API将服务注册到Nacos中。Dubbo会根据服务提供者的URL等信息生成一个唯一的节点路径,并将该节点路径和URL等信息存储在Nacos中。
  5. 发布服务:一旦服务被注册到Nacos中,其他服务就可以通过Nacos发现并调用该服务。Dubbo会自动将服务消费者的URL等信息发布到Nacos中,以便其他服务能够找到并调用该服务。
  6. 监控和报警:Dubbo还支持与Nacos配合实现监控和报警功能。可以使用Dubbo的监控中心功能,将监控数据发送到Nacos中,并利用Nacos的特性来实现报警功能。

Dubbo使用Nacos作为注册中心时,需要按照一定的步骤进行配置和实现。通过使用Nacos,可以实现服务的注册、发现、监控和报警等功能,提高分布式系统的可靠性和可维护性。

在这里插入图片描述

源码解析

Dubbo是一个高性能的、基于Java的RPC框架。要解析Dubbo源码,可以从以下几个方面入手:

  1. 层次结构:Dubbo源码的层次结构非常清晰,包括common(io序列化、store、线程)、config、container(容器)、remoting(远端通信)、SPI机制等。理解这些层次结构有助于更好地理解Dubbo的运行原理。
  2. 关键类:Dubbo源码中有很多关键类,如DubboInvoker、NioEventLoop、NettyClientHandler、IdleStateHandler、HeaderExchangeClient等。这些类是Dubbo框架的核心部分,理解它们的实现和功能是解析Dubbo源码的关键。
  3. SPI机制:Dubbo使用SPI机制来实现扩展性,这是它与其他RPC框架的一个重要区别。理解SPI机制的实现原理可以帮助你更好地理解Dubbo如何通过扩展来实现各种功能。
  4. 监控和报警:Dubbo提供了强大的监控和报警功能,这对于定位问题和优化性能非常重要。理解这些功能的实现原理可以帮助你更好地利用这些功能来提高你的系统性能和稳定性。
  5. 服务发现和注册:Dubbo使用Zookeeper作为注册中心,实现服务发现和注册功能。理解这些功能的实现原理可以帮助你更好地理解Dubbo如何实现分布式系统的服务治理。

解析Dubbo源码需要深入理解其层次结构、关键类、SPI机制、监控和报警以及服务发现和注册等功能。通过不断地学习和实践,你可以更好地掌握Dubbo的原理和实现细节,从而更好地应用它来构建高性能、可扩展的分布式系统。

在这里插入图片描述

使用案例

Dubbo是一个高性能的Java RPC框架,用于构建分布式系统。以下是一个简单的Dubbo在Java中的使用案例:

  1. 定义服务接口:首先,定义一个服务接口,例如:
public interface GreetingService {
    String sayHello(String name);
}
  1. 实现服务:然后,创建一个实现该接口的服务类,例如:
public class GreetingServiceImpl implements GreetingService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}
  1. 配置Dubbo:在Dubbo的配置文件中,添加服务提供者和消费者的配置信息。例如,在dubbo-consumer.xml中添加以下配置:
<dubbo:reference id="greetingService" interface="com.example.GreetingService" version="1.0.0" />

dubbo-provider.xml中添加以下配置:

<dubbo:service interface="com.example.GreetingService" ref="greetingServiceImpl" />
  1. 调用服务:最后,在Java代码中通过Dubbo的API调用服务。例如:
public class Consumer {
    @Autowired
    private GreetingService greetingService;
    
    public void call() {
        String result = greetingService.sayHello("Dubbo");
        System.out.println(result);
    }
}

以上是一个简单的Dubbo在Java中的使用案例。在实际应用中,还需要考虑服务注册与发现、负载均衡、容错、监控和报警等功能。通过深入了解Dubbo的原理和实现细节,可以更好地应用它来构建高性能、可扩展的分布式系统。

更多常用RPC框架

除了Dubbo和gRPC,还有许多其他常用的RPC框架,包括但不限于以下几种:

  1. Thrift:由Facebook开发并开源的RPC框架,采用可扩展的跨语言服务开发框架,支持多种编程语言。
  2. Spring Cloud:基于Spring Boot的微服务框架,提供了集成的服务发现、配置管理和服务治理等功能。
  3. Kryo:一个高性能的Java序列化框架,提供了快速序列化和反序列化功能。
  4. Apache Avro:一个数据序列化系统,提供了高效的、可扩展的、跨语言的数据序列化能力。
  5. Hessian:基于HTTP协议的轻量级远程调用框架,适用于Java语言。
  6. Apache Thrift:高效的跨语言服务开发框架,可以快速定义和实现RPC接口。
  7. gRPC-Web:gRPC的Web版本,允许使用HTTP/2进行跨语言服务调用。
  8. Cap’n Proto:由Sandstorm.io开发的数据交换格式和RPC系统。
  9. Apache Arrow:用于高效跨语言处理列式数据的库,提供了高速内存访问和低延迟分析能力。

这些RPC框架各具特色,选择哪一个更适合取决于具体需求和团队技术栈。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 8.5 安装图解

特特特别的说明 CentOS发行版已经不再适合应用于生产环境&#xff0c;客观条件不得不用的话&#xff0c;优选7.9版本&#xff0c;8.5版本次之&#xff0c;最次6.10版本&#xff08;比如说Oracle 11GR2就建议在6版本上部署&#xff09;&#xff01; 引导和开始安装 选择倒计时结…

深度解析 Compose 的 Modifier 原理 -- Modifier.composed()、ComposedModifier

" Jetpack Compose - - Modifier 系列文章 " &#x1f4d1; 《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》 &#x1f4d1; 《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》 &#x1f4d1; 《 深入解…

强化学习(二)多臂老虎机 “Multi-armed Bandits”——1

将强化学习与机器学习、深度学习区分开的最重要的特征为&#xff1a;它通过训练中信息来评估所采取的动作&#xff0c;而不是给出正确的动作进行指导&#xff0c;这极大地促进了寻找更优动作的需求。 1、多臂老虎机&#xff08;Multi-armed Bandits&#xff09;问题 赌场的老虎…

springBoot如何动态切换数据源

项目背景&#xff1a;最近公司中需要搭建mysql的主从&#xff0c;想着在spring中集成多数据源。mybatisplus提供的有插件用DS注解就能够实现&#xff0c;但是这种在mysql服务宕机的情况下不能够进行自动切换&#xff0c;于是就想着用aop自定义注解的方式来实现 项目实现效果&a…

el-tree获取当前选中节点及其所有父节点的id(包含半选中父节点的id)

如下图,我们现在全勾中的有表格管理及其下的子级,而半勾中的有工作台和任务管理及其子级 现在点击保存按钮后,需要将勾中的节点id及该节点对应的父节点,祖先节点的id(包含半选中父节点的id)也都一并传给后端,那这个例子里就应该共传入9个id,我们可以直接将getCheckedK…

架构篇07-复杂度来源:低成本、安全、规模

文章目录 低成本安全规模小结关于复杂度来源,前面的专栏已经讲了高性能、高可用和可扩展性,今天我们来聊聊复杂度另外三个来源低成本、安全和规模。 低成本 当我们的架构方案只涉及几台或者十几台服务器时,一般情况下成本并不是我们重点关注的目标,但如果架构方案涉及几百…

【Docker】在centos中安装nginx

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是平顶山大师&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《【Docker】安装nginx》。&#x1f3af;&#…

Macos flatter(用于快速LLL)本地编译安装(解决安装过程各种疑难杂症)

flatter是一个开源项目&#xff0c;能大大提高LLL的速度&#xff0c;项目提供的安装文档适用于Ubuntu&#xff0c;但是在macos上安装&#xff0c;总会遇到各种各样的问题&#xff0c;这里记录下所踩坑&#xff0c;帮助大家快速在macos上安装flatter。 文章目录 1.安装依赖库&am…

【linux进程间通信(一)】匿名管道和命名管道

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程间通信 1. 前言2. 进程间…

计算机毕业设计 基于SpringBoot的红色革命文物征集管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

CSS 实现卡片以及鼠标移入特效

CSS 实现卡片以及鼠标移入特效 文章目录 CSS 实现卡片以及鼠标移入特效0、效果预览默认鼠标移入后 1、创建卡片组件2、添加样式3、完整代码 0、效果预览 默认 鼠标移入后 在本篇博客中&#xff0c;我们将探讨如何使用 CSS 来实现卡片组件&#xff0c;并添加鼠标移入特效&#…

第五回 九纹龙剪径赤松林 鲁智深火烧瓦罐寺 Webmin傻瓜式配置服务器

话说鲁智深走过数个山坡&#xff0c;看见一所败落的寺庙&#xff0c;上写“瓦罐之寺”。庙里空无一人&#xff0c;于是鲁智深径直走到后面厨房&#xff0c;发现有几个老和尚。鲁智深向和尚们讨要饭食&#xff0c;和尚们初时推说没有。然而&#xff0c;鲁智深眼尖&#xff0c;发…

【Python程序开发系列】一文搞懂argparse模块的常见用法(案例+源码)

一、引言 argsparse是python的命令行解析的标准模块&#xff0c;内置于python&#xff0c;不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。 在运行深度学习程序时。往往会因为电脑配置不行导致程序运行慢卡&#xff0c;需要将程序在虚机上进行…

【React基础】– JSX语法

文章目录 认识JSX为什么React选择了JSXJSX的使用 React事件绑定this的绑定问题事件参数传递 React条件渲染React列表渲染列表中的key JSX的本质createElement源码Babel官网查看直接编写jsx代码 虚拟DOM的创建过程jsx – 虚拟DOM – 真实DOM声明式编程 阶段案例练习 认识JSX ◼ …

手动添加测试用例配置输入参数和期望值

1.选中函数&#xff0c;点击右键选择插入测试用例。这里所选择的插入测试用例区别于之前的测试用例的地方在于&#xff0c;这里插入测试用例是手动配置的&#xff0c;之前的是自动生成的。手动配置可以自定义选择输入参数和期望值。 2.添加测试用例后&#xff0c;点击测试用例&…

高光谱分类论文解读分享之Grid Network: 基于各向异性视角下特征提取的高光谱影像分类

IEEE GRSL 2023&#xff1a;Grid Network: 基于各向异性视角下特征提取的高光谱影像分类 题目 Grid Network: Feature Extraction in Anisotropic Perspective for Hyperspectral Image Classification 作者 Zhonghao Chen , Student Member, IEEE, Danfeng Hong , Senior …

Conmi的正确答案——使用eclipse进行ESP32C3的debug

eclipse IDE 版本:2023-12 1、安装debug环境 参考大神的教程:【图文】手把手教你使用 Eclipse IDE 开发 ESP32 (这里是为了我下次回来速通才写的部分) 1.1、安装插件(plug-in,新的软件已经写成software了): 相关软件参数: 汉化(安装完成会提示重启应用): Name:…

【前后端的那些事】15min快速实现图片上传,预览功能(ElementPlus+Springboot)

文章目录 Element Plus SpringBoot实现图片上传&#xff0c;预览&#xff0c;删除效果展示 1. 后端代码1.1 controller1.2 service 2. 前端代码2.1 路由创建2.2 api接口2.2 文件创建 3. 前端上传组件封装 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&…

node.js 实现文件上传 和图片映射 文件下载(multer)

Muter是一个node.js中间件。主要处理multupart/from-data类型的表单数据&#xff0c;常用于上传文件。在express.js应用中&#xff0c;multer使得上传文件变得更加简单。主要功能是将客户端上传的文件存储在服务器的本地文件系统中。它还添加了一个body对象以及file或files对象…

qnx 上screen + egl + opengles 最简实例

文章目录 前言一、qnx 上的窗口系统——screen二、screen + egl + opengles 最简实例1.使用 addvariant 命令创建工程目录2. 添加源码文件3. common.mk 文件4. 编译与执行总结参考资料前言 本文主要介绍如何在QNX 系统上使用egl和opengles 控制GPU渲染一个三角形并显示到屏幕上…