Golang grpc:它的可扩展性如何?

Golang grpc:它的可扩展性如何?,go,grpc,Go,Grpc,GRPC的可扩展性如何 我可以为连接到我的服务器应用程序的每个物联网设备运行GRPC服务器吗?也就是说,每个进程有10-20k个GRPC服务器?您是说每个服务都有一个新的GRPC侦听TCP端口吗?Go无法修复其可扩展性;大量TCP侦听器在操作系统范围内存在可伸缩性问题 如果你指的是一个TCP监听器做一个反向代理回数千个其他设备,那么Go非常适合这样做。Go擅长的是廉价的“线程”,因为它们不必分配完整的线程堆栈。在Go中,生成一个“goroutine”大约需要4k,而不是一个真正的线程的最小1MB

GRPC的可扩展性如何


我可以为连接到我的服务器应用程序的每个物联网设备运行GRPC服务器吗?也就是说,每个进程有10-20k个GRPC服务器?

您是说每个服务都有一个新的GRPC侦听TCP端口吗?Go无法修复其可扩展性;大量TCP侦听器在操作系统范围内存在可伸缩性问题

如果你指的是一个TCP监听器做一个反向代理回数千个其他设备,那么Go非常适合这样做。Go擅长的是廉价的“线程”,因为它们不必分配完整的线程堆栈。在Go中,生成一个“goroutine”大约需要4k,而不是一个真正的线程的最小1MB的代价


grpc的设计目的是通过http2传输端口,高效地重用套接字,并高效地打包数据。

“您是说为每个服务提供一个新的grpc侦听TCP端口”是的,我的意思是为每个设备提供一个侦听器。“一个TCP侦听器做一个反向代理,返回到数千个其他设备”,这是我的备份计划,但它需要更多的簿记和同步。在任何情况下,我都没有看到任何关于grpc或Go的信息表明可扩展性差。在Go中编写可伸缩代码非常容易,因为这些库不会犯诸如将io流混入大字节数组或编写不必要的阻塞代码之类的大错误。grpc尤其是一种高效的二进制编码,可用于http2传输。很酷,感谢您的确认。我想你是对的,有一个监听器和一个反向代理更有意义。