微软比 google 早发明 20 年的 RPC 远程调用,然而现在市面上几乎全是 gRPC 的天下!

2023-03-16 10:28:31 +08:00
 tool2d
最近在研究 Google 的 gRPC ,几乎都成为大半个云行业标准了。很好奇微软有没有类似替代品,一查还真有。

早在 1995 年,微软就出了一本书,叫<Microsoft RPC programming guide>,那时候微软 RPC 编程体系已经很成熟了,但是没有开源!

正式开源,是在 2005 年,也就是十年后,发布了 DCE/RPC 的标准。可惜那时候完全没掀起什么风浪,当时那个时间节点,大家很难把开源和 M$联系起来。

微软用的是 IDL 语法,和 COM 大同小异,也支持跨语言调用。我自己在虚拟机上编译了一下,用 wireshark 抓了一下 TCP 的远程调用包,搭建很顺利。

感叹技术做的早 20 年也没用,生不逢时啊。

5358 次点击
所在节点    程序员
24 条回复
nicebird
2023-03-16 19:46:02 +08:00
因为不好用啊,com 都死了。
dobelee
2023-03-16 21:53:15 +08:00
吃饭还得跟 Google 混。
Ads 、Youtube 、Android 、Golang 、Chrome 、gRPC 、TensorFlow...

浓眉大眼的巨婴不靠谱...
leeg810312
2023-03-16 21:55:10 +08:00
感觉这楼里包括 OP 在内很多技术人都还是活在微软是靠卖 Windows 赚大钱的年代,Windows 只占微软业务总量一个零头都多少年了
lesismal
2023-03-20 12:34:25 +08:00
@cassyfar 先了解下为什么 Google 搞 QUIC 并被采纳作为 HTTP3.0

> 1. 即使是内网环境,所有的流量也应该加密,哪怕是 TCP 也应该套 SSL 。不搞这个你连等保都过不了。

那这么说吧,很多家其他大厂的 RPC ,是没用 TLS 的。是不是这些大厂就做错了?不是每种服务都要等保流程的,否则安妮这个所有流量都要加密的说法,是不是数据库、redis 这些基础设施都要 TLS ?但实际情况是多数这种内网基础设施都没用 TLS 连接、只是 4 层 TCP 而已,否则性能直接掉一块。
也不是哪个东西用的多就一定它是对的、别人是不好的。就像 windows 比 macos 用户多多了但微软被喷那么多,就像 HTTP1.x 目前仍然是互联网主要流量,2.0 搞这么多年也没普及反倒是委员会老爷们在 2.0 没普及的情况下直接跨过去投票点赞支持 3.0 了,为啥?因为 1.x/2.0 都是垃圾啊!
GRPC 用的最多,一是谷歌背书,二是数量占据多数的中小厂商不具备自研这种基础设施的能力,你看看大厂基础设施,几乎都有自己的轮子,为啥 GRPC 不一统江湖了?先看看性能测试数据?先区分下不同场景加密的必要性?

> 2. 线头阻塞是个啥玩意,说的是 HOL blocking ?这个一般不是翻译为队头阻塞么。

一个概念多种叫法没什么奇怪的,”队头“更偏学术一点的用词、“线头”更形象化偏口语一点而已,这里也有线头:
https://baike.baidu.com/item/%E7%BA%BF%E5%A4%B4%E9%98%BB%E5%A1%9E/1462441

也可能是年纪大一点的我们那个年代叫线头的多一些。另外有些东西是约定俗成,比如“粘包”这种错误定义,但其实提到它大家也知道是啥意思,所以约定俗成了也就不要纠结字眼

> 这里有点矛盾,因为 TCP 的队头阻塞是在丢包率比较高的网络中才有较大的影响,如果不丢包也就没什么阻塞一说了,而你之前论证不需要 SSL 说是内网环境,内网的丢包率通常是非常低的

我不是理论论证,而是就实时论事,比如你如果担心内网流量被抓包,那为什么不先担心下为什么被入侵了提权了,被入侵了难道不比被抓包更严重更可怕吗?别人有更多方法搞事情可都是比抓内网包省事多了。最常见的部署挖矿代码、勒索病毒、登入你的数据库、篡改你的服务挂马之类的,但很少听说别人都入侵了然后还靠抓包这种费时费力拐弯抹角的方式搞事情的。当然,性能不是主要需求的,内网加 TLS 也完全没问题。
还有就是自己的工作实践、以及行业实际情况,你可以随便看看各大厂相关的开源项目,RPC 不用 TLS 的场景多了去了。


> 另外 TCP 的问题和 gRPC 有啥关系,你换其他 TCP 上的 RPC 实现不是一样的问题么。连解决方法,比如 multiplexing 都是一样的,别的 RPC 能用,gRPC 也能用。

同样的,你先了解下为什么 Google 搞 QUIC 并被采纳作为 HTTP3.0

> 当然你可以换基于 UDP 的 RPC 实现,gRPC 社区我看也在做基于 QUIC 也就是 HTTP3 作为传输层的工作。

这里你自己都说了社区有在做基于 QUIC ,和上面一样,为什么不继续用 2.0 ?同样的,你先研究明白为什么 2.0 解决不了 4 层的线头阻塞就明白了。我提示一下:mutiplexing 解决不了是因为它是 7 层的策略,而 TCP 线头阻塞是 4 层,你 multiplexing 是基于别人 4 层实现的,4 层自己先堵车了,7 层动都动不了、怎么解决。。

这方面文章很多,随便找下认真看看就懂了,我就不展开说了

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

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

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

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

© 2021 V2EX