rpc总结,以及公司rpc实现方案迁移注意点

rpc,消息中间件算是分布式系统中既基础,又重要的组件。本文总结一下自己对rpc的理解,以及公司要进行rpc技术迁移时需要考虑的问题。

rpc(Remote Procedure Call Protocol)远程过程调用协议,首先rpc只是一个协议,使得客户端调用远程的服务,像调用本地服务一样,而不需要详细了解通讯过程,编解码过程。其中,传输协议,编解码协议的实现,就是rpc具体实现框架要解决的了。

那么一个rpc框架具体应该考虑哪些问题,才能使得调用者完成一次远程过程调用呢?

1,代理

    首先,客户端调用者需要对远程服务调用的过程透明,那么在java程序中,使用代理,是一个特别好的选择,我研读了我们公司内部的rpc组件,以及dubbo,他们都是通过代理,实现客户端对远程服务的调用,其中,服务发现,通讯细节,则是在代理内部实现,


我们内部的客户端调用过程比较简单,客户端,调用getService,获取所需服务,由CuratorDiscoveryAvroServiceFactory提供“远程”

service对象,其中CuratorDiscoveryAvroServiceFactory封装了zk的服务发现功能,通过proxy.getInstance()返回远程service服务对象。

其中,我们都知道,每一个Proxy都需要实现一个InvocationHandler,用来对代理对象进行包装,我们内部实现了InvocationHandler的

ServiceInvocationHandler用来封装服务发现,以及请求通讯的细节,我们还提供了静态发现,既写死ip,从来不需要再去zk上发现服务,而是通过配置中的远程服务的相关信息,直接构建service对象,并返回。

dubbo的设计比我们的要复杂的多,dubbo的代理使用Javassist实现,以及协议Protocol的概念,invoker由协议实现类返回,不同的协议实现类返回各自协议实现的invoker,用户调用远端方法时,是invoker发送远端请求,但是invoker发送请求所使用的协议,又是protocol的实现类决定的。 用于在不同情况下,并根据不同策略,选择不同的代理方式,提供服务,但原理都是代理内部实现路由,服务发现,权重等策略,以及通讯细节。稍后进行部分源码解读。

服务发现:

代理如何知道远端服务所在的位置,如何与之取得通信,这就需要服务发现,服务发现算是目前很常用的功能概念了。

我们公司内部,大致是如此的调用链:

通过zk地址,以及所需接口名字,构造serviceProvider最后发现服务,很常规的服务发现流程。

使用服务发现,可以使得调用者与远端服务进行解耦,即便远端服务挂了,或者新增了机器,zk也可实时通知客户端更新远端服务可用列表。

这里顺便多说一句。其实zk的地址,大多都是直接配置在客户端的,客户端发现zk,这也是个服务发现,那么直接写死客户端是不是不太好。

其实这个问题,目前没法解,就像一个先有鸡还是先有蛋的过程。阿里的vipserver是通过安装一个客户端域名发现,来解决这个问题。

通讯

大多rpc通讯协议不使用http,如果使用http协议通讯,那就更像是restapi调用了,系统依赖复杂,调用繁多的情况下,基于tcp层通讯

比基于http层通讯优势大很多,少了每次请求的3次握手,因为tcp可建立长连接,并且http基于7层协议,发包收包都要一层一层解析。

在基于tcp层协议下通讯,可选用bio,nio方式,nio方式优点我就不多说了,查看netty实现原理就知道了。

我们内部的rpc框架,以及dubbo,以及hsf都是基于netty做nio通讯,并用netty做 rpcserver的。

序列化反序列化

序列化反序列化又叫做编解码。通讯过程传输的是二进制流,客户端调用远端服务,发送的传输请求,需要编码为二进制流,才能在网络上传输。我们公司内部使用avro进行编解码。rpc框架也是基于avro的ipc包实现的。

常用的序列化方式有hession,thrift,avro,等。dubbo默认使用hession进行编码



公司内部之前选型rpc框架为avro,由于接下来要切入hsf,所以我对自己的关系服务rpc进行了改造,改造后,客户端只要简单的重启,即可。

不需要做太多代码的修改。

一个正常的rpc服务调用端实现,在保证可正常调用远端rpc服务外,还需要考虑一下几点:

降级,熔断:接口调用量多,错误率频升,为保证核心服务可用,弃用边缘服务,降级策略,熔断策略应在客户端也即调用处使用。

限流:服务预估可承载流量,当线上实际流量过大或剧增时,为了保证服务可用,当弃掉部分请求。

路由:客户端可根据接口,参数等,进行路由,也可优先选择同机房的服务进行路由。

为了迁移,本人先调研了一下HSF是如何实现上述功能的,这样,才能知道如何改造自己的rpc服务。

hsf为阿里内部rpc中间件,本身软负载,限流,服务治理等功能。而hsf的上述功能,都是在配置中心进行配置,而不是在代码中进行实现。

而hsf目前还没有熔断机制。我与阿里的hsf开发负责人进行了咨询,他们正在开发自动熔断功能。

由此,我抽象了rpc的客户端的技术实现。限流,路由功能放在具体rpc技术实现中,熔断功能则放在客户端处。


businessClass调用FansRPCApiService接口,

FansRPCServiceClient本身不做rpc技术细节的事,由FansRPCService的实现类去做。

如果切了其他rpc框架,则新建个FansRPCService实现类,即可。

同时,因为hsf不提供熔断机制。所以我在FansRPCServiceClient处做熔断工作。


熔断工作在client端做,这样及时内部rpc实现方式改变,也不影响。

由于hsf已做了路由,限流等工作,所以此部分工作由FansRPCService实现类做。


未完待续............

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容