Dubbo使用详解

news2024/9/29 19:28:35

在这里插入图片描述

简介

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框架各具特色,选择哪一个更适合取决于具体需求和团队技术栈。

在这里插入图片描述

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

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

相关文章

ITSS内幕揭秘!不看后悔!

1️⃣ ITSS&#xff1f;那是啥玩意&#xff1f; ITSS&#xff0c;就是一套超酷的信息技术服务标准大全&#xff01;它规范了所有信息技术服务的小秘密&#xff0c;确保服务可靠又让人放心&#xff01;&#x1f4aa; 2️⃣ 哪些公司需要这个神器&#xff1f; ITSS可是个大家伙&a…

Unity 程序员UI编码规范

今天给大家分享Unity UI开发相关的一些编码和规范&#xff0c;有了这些指导规范&#xff0c;帮助你的项目获得更好的性能&#xff0c;少走弯路。Unity GUI&#xff08;也被称为UGUI&#xff09;经常是项目性能问题的来源。 考虑使用多分辨率和宽高比 大部分情况下&#xff0c…

解锁文字魔法:探索自然语言处理的秘密——从技术揭秘到应用实战!

目录 前言 关键技术——揭密自然语言处理的秘密武器&#xff01; 领域应用——自然语言处理技术在不同领域的奇妙表演&#xff01; 超越极限——自然语言处理技术面临的顽强挑战揭秘&#xff01; 科技VS伦理——自然语言处理技术的发展与伦理社会的纠结较量&#xff01; 开…

EasyX图形化学习(三)

1.帧率&#xff1a; 即每秒钟界面刷新次数&#xff0c;下面以60帧为例&#xff1a; 1.数据类型 clock_t&#xff1a; 用来保存时间的数据类型。 2.clock( ) 函数&#xff1a; 用于返回程序运行的时间,无需参数。 3.例子&#xff1a; 先定义所需帧率&#xff1a; const …

力扣 | 11. 盛最多水的容器

双指针解法–对撞指针 暴力解法public int maxArea1(int[] height) {int n height.length;int ans 0;for (int i 0; i < n; i) {for (int j i 1; j < n; j) {int area Math.min(height[i], height[j]) * (j - i);ans Math.max(ans, area);}}return ans;}双指针解法…

力扣每日一练(24-1-18)

经验一&#xff1a;不要把问题想复杂 Python&#xff1a; min_price float(inf)max_profit 0for price in prices:min_price min(min_price, price)max_profit max(max_profit, price - min_price)return max_profit C#&#xff1a; public int MaxProfit(int[] prices) {i…

MySQL(视图,存储函数,存储过程)

作业1&#xff1a; 作业实现&#xff1a; 首先创建学生表&#xff0c;课程表&#xff0c;以及学生选课表。 CREATE TABLE Student (Sno INT PRIMARY KEY,Sname VARCHAR(20) NOT NULL,Ssex CHAR(1) CHECK (Ssex IN (男, 女)),Sage INT,SDept VARCHAR(20) DEFAULT 计算机 );CRE…

AI小程序添加深度合成类目解决办法

基于文言一心和gpt等大模型做了一个ai助理小程序&#xff0c;在提交“一点AI助理”小程序时&#xff0c;审核如下&#xff1a; 失败原因1 审核失败原因 你好&#xff0c;你的小程序涉及提供提供文本深度合成技术 (如: AI问答) 等相关服务&#xff0c;请补充选择&#xff1a;深度…

骨传导蓝牙耳机怎么使用?使用骨传导耳机对人体有没有伤害?

骨传导蓝牙耳机的使用方法和传统的入耳式蓝牙耳机使用方法相差无几&#xff0c;都是通过蓝牙来进行连接使用&#xff0c;但骨传导耳机会自带内存&#xff0c;所以在此前提上可以存储音乐独立使用&#xff0c;比传统的入耳式蓝牙耳机使用更方便一些。 那么使用骨传导耳机会不会对…

