我们真的需要 gRPC 吗?

2023-02-24 09:39:40 +08:00
 Nazz

相对 gRPC, JSON-RPC:

最后问一下, 有根据文件生成各大语言 JSON 代码的命令行工具吗?

9411 次点击
所在节点    程序员
72 条回复
julyclyde
2023-02-24 09:46:01 +08:00
说白了 gRPC 并不是给人类用的啊,你这个所谓简单透明、可读性其实没啥用

封装切换开销,json 并不占优
chendy
2023-02-24 09:48:05 +08:00
一个序列化二进制,一个序列化文本
侧重点就不一样,没法比
tool2d
2023-02-24 09:48:59 +08:00
一个文本协议,另一个二进制协议,完全不一样的东西。
sadfQED2
2023-02-24 09:50:18 +08:00
编解码性能差远了,你不在乎这点性能当然无脑 json 啊。高并发场景下 json 编解码动不动就干满 cpu
totoro52
2023-02-24 09:50:55 +08:00
emmm json 不是更重吗 而且这个就是给机器看的
DefoliationM
2023-02-24 09:51:47 +08:00
我们真的需要 HTTP 协议吗,现在感觉 HTTP 协议就是一坨狗屎,不如 rpc 直观方便
changnet
2023-02-24 09:51:51 +08:00
json 的序列化性能和 protobuf 的序列化性能(效率和包大小)不是同一个级别的吧,如果对性能不高,用 json 可读性当然更高
yty2012g
2023-02-24 09:57:22 +08:00
我怎么觉得你这三点都不是基于 json 的 rpc 的优点呀...
1. grpc 用的 pb 的协议描述文件怎么看也比 json 更加明确和透明,json 的类型不够丰富
2. 序列化大 JSON 字符串的 CPU 开销是巨大的,代价远比 pb 的序列化要高。
3. 可读性方面,pb 也可以将对象直接打印出来啊,当然你说要通过抓包的时候就能直接从二进制看出数据内容,那确实 JSON 更好,只不过一般不是这么玩的
julyclyde
2023-02-24 10:01:29 +08:00
@DefoliationM 所以后来 http 也不文本了
echoless
2023-02-24 10:02:28 +08:00
@yty2012g pb 也可以通过代理看明文
mcfog
2023-02-24 10:02:42 +08:00
关于最后一个问题,我推荐一个支持生成各大语言 JSON 代码的命令行工具:protoc
aladdinding
2023-02-24 10:07:04 +08:00
是的 我们需要
Morii
2023-02-24 10:08:58 +08:00
你的场景是不是序列化性能不敏感啊
DamonLin
2023-02-24 10:09:29 +08:00
还是看场景吧
kongkongyzt
2023-02-24 10:14:33 +08:00
主要是性能,有的场景是对性能和实时性比较敏感的,比如交易
lujiaxing
2023-02-24 10:23:39 +08:00
当然需要.
比如你们这些不做 Java 的, 想找一个类似 Dubbo 的服务间通信 RPC 组件要用什么呢? 如果是 .NET 框架的话除了 ABP 以外就只能用 protobuf-net 了.

还有涉及到高并发场景下本来就是要尽量减少传输体积. 这种情况下不用 gRPC 用什么, 用 JSON 么? 还是 WCF / RMI ?
julyclyde
2023-02-24 10:25:25 +08:00
不过 gRPC 也可以换编码的吧
有人试过 json 吗?体验怎么样?
Logtous
2023-02-24 10:26:25 +08:00
貌似 MessagePack 挺符合 op 的要求
Maboroshii
2023-02-24 10:33:08 +08:00
grpc 除了编码默认是 protobuf 以外,它还跨平台跨语言。 如果不用跨语言,可以随便找个开源的 rpc 框架用了,不过我看 golang 的 rpc 框架,基本都支持了 pb ,而且吞吐都比 grpc 高。
Nazz
2023-02-24 10:34:58 +08:00
@Morii 对于大部分公司, JSON 作为 IDL 性能是可以接受的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/918739

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX