无需申明格式的跨语言高性能序列化格式有哪些?

2021-02-23 22:47:54 +08:00
 abersheeran

目前我知道的只有 msgpack,据说 Protocol Buffer 这种需要申明格式的都比它略慢一筹。

那么还有没有别的呢?

4231 次点击
所在节点    程序员
23 条回复
paoqi2048
2021-02-23 22:53:50 +08:00
看看 CBOR
jaynos
2021-02-23 23:07:20 +08:00
咋一看有点像 redis 的序列化协议 redis.io/topics/protocol
DoctorCat
2021-02-23 23:10:36 +08:00
自己 diy 就行了,然后 snappy 算法压缩
abersheeran
2021-02-23 23:29:07 +08:00
@paoqi2048 感谢,已经看了。加入 TODO 里了。https://github.com/abersheeran/rpc.py/issues/5
so1n
2021-02-24 00:47:46 +08:00
msgpack 就挺好的...我自己写的 rpc 用的就是 msgpack, 然后复用单链接 速度贼快....
tsui
2021-02-24 07:06:57 +08:00
https://github.com/FasterXML/jackson-dataformats-binary 支持的看了也就 CBOR 或者 ion
abersheeran
2021-02-24 09:23:29 +08:00
@so1n 实际业务里单核每秒能有多少?我希望是能有四位数以上的速度。
abersheeran
2021-02-24 09:27:24 +08:00
@abersheeran 因为我司确定要上微服务了……我是主力开发,我不想用 grpc,太蛋疼了。
Visionhope
2021-02-24 09:31:28 +08:00
@paoqi2048 网上搜了下, 看样子 CBOR 是 msgpack 的 fork, 有很多相似之处.
so1n
2021-02-24 10:21:13 +08:00
@abersheeran 本机的话 1000 并发 0.3 秒,线上的还没上去试。简单看一下你那个是依赖 http 一发一收的?这样速度好像不快。
速度这里需要序列化和传输层一起优化,链接复用后速度很快,不过还需要一些问题去解决,我还没弄好。
so1n
2021-02-24 10:52:26 +08:00
@abersheeran async 生态的话 grpc 真的不太好用😂
RobberPhex
2021-02-24 11:46:24 +08:00
虽然题主限定了“无需声明格式”,但是从回复来看,题主是要上微服务。

那么我觉得还是用 dubbo 或者 grpc 这种成熟的序列化、rpc 方案比较好。
选择一个技术其实是选择了它的生态,比如你在初期选择了 msgpack,那么后续的网关(比如网关的 session 粘滞)、mesh (解析协议内容),都需要选择支持 msgpack 的。初期的技术选型会极大地影响后续的选择。

另外,基于 msgpack 自己做 rpc 框架(或者采用现有的),后续很多已有的坑都需要自己踩一遍(加班 N 小时 /天 /月),比如如何实现流式调用,如何实现 rpc 连接池,如何做监控等。从这一方面来说,dubbo 成熟度比 grpc 要高,官方的模块中包含了很多生产中用到的特性,而且 dubbo3 也会支持 grpc,也能享受到 grpc 的生态优势。

总而言之,如果是自己研究,可以多看看一些序列化 /rpc 框架;如果是生产使用,还是看下业界的流行方案。
abersheeran
2021-02-24 11:58:37 +08:00
@so1n HTTP 层我没有实现,这个可以用 Python 社区的一些解决方案上 2 甚至 3 来提速。grpc 不也是 HTTP2 的嘛。

@RobberPhex 这些我都思考过,选择 HTTP 而不是 TCP/UDP 自定义协议,就是因为你说的这些在 HTTP 上都有很成熟的解决方案,不需要我自己弄。我唯一需要自己处理的就是 HTTP body 的序列化罢了。
hj24
2021-02-24 12:31:16 +08:00
你们上微服务后有跨语言的需求吗
luozic
2021-02-24 13:49:40 +08:00
rsocket 上面可以传输 json grpc 也对于 graphql 还可以自己定义,https://github.com/rsocket/rsocket
abersheeran
2021-02-24 15:35:56 +08:00
@luozic 抱歉,阿里的开源项目,我不会用的。
luozic
2021-02-24 16:38:42 +08:00
@abersheeran 奈飞捐赠给开源的,什么时候成阿里的了? graphql 也是 Facebook 的。
abersheeran
2021-02-24 18:34:10 +08:00
@luozic 不好意思,下午看的比较急,看到最近一次 commit 是阿里的人就先入为主了。现在下班了,我再仔细看看。
lesismal
2021-02-24 21:25:37 +08:00
你们用啥语言,如果是 golang,欢迎尝试我这个

https://github.com/lesismal/arpc
lesismal
2021-02-24 21:26:36 +08:00
msgpack 挺好的,数据量比 json 省一点,比 pb 多,但是方便,基本够用了

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

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

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

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

© 2021 V2EX