【问题标题】:Golang grpc: how scalable is it?Golang grpc:它的可扩展性如何?
【发布时间】:2018-02-28 18:08:58
【问题描述】:

GRPC on Go 的可扩展性如何?

我可以为每个连接到我的服务器应用程序的 IoT 设备运行 GRPC 服务器吗? IE。每个进程有 10-20k 个 GRPC 服务器?

【问题讨论】:

    标签: go grpc


    【解决方案1】:

    你的意思是每个服务都有一个新的 grpc 监听 TCP 端口吗? Go 无法解决它的可扩展性;大量 TCP 侦听器在操作系统范围内存在可伸缩性问题。

    如果您的意思是一个 TCP 侦听器执行反向代理返回到数千个其他设备,那么 Go 非常适合这种情况。 Go 擅长的是廉价的“线程”,因为它们不必分配完整的线程堆栈。在 Go 中,生成一个“goroutine”的成本约为 4k,而不是相对于一个真正的线程来说是 1MB 的最低损失。

    grpc 旨在通过 http2 传输并有效地重用套接字,并有效地打包数据。

    【讨论】:

    • "你的意思是每个服务都有一个新的 grpc 监听 TCP 端口" 是的,我的意思是每个设备都有一个监听器。 “一个 TCP 侦听器执行反向代理返回到数千个其他设备”这是我的备份计划,但它需要更多的簿记和同步。
    • 在任何情况下,我都没有看到任何关于 grpc 或 Go 表明可扩展性差的信息。在 Go 中编写可扩展的代码真的很容易,因为库不会犯大错误,比如将 io 流吞入巨大的字节数组,或者编写不必要的阻塞代码。特别是 grpc 只是一种在 http2 传输中使用的有效二进制编码。
    • 酷,感谢您的确认。我想你是对的,拥有一个听众并做一个反向代理更有意义。
    猜你喜欢
    • 2010-09-07
    • 2023-03-17
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2015-04-04
    相关资源
    最近更新 更多