那么,netty是什么东西呢,跟RPC有什么关系?
Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序
RPC要做到用户无感知的调用远程服务必定要经过网络传输,而netty正好是是Java编写的快速开发高性能高可靠性的网络编程框架。
目前使用netty作为传输层的RPC框架很多,国内知名的有dubbo,motan等。
下面以新浪开源的motan为例,说明netty在RPC的位置:
下图中transport即使使用netty实现的。
总结来说,netty就是解决RPC网络传输的。
分布式RPC需要解决哪些问题呢?
- protocol:传输协议
- proxy:client代理,服务引用方调用方法通过代理发送远程消息
- codec:协议编解码压缩等
- transport:协议传输
- registry:注册中心,服务注册服务发现
- cluster:负载均衡,服务容错策略
- 其他:服务降级,服务隔离,服务治理
如何实现一个分布式的RPC框架呢?
现在互联网已经很少单点服务了,一个好的rpc框架能帮我们省掉很多工作,那么如何撸一个自己喜欢的RPC框架呢?
现在写rpc框架已经不难了,我们可以有很多参考,很多成熟的第三方开源项目可以依赖,可以说是站在巨人的肩膀上。
第一步,选择传输协议:
高性能的rpc和良好的编码协议是分不开的。好的协议不仅耗用流量小,而且序列化和反序列化更快。
现在比较流行的协议有thrift,protobuf,json,restful等。其中thrfit和protobuf性能都比较优异,而且占用空间小,最重要的是跨语言,具有语言平台无关性。但,美中不足的是他们都需要预先根据协议文件预先生成好代码。开发极不流畅。
我们也可以自定义协议,像dubbo和motan一样,定制自己的私有协议,
比如motan协议的header部分如下:
body部分采用hession或者fastjson序列化,
如果不考虑跨语言,这种算是比较完美的解决方案。
定义协议过程中的一些重要且容易忽略的问题:
- 协议版本号
- 消息id
- 协议扩展字段
第二步,协议传输层
一个高性能RPC框架最重要的四个点就是:传输协议,框架线程模型,IO模型,零拷贝。
java程序如果能做好这四点,那么性能应该不会比c++程序差多少。
而作为java开发者,netty正好解决了后三个点,所以使用netty作为RPC框架的传输层会事半功倍。
链接:https://www.zhihu.com/question/25536695/answer/134976748
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第三部,注册中心的选择
现在有很多提供服务注册发现的服务,实现成本比较低就是zookeeper,可以很容易的实现服务注册和服务发现的功能。
解决了这三部,后面的就得脚踏实地码代码了,当然后续会有很多细节,不过都不是问题,现在有好多成熟的开源框架可以参考。
当然也可以参考我最近实现的分布式RPC框架,也欢迎提issue(后续会持续优化)。
自己撸一个RPC还是很不错的,如果有兴趣建议自己撸一遍玩玩。
下面是广告时间>>>>>>>>>
dempeZheng/forestRPC 基于netty, spring,轻量的高性能分布式RPC服务框架
Overview
基于netty, spring,轻量的高性能分布式RPC服务框架。简单,易用,高效。
Features
- 服务端支持多种序列化方式:fastjson,hession,kryo
- 服务端支持多种压缩方式:gzip,snappy
- 服务端可根据group进行线程隔离,支持基于spring对不同的group配置不同的业务线程池
- 支持注解配置,也支持spring xml配置
- 支持服务发现服务注册
- client端支持多种负载均衡策略和容灾策略
- client内置连接池
- 基于netty 4.x版本实现,高性能(win 8cpu单机8w+)
TODO
- 服务降级功能
- http服务支持
- 跨语言协议支持
- 服务治理管理后台
相关推荐
books_《Go语言高级编程》开源图书,涵盖CGO、Go汇编语言、RPC实现、Protobuf_advanced-go-programming-book.zip books_《Go语言高级编程》开源图书,涵盖CGO、Go汇编语言、RPC实现、Protobuf_advanced-go-...
C语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC...RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPCC语言头文件 RPC
**Thrift**是Facebook开发的另一个著名的跨语言RPC框架,支持广泛的编程语言。它提供了编译器和库来构建跨语言服务,具有很强的灵活性。 **RPCX**是一个高性能、全功能的分布式RPC框架,专为Go语言设计。RPCX的特点...
servant C++语言框架rpc的源码实现 tools C++语言框架IDL工具的源码实现 util C++语言框架基础工具库的源码实现 examples C++语言框架的示例代码,包括:快速入门示例、promise编程入门示例、压测程序示例 unittest ...
1. 使用`MIDL`(Microsoft Interface Definition Language)工具生成接口定义语言(IDL)文件的C++代码。 2. 创建客户端和服务端代码,分别调用RPC运行时库提供的函数来初始化和注册RPC接口。 3. 实现RPC接口指定的...
这个"ONCRPC.rar_ONCRPC_code rpc_onc_onc rpc"文件包含的是关于ONC RPC协议的实现代码,主要针对的是JAVA平台,旨在实现不同编程语言之间的RPC调用。 在RPC(Remote Procedure Call)机制中,客户端可以透明地调用...
hprose-golang, Hprose是跨语言的RPC 这里项目为 Hprose 2.0,用于 Golang Hprose 2.0用于 Golang Hprose 2.0用于Golang中文文档简介安装使用Http服务器基于 net/http协议的基于 fasthttp的基于的 。基于
https://github.com/wa-lang/waWaBook(Go语言实现的MD电子书构建工具) https: //github.com/wa-lang/wabook两位作者的公众号 本书涵盖CGO、Go语言、RPC实现、Web框架实现、环球系统等高阶主题,针对Go语言有一定...
5. **文档(Documentation)**: 解释库的API和如何使用它们来构建JSON-RPC服务端。 **开发流程** 使用"jsonrpc-c-master"进行开发通常包括以下几个步骤: 1. **理解库API**: 阅读库的头文件和文档,了解如何初始化...
本篇将深入探讨跨语言RPC协议,特别是Google的GRPC框架以及其使用的Protocol Buffers协议。 首先,RPC分为两种主要模式:单向RPC和双向流式RPC。单向RPC是客户端发起请求,服务端返回一个单一的响应。而双向流式RPC...
1. **gRPC概念**:gRPC是一个平台无关、语言无关的远程过程调用(RPC)系统,由Google开发。它提供了强大的服务发现、负载均衡、流传输和安全功能,使得跨服务通信变得简单。 2. **HTTP/2协议**:HTTP/2是HTTP协议...
这个技术在跨平台交互和分布式系统开发中发挥着重要作用,使得LabVIEW可以与不同编程语言编写的服务进行数据交换。以下是关于LabVIEW XML-RPC的详细知识点: 1. **XML-RPC简介**: - XML-RPC(XML Remote ...
然而,RMI相比Thrift等现代RPC框架,在跨语言支持和性能上可能稍逊一筹。 在"RPC-code_rpc_"项目中,我们可以预期看到以下内容: 1. **服务定义**:无论是Thrift还是RMI,都需要定义服务接口。Thrift使用IDL...
该项目为Java语言的RPC(远程过程调用)框架示例,包含43个文件,其中Java源文件28个,XML配置文件11个,Markdown文件2个,Git忽略文件2个。项目旨在通过学习与改进实践,深入了解RPC-Demo的设计与实现,以提升相关...
PHPRPC3.0的README可能解释了框架的核心功能、特点以及如何开始使用它。 5. **asp**、**delphi**、**java**、**as2**、**as3**、**php**:这些文件夹代表了PHPRPC3.0支持的不同编程语言。RPC框架的一个显著特点是其...
在这个"RPC.rar"压缩包中,主要围绕C++语言在VC6.0环境下开发Windows RPC程序进行深入探讨。 首先,C++是一种强大的面向对象编程语言,广泛用于系统级和应用程序开发。VC6.0,全称Microsoft Visual C++ 6.0,是微软...
总结起来,GRPC是现代分布式系统中实现跨语言RPC通信的理想选择,它结合了高效二进制序列化协议Protocol Buffers和强大的服务治理能力。通过定义清晰的.proto文件,GRPC简化了跨语言通信的复杂性,同时也为开发者...
- 跨语言交互:不同语言编写的系统间通信,RPC框架提供了统一的接口。 7. **最佳实践**: - 选择适合业务场景的RPC框架。 - 优化序列化和反序列化,减少网络传输开销。 - 设计良好的服务接口,避免过于复杂的...
RPC(Remote Procedure Call)是一种计算机通信协议,允许一...- **兼容性**:是否支持多种语言,是否与其他系统集成方便。 通过了解这些基础知识,开发者可以更好地理解和实现RPC,从而构建高效、可靠的分布式系统。
3. **微服务通信**:在微服务架构中,各服务可能使用不同语言编写,PHPRPC作为跨语言的RPC框架,有助于构建松耦合的服务间通信。 总的来说,PHPRPC .Net服务端+客户端提供了一个强大的工具集,使得PHP和.NET开发者...