前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Protocol buffers 的问题和滥用

Protocol buffers 的问题和滥用

原创
作者头像
HoneyMoose
发布于 2022-07-23 13:02:27
发布于 2022-07-23 13:02:27
7310
举报
文章被收录于专栏:CWIKIUSCWIKIUS

当前公司因为设计上的问题广泛使用了 Protocol buffers。

在使用的过程中发现了很多 Protocol buffers 的使用问题和滥用,一个好端端的工具被用成这样也是比较郁闷。

下面就对使用中的问题进行一些小的总结。

Protocol buffers 用意

Protocol buffers 是为了加快网络数据传输,对传输数据进行压缩处理,通过通过暴露接口让程序之间能够更快的进行通信。

举个栗子,服务或者程序 A 需要获得用户的信息,但是获得用户信息的方法已经在服务或者程序 B 中定义了。

有几个解决方案。

  1. A 再重写一次 B 中已经定义的方法,这个显然是最不经济的,何必重写,并且还造成冗余,不便于维护。
  2. B 程序提供接口,然后我们通过 HTTP 的方式访问,获得返回的数据然后进行序列化和反序列化。
  3. 使用 Protocol buffers,B 程序通过定义 proto 文件的方式将 B 中的方法暴露出来,A 程序可以在程序中直接使用这个方法,如果 B 程序的方法改变了或者升级了,A 程序也不需要做太多修改,因为在 A 程序中直接使用了这个方法。

我们来重点说说使用场景 3。在这个使用场景中,数据交换还是使用的 HTTP,定义的数据传输格式是在 proto 文件中定义的。

如果 B 程序中的方法改变了,但是传输格式没有改变,这是不会影响到程序 A 中的方法的。

通过 HTTP 的数据传输进行了压缩,效率比普通不压缩的 JSON 数据更小。对网络来说更小的数据就意味更大的效率。

简单的解释就是使用 Protocol buffers 就等于在场景 2 上面给你重新封装了一层。

Protocol buffers 传输数据量

Protobuf 限制最大的数据传输量是 2GB。

在默认情况下是 64MB。

不要以为使用了 Protocol buffers 就可以毫无节制的传输任何大小的数据了,其实不是这样的,如果程序中方法返回的数据量过大,或者对象 List 过于复杂。

你自然就会遇到超过 Protocol buffers 传输限制的大小,然后抛出异常。

这个和程序的设计也有很大关系,我们当前系统恨不得传输整个表,都不知道怎么说好。

Protocol buffers 滥调用

没有人真正认真的维护 proto 文件,想怎么用怎么用。

结果的问题是:一个服务需要运行,需要启动其他 5 个服务才能在本地完成调试。

又因为每个服务的启动都占用端口,所以会导致各种方法进行交叉调用,让写好的程序非常难于在本地进行调试。

解决办法就是对每个服务的功能做出界定,不要过多的滥用 Protocol buffers 进行调用。

其实上面的问题都是人为导致的,再好的东西一旦滥用了,就是各种奇葩各种翔了。

