定义 gRPC RPC

     2023-02-16     8

关键词:

【中文标题】定义 gRPC RPC【英文标题】:Defining gRPC RPCs 【发布时间】:2018-09-12 15:09:14 【问题描述】:

我在这里寻找一些建议。用例是一个网络设备(如路由器),通过 gRPC 执行网络操作。

假设有“n”个模型对象,例如路由器、接口、路由配置对象(例如 OSPF 等)。每个网络操作,例如最终对一个或多个模型对象进行 CRUD。

现在,当通过 gRPC 服务定义它时,似乎有 2 个选项:

    定义通用 gRPC RPC,如“SET”和“GET”。该参数将是对象和操作的列表。像 SET((router, update), (interface, update)..

    定义非常具体的 RPC。像“setInterfaceProperty_x”、“createOSPFInstance”.. 这样的 RPC 可能有很多很多。

使用 #2,我们正在 RPC 本身中构建应用程序智能。每个新功能都可能需要来自该服务的新 RPC。

对于#1,RPC 是手段,但智能存在于在上下文中使用 RPC 的应用程序中。 RPC 列表只是极少数,不会随时间而改变。

首选方法是什么?通用 RPC(并保持很少)还是有数十个(或更多)操作驱动的 RPC?我看到一些像 P4Runtime 这样的开源项目采用方法 #1。

感谢您的宝贵时间。如果需要,我可以提供更多信息。

【问题讨论】:

【参考方案1】:

您应该使用选项 #2。这会将您的接口合同放在原型中,而不是在您的应用程序中。选择第 2 项,否则会很麻烦或无法支持,从而为自己打开了许多大门:

如果对象的 API 定义与内部表示不匹配,则需要定义两者之间的映射。假设您将内部代码更新为不再需要InterfaceProperty,而是将其移至名为BetterInterfaceProperties 的新字段。选项 1 会强制您保留旧字段,而选项 2 将允许您重新解释调用并做正确的事情。 使用特定方法可以更轻松地进行细粒度访问控制。所有用户都可以设置publicProperty,但只有管理员可以设置dangerousProperty。通过将所有字段分组到一个调用中(如 #1 所示),您的调用者必须重新解释错误消息,而选项 #2 可以更清楚地说明授权失败的原因。 较小的返回值。拥有像getSpecificProperty 这样的方法比getFullObject 做的工作要少得多。随着您的数据模型变得越来越复杂,您将不得不在返回消息中包含越来越多的数据。即使调用者只关心一件事,他们也必须等待所有的事情。考虑一个数据库应用程序。数据库可能需要执行几个不必要的查询来填充客户端永远不会读取的字段。

有理由使用 #1,但在您确定哪些属性组合在一起并且在逻辑上是单个 RPC 之前,它们并没有那么有价值。 (例如 Get)

【讨论】:

protobuf及grpc的client请求

...的序列化库。文档结构protobuf使用.proto文件来保存文档。定义消息protobuf使用message定义消息,例如:AlgPluginObject消息定义了三个字段,分别为插件名称,U0ID及插件方法。消息定义中的每个字段都有唯一的编号。这些字段编号用于... 查看详情

谈谈rpc——golang中jsonrpc和grpc的使用

...迅速被人们所知,那么它是什么,又如何使用呢? RPC定义RPC,即RemoteProcedureCall(远程过程调用),说得通俗一点就是:调用远程计 查看详情

grpc本地服务搭建(代码片段)

RPCRPC原理主流RPC框架gRPC概述特点服务端创建定义服务生成gRPC代码服务端实现客户端实现踩坑记录源码RPCRPC原理RPC框架的目标就是让远程服务调用更加简单、透明,RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/... 查看详情

grpc

...)  对于开发者而言:  1)需要使用protobuf定义接口, 查看详情

springcloud整合grpc-注册中心(eureka/consul)

...,其显著特点就是性能之高(通信采用Netty),通过proto文件定义的接口也是非常清晰而又灵活。    gRPC是谷歌开源的一个高性能的、通用的RPC框架。和其他RPC一样,客户端应用程序可以直接调用远程服务的方法,就... 查看详情

