在哪里存储 thrift 或 grpc 接口?

Posted

技术标签:

【中文标题】在哪里存储 thrift 或 grpc 接口?【英文标题】:Where to store thrift or grpc interfaces? 【发布时间】:2017-09-03 11:25:00 【问题描述】:

thrift 接口可以跨多种语言编译。它只是文本文件,为什么没有像 swagger hub 这样的在线工具?我不想在使用该界面的项目之间复制粘贴界面

我也觉得用 jar 文件打包接口没有用,因为只有 jvm 语言可以解析该接口,而且它也不是用户友好的方式。这不仅与节俭有关,还与 grpc 有关。我没有找到任何与此问题有关的文档,也找不到任何最佳实践

【问题讨论】:

Github?例如,ProtoBuf 文件...github.com/AeonLucid/POGOProtos gRPC 接口是什么意思? Protobuf 定义文件? @ɐuıɥɔɐɯ,是的,完全正确。目前我将它们与实现存储在同一位置 @cricket_007,可能是个好主意,谢谢,您还有其他想法吗? 为什么没有像 swagger hub 这样的在线工具?”——因为到目前为止没有人觉得需要它。那么这意味着什么? 【参考方案1】:

假设你的接口有一个 .proto 文件,每个子项目都需要知道这个文件。解决这个问题有两种主要方法:供应文件,或复制文件。

提供文件

在此选项中,您创建一个存储所有接口定义的附加项目(如 git repo)。每个需要了解接口的项目都将包含一个引用(git submodule 或 git subtree),其中包含接口项目。构建项目时,需要同步接口,然后用于生成必要的代码。

这种方法的缺点是 git subtree 和 submodule(或您使用的任何版本控制)更难使用,并且需要构建代码的人员进行额外的工作。如果您对子项目中的接口进行更改,则可能难以将这些更改应用回上游的接口项目。

复制文件

在此选项中,您可以在项目之间手动复制文件,并手动使它们保持同步。每次进行更改时,您都希望将该更改应用于依赖于接口的所有其他项目。不过,在使用 Protobuf 时,请务必注意您不必 这样做。 Protos 被设计为高度向后兼容。

例如,将 proto 定义从一种形式更改为另一种形式的代码实际上可以同时使用这两种形式。旧代码将查看旧表单,而新代码可以决定查看旧表单还是新表单。升级所有用户后,您可以删除旧表单。

这种方法的缺点是它会将复杂性推入代码的解码部分。您最终需要与未知数量的旧客户端向后兼容。由于并非每个项目都会与界面定义同步,因此界面的所有用户都需要更加灵活。这个问题不是 Proto 特有的,而是自然发生的;它发生在每个人身上。

第二个缺点是必须手动复制更改。您必须确保永远不要重复使用字段编号或名称。如果您有很多项目依赖于接口,那么它对您的工作就更多了。

选择哪个?

从客观上讲,这两种方法都不比另一种更好。每一个都将复杂性推入构建的不同部分。据我所知,大多数人更喜欢复制文件,因为它比学习高级 git 命令更容易。

【讨论】:

以上是关于在哪里存储 thrift 或 grpc 接口?的主要内容,如果未能解决你的问题,请参考以下文章

Rpc接口压测

rpc服务框架thrift介绍

gRPC

grpc原理

Thrift or gRPC ?Alluxio RPC框架的深度实践总结

RPC框架实践之:Google gRPC