https://www.ossez.com/t/protocol-buffers/14042

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Protocol Buffers [protobuf]
Protocol Buffers,简称protobuf,是一个强大的序列化工具,它不仅仅是用于数据存储或RPC数据交换的格式。以下是关于protobuf的一些基本信息。
猫头虎
2024/04/09
2120
Protocol Buffers [protobuf]
Protocol Buffers 开发者指南
欢迎来到 protocol buffers 的开发者指南。protocol buffers 是一个语言中立,平台中立针对通讯协议,数据存储和其他领域中对结构化数据进行序列化的扩展方法。
HoneyMoose
2019/07/25
5940
Protocol Buffers vs Swagger: 为什么Google选择设计Protocol Buffers?
在现代分布式系统中,接口定义和数据序列化是两个至关重要的组件。Protocol Buffers(protobuf)和Swagger(OpenAPI)是两种广泛使用的技术,它们在功能上有一定的重叠,但各有优劣和使用场景。本文将详细比较这两者,并讨论Google为何设计了Protocol Buffers。
运维开发王义杰
2024/06/25
2850
Protocol Buffers vs Swagger: 为什么Google选择设计Protocol Buffers?
深入protobuf(Protocol Buffers)原理:简化你的数据序列化
Protocol buffers 是⼀种语⾔中⽴,平台⽆关,可扩展的序列化数据的格式,可⽤于通信协议,数据存储 等。Protocol buffers 在序列化数据具有灵活、⾼效的特点。
Lion 莱恩呀
2024/11/04
7.3K0
深入protobuf(Protocol Buffers)原理:简化你的数据序列化
gRPC & Protocol Buffers
gRPC 是一个高性能、开源、通用的RPC框架,由Google推出,基于HTTP/2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。
Helloted
2022/06/08
8350
gRPC & Protocol Buffers
强大的序列化工具:Protocol Buffers
Protocol Buffers 为结构化数据的序列化向前兼容,向后兼容,提供了语言中立、平台无关、可扩展机制的途径。类似JSON,但比JSON更小、更快。
Yuyy
2022/09/21
2.2K0
Protocol Buffers 简介
本文档的 Protocol Buffer 的中文文档使用的是 Asciidoctor 进行编排的
HoneyMoose
2019/07/24
5770
Protocol Buffers 简介
简单介绍 protocol buffer
本文介绍了Protocol Buffers的基本概念、使用场景、优点以及实现原理。重点讲解了如何在C++中使用Protocol Buffers进行序列化和反序列化操作。最后提供了参考资料链接,以帮助读者深入学习。
ke1th
2018/01/02
1.3K0
Google Protocol Buffers 数据交换协议
protobuf(Protocol Buffers)是Google推出的一个结构化数据交换协议,用于传递自定义的消息格式,可用于同一台机器的进程间、不同设备进程间的数据传递。protobuf是一种语言无关、平台无关、高效、扩展性良好的语言,提供了一种将结构化数据进行序列化和反序列化的方法。
Yano_nankai
2018/10/08
1.4K0
Google Protocol Buffers 数据交换协议
protobuf 语法 与 protocol-buffers 的使用
protocol-buffers 是 node.js 平台对支持 protobuf 封装的三方模块,下面的例子都通过 protocol-buffers 的使用来说明。
WahFung
2020/08/24
8390
ASP.NET Core中使用Protobuf从入门到实战
一、Protocol Buffers简介和特点 1、Protocol Buffers简介 ProtoBuf (Google Protocol Buffer)是由google公司用于数据交换的序列结构化数据格式,具有跨平台、跨语言、可扩展特性,类型于常用的XML及JSON,但具有更小的传输体积、更高的编码、解码能力,特别适合于数据存储、网络数据传输等对存储体积、实时性要求高的领域。 2、Protocol Buffers特点 XML、JSON是目前常用的数据交换格式,它们可读性较好。但
跟着阿笨一起玩NET
2021/01/29
2.2K0
GRPC: 理解Protocol Buffers和gRPC的基本概念和使用方法
Protocol Buffers(简称protobuf)是由Google开发的一种灵活、高效的结构化数据序列化方法。它类似于XML或JSON,但具备更小、更快、更简单的特点。protobuf主要用于定义数据的结构,然后生成用于解析和序列化数据的代码。这些代码可以用于各种编程语言,如Java、C++、Python、Go等。
运维开发王义杰
2024/06/25
7500
GRPC: 理解Protocol Buffers和gRPC的基本概念和使用方法
Protocol Buffers 在前端项目中的使用
公司后端使用的是go语言,想尝试用pb和前端进行交互,于是便有了这一次尝试,共计花了一星期时间,网上能查到的文档几乎都看了一遍,但大多都是教在node环境下如何使用,普通的js环境下很多讲述的并不清楚,于是把自己的采坑之路总结一下,希望能让给大家提供一些参考。
吴裕超
2018/08/01
6.8K0
Protocol Buffers 在前端项目中的使用
protocol-buffers简介
执行安卓 自动化测试开的时候,需要安装一个库 protocol-buffers,这个库强大的。来看看这么使用,是做什么的?
叉叉敌
2019/08/16
5900
Protocol Buffers C++入门教程
protobuf(Protocol Buffers )是Google的开源项目,是Google的中立于语言、平台,可扩展的用于序列化结构化数据的解决方案。官网见:here,源码见:github。
恋喵大鲤鱼
2018/08/03
13.2K0
Protocol Buffers C++入门教程
Google Protocol Buffers三两事【知识笔记】
小结:根据上图测评,序列化后的空间开销与解析性能上,Avro与Protobuf不相上下独占鳌头;另外根据“Protobuf协议介绍及性能实测”文中测评来看,报文在几千个字节以内,Protobuf与JSON/XML并没有太大优势,而hessian2表现更优秀;当报文大小超过10万字节,Protobuf性能是XML的3倍,是JSON的2倍,Hessian2的2倍;当报文大小超过10万字节,序列化后的字节大小约XML的1/4,约JOSN的1/2,约Hessian2的1/3;高性能原因Protobuf优化的二进制消息格式,JSON/XML是文本描述的;适用于性能要求高的RPC调用。
瓜农老梁
2020/04/07
1.1K0
Google Protocol Buffers三两事【知识笔记】
搞定Protocol Buffers (上)- 使用篇
因为工作中gRPC使用非常频繁,而gRPC的默认序列化编码采用的也是Protocol Buffers。业界也盛传其效率及其高效:
用户3904122
2022/06/29
5.2K0
搞定Protocol Buffers (上)- 使用篇
造轮子系列之Protobuf
作为一个程序猿,对造轮子这事情可以说是情有独钟,几乎程序猿内心都存在一个梦想是去将开源的技术都实现一遍,所有从本篇开始,我会开一个造轮子系列。
zhuanxu
2019/05/15
8910
造轮子系列之Protobuf
Go 语言中使用 Protocol Buffers
当前流行微服务框架,gRPC和Protocol Buffers 是 Go 的微服务框架常用的框架。
张云飞Vir
2020/04/09
1.4K0
GRPC: Protocol Buffers 3 语法与使用探讨
Protocol Buffers(简称Protobuf)是一种语言中立、平台中立、可扩展的序列化数据结构的方式。它由Google开发,是一种类似于XML和JSON的数据交换格式,但具有更高的效率和灵活性。在本文中,我们将详细探讨Protocol Buffers 3的语法和使用方法。
运维开发王义杰
2024/06/25
3020
GRPC: Protocol Buffers 3 语法与使用探讨
相关推荐
Protocol Buffers [protobuf]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档