总结一下常用的RPC
RPC,远程过程调用,落到具体代码里其实是非常简单的,就是你掉了一个远程函数,这个函数的执行是其实不是本机,而是在远端,执行完成以后通过各种渠道返回结果信息。
对于接口或者函数使用者来说,相当于屏蔽了后面的细节,就当成普通函数用就行了。
对于RPC的基建来说,那可就复杂了,走了一个类似这样的流程
早期RPC可能是仅仅局限于网络传输,其实到了后期RPC在各种介质或者渠道上都有可能进行传输
RPC对于使用者来说似乎是简单了,同时也对平台或者基建层有一些要求,导致有些小平台上可能无法使用
https://github.com/grpc/grpc
https://grpc.io/
gRPC由Google开发。 协议基础:基于HTTP/2协议,并使用Protocol Buffers(ProtoBuf)作为序列化协议。 支持语言:支持多语言,包括C++、Java、Python、Go、Ruby、C#、Node.js等。
gRPC 有四种调用方式,分别是一元、服务端/客户端流式、双向流式。
特点:
https://cn.dubbo.apache.org/zh-cn/
Dubbo 是阿里巴巴开源的基于 Java 的 RPC 分布式服务框架,提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。另外,基于 Spring Cloud Alibaba 技术栈的 Spring-cloud-alibaba-dubbo 更是对 dubbo 技术进行了封装,在基于 Spring Cloud Alibaba 提供的 Nacos 注册中心下,提供了 Dubbo 和 Spring Cloud 的整合方案,即 Dubbo Spring Cloud,使得服务内部的 RPC 协议调用几乎是零成本的改造,实现了基于 RPC 的服务调用。
Dubbo更像是实现了一个订阅发布类型的基础框架,这框架其实也算是一种RPC的形式
https://thrift.apache.org/
thrift是一种可伸缩的跨语言服务的RPC软件框架。它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,高效、无缝地在多种语言间结合使用。2007年由facebook贡献到apache基金,是apache下的顶级项目,具备如下特点:
https://github.com/weibocom/motan
微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。据说是基于Dubbo改出来的一个类似的精简版。
https://github.com/TarsCloud/Tars
https://tarscloud.org/
Tars 是腾讯将其内部使用的微服务框架 TAF(Total Application Framework)多年的实践成果总结而成的开源项目,在腾讯内部有上百个产品使用,服务内部数千名 C++、Java、Golang、Node.Js 与 PHP 开发者。其包含一整套开发框架与管理平台,兼顾多语言、易用性、高性能与服务治理,理念是让开发更聚焦业务逻辑,让运营更高效
TARS 协议采用接口描述语言(IDL)来支持多种编程语言,C++、Java、Node.JS、PHP、Python、Golang等,使不同平台、不同语言编写的程序能够相互通信交流,打破语言屏障。
https://github.com/EmbeddedRPC/erpc
eRPC(嵌入式RPC)是NXP开源的、用于多芯片嵌入式系统和异构多核SoC的开源远程过程调用(RPC)系统。与其他现代RPC系统(如出色的Apache Thrift)不同,eRPC的与众不同之处在于它是为紧密耦合的系统设计的,使用纯C实现远程功能,并且代码大小较小(<5kB)。它不适用于网络上的高性能分布式系统。
eRPC也是基于IDL来生产对应的文件的
目前能看到的RPC基本就这几个,每个应用方向都不太一样,客户端之间比较适合gRPC,嵌入式就只有erpc了,web最好的还是Dubbo,Spring那一套
https://blog.csdn.net/yuiezt/article/details/140190124
https://www.ked.pub/coding/grpc-with-web/
https://www.cnblogs.com/JulianHuang/p/17934703.html
https://www.cnblogs.com/JulianHuang/p/17934703.html
https://www.51cto.com/article/701423.html
https://javaguide.cn/distributed-system/rpc/rpc-intro.html