【方案】世微AP51656 电流采样降压恒流驱动 60V3A LED灯 SOT89-5

1&#xff0c;方案应用&#xff1a;3A输出 LED灯BOM表 2&#xff0c;方案应用&#xff1a;3A输出 LED灯线路图 3&#xff0c;产品描述 AP51656是一款连续电感电流导通模式的降压恒流源&#xff0c;用于驱动一颗或多颗串联LED输入电压范围从 5 V 到 60V&#xff0c;输出电流 可…

17.自主练习

一、建表 1、建库、建表 # 创建数据库 create database mysql_exampleTest; use mysql_exampleTest; # 学生表 CREATE TABLE Student( s_id VARCHAR(20), s_name VARCHAR(20) NOT NULL DEFAULT , s_birth VARCHAR(20) NOT NULL DEFAULT , s_sex VARCHAR(10) NOT NULL…

油猴脚本注入js获取DY作品数据

油猴脚本的执行时机: 元素还未生成 https://bbs.tampermonkey.net.cn/thread-3843-1-1.html 而在控制台执行时, 通常元素已经生成 逻辑就是在网页每次发送请求时, 拦截它请求的响应数据作操作; 所以当用户作品很多时, 也需要一直滚动到全部作品请求加载完成, 触发下载 &#…

数据库经典面试题

习题一 1.1 创建表 ①创建Student表 mysql> create table Student ( -> Sno int primary key, -> Sname varchar(255), -> Ssex varchar(10), -> Sdept varchar(50) -> ); Query OK, 0 rows affected (0.01 sec) ②创建Course表 mysql…

树莓派4B +Ubuntu20.04+ROS1的使用(2)

首先确定一下主机与从机的ip地址&#xff08;非常重要&#xff09; 在这次实验中&#xff0c;主机是一台Ubuntu20.04.03系统的台式机&#xff0c;我们间通过这台准备来远程遥控树莓派上的ros1系统&#xff0c;它的ip地址是192.168.230.181 从机是一台搭载Ubuntu20.04桌面版ro…

项目管理十大知识领域之项目人力资源管理

一、项目人力资源管理的概述 作为项目管理的重要组成部分&#xff0c;项目人力资源管理旨在有效管理和利用项目团队的人力资源&#xff0c;以实现项目目标。它涵盖了对人员的招聘、培训、激励和绩效管理等方面&#xff0c;旨在确保项目团队的高效运转和成员的专业发展。项目人…

录课视频太大怎么办?3种方法一键瘦身~

录制视频是现代人常用的一种记录生活的方式&#xff0c;但是视频文件大小往往会很大&#xff0c;不利于存储和分享。为了解决这个问题&#xff0c;我们需要使用视频压缩软件来压缩视频文件大小&#xff0c;以便更方便地存储和分享。 方法一&#xff1a;嗨格式压缩大师 嗨格式压…

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

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

【b站咸虾米】chapter4_vue组件_新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址&#xff1a;【新课uniapp零基础入门到项目打包&#xff08;微信小程序/H5/vue/安卓apk&#xff09;全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 四、vue组件 uni-app官网 …

【面试】测试/测开(ING3)

190. 栈和堆在内存管理上的区别 栈 1&#xff09; 栈是由系统自动分配和回收的内存。 2&#xff09;栈的存储地址是由高地址向低地址扩展的。 3&#xff09;栈是一个先进后出的结构。 4&#xff09;栈的空间大小是一个在编译时确定常数&#xff0c;即栈的大小是有限制的&#x…

Windows连接Ubuntu桌面

平时Windows连接Ubuntu服务器都是使用Xshell、FinalShell等工具&#xff0c;但这些连接之后只能通过终端进行操作&#xff0c;无法用桌面方式与服务器交互。 本文介绍如何通过工具&#xff0c;实现Window连接远程Ubuntu服务器&#xff0c;并使用桌面方式交互。 系统版本&#x…