grpc介绍和简单实现

...我们将学习gRPC的用法。创建在项目的proto/hello.proto文件,定义HelloService接口:syntax="proto3";packageproto;//服务传递的参数messageStringstringvalue=1;//区别于RPC服务,gRPC可以在proto文件中定义服务方法接口,从而生成给客户端和服务端两个... 查看详情

grpc入门(代码片段)

...Google开源并维护。它使用ProtocolBuffers(protobuf)作为接口定义语言(IDL),提供跨平台、跨语言的RPC调用支持。gRPC具有以下几个特点:高性能:使用HTTP/2协议,支持多路复用和流控制等特性,能够在客户端和服务器之间高效地传... 查看详情

grpc详解(代码片段)

...过gRPC还是有些特有的优势,如下:gRPC可以通过protobuf来定义接口,从而可以有更加严格的接口约束条件。关于protobuf可以参见笔者之前的小文GoogleProtobuf简明教程另外,通过protobuf可以将数据序列化为二进制编码,这会大幅减少... 查看详情

grpc在c++中的简单使用流程

...9087879.html1.gRPC默认使用protocalbuffers2.第一步是在.proto中定义service:serviceserviceName rpcfunction()    有四种类型的方法:    1)简单的rpc,就像普通的函数调用一样    2)服务端流式rp... 查看详情

grpc(代码片段)

...分布式应用程序和服务。与许多RPC系统一样,gRPC是基于定义一个服务,指定一个可以远程调用的带有参数和返回类型的的方法。在服务端程序中实现这个接口并且运行gRPC服务处理客户端调用。在客户端,有一个stub提供和服务端... 查看详情

grpc学习(代码片段)

...用和服务。与许多RPC系统类似,gRPC也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个gRPC服务器来处理客户端调用 查看详情

使用grpc搭建server端与client端(代码片段)

...一种RPC框架技术,采用ProtocalBuffers(协议缓存)作为其接口定义的语言(就是Proto来写接口)和基础的消息交换格式。  在gRPC中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使... 查看详情

19学习提升:grpc源码中的那些优秀设计(上)

...olBuffers是一种高效、可扩展、语言无关的数据格式。服务定义:gRPC使用ProtocolBuffers作为服 查看详情

漫谈grpc2:实战grpc,跨语言的rpc框架到底好不好用,试试就知道(代码片段)

...友好。入门首先来看一个最简单的gRPC服务,第一步是定义proto文件,因为gRPC也是C/S架构,这一步相当于明确接口规范。protosyntax = "proto3";package proto;// The greeting service definition.service Greeter     // Sends ... 查看详情

grpc收发请求过程解析

...于HTTP/2,序列化支持PB(ProtocolBuffer)和JSON。调用示例:定义一个say方法,调用方通过gRPC调用服务提供方,然后服务提供方会返回一个字符串给调用方。为了保证调用方和服务提供方能够正常通信,我们需要先约定一个通信过程... 查看详情

如何为一元 rpc 定义响应标头

】如何为一元rpc定义响应标头【英文标题】:Howtodefineresponseheadersforunaryrpc【发布时间】:2018-02-0521:06:44【问题描述】:在Go中,我想从我的rpc处理程序实现中设置一些响应标头。具体来说,我想设置一些与缓存控制相关的标头。... 查看详情

第五节——实现一元grpc(代码片段)

第五章——使用一元GRPC传递pcbook5.1、定义一个proto服务和一个一元RPC创建新文件——proto/laptop_service.proto定义一条CreateLaptopRequest消息,它只包含一个字段:我们要创建的笔记本电脑messageCreateLaptopRequestLaptoplaptop=1;定义Cr... 查看详情

漫谈grpc4:grpc和其他rpc框架的横向对比,到底好在哪里?

1,什么是grpcgRpc是一个高性能、开源和通用的RPC框架,面向移动和HTTP/2设计。目前提供C、Java和Go语言版本,分别是:grpc,grpc-java,grpc-go.其中C版本支持C,C++,Node.js,Python,Ruby,Objective-C,PHP和C#支持.gRPC基于HTTP/2标准... 查看详情