从 0 开始学微服务
胡忠想
微博技术专家
64643 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
开篇词 (1讲)
结束语 (1讲)
从 0 开始学微服务
15
15
1.0x
00:00/00:00
登录|注册

14 | 开源RPC框架如何选型?

特性
特性
组件交互流程
架构
client访问server流程
信息上报流程
心跳上报流程
管理命令流程
服务发布流程
架构
功能模块
架构
序列化格式
通信协议
通信框架
架构
思考题
未来发展趋势
对比选型
Thrift
gRPC
对比选型
Spring Cloud
Tars
Motan
Dubbo
总结
跨语言平台的开源RPC框架
限定语言平台的开源RPC框架
开源RPC框架如何选型?

该思维导图由 AI 生成,仅供参考

专栏第 6 期我给你讲解了 RPC 远程调用的原理,简单回顾一下一个完整的 RPC 框架主要有三部分组成:通信框架、通信协议、序列化和反序列化格式。根据我的经验,想要开发一个完整的 RPC 框架,并且应用到线上生产环境,至少需要投入三个人力半年以上的时间。这对于大部分中小团队来说,人力成本和时间成本都是不可接受的,所以我建议还是选择开源的 RPC 框架比较合适。
那么业界应用比较广泛的开源 RPC 框架有哪些呢?
简单划分的话,主要分为两类:一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的。
跟语言平台绑定的开源 RPC 框架主要有下面几种。
Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。
Motan:微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。
Tars:腾讯内部使用的 RPC 框架,于 2017 年对外开源,仅支持 C++ 语言。
Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言,最近几年生态发展得比较好,是比较火的 RPC 框架。
而跨语言平台的开源 RPC 框架主要有以下几种。
gRPC:Google 于 2015 年对外开源的跨语言 RPC 框架,支持常用的 C++、Java、Python、Go、Ruby、PHP、Android Java、Objective-C 等多种语言。
Thrift:最初是由 Facebook 开发的内部系统跨语言的 RPC 框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持常用的 C++、Java、PHP、Python、Ruby、Erlang 等多种语言。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

开源RPC框架选型是关键决策,本文介绍了RPC远程调用的原理和业界应用广泛的开源RPC框架。文章首先介绍了限定语言平台和跨语言平台的开源RPC框架,分别列举了Dubbo、Motan、Tars和Spring Cloud等框架的特点和架构。对于选择框架的建议,文章指出Spring Cloud适合不想自己实现微服务组件的开发者,而Dubbo和Motan在性能方面更有优势,适合对性能有苛刻要求的场景。如果涉及多个语言平台之间的相互调用,应选择跨语言平台的RPC框架。文章详实对比了各个框架的特点和适用场景,为读者提供了选型的参考依据。 跨语言平台的开源RPC框架包括gRPC和Thrift。gRPC采用了HTTP/2通信协议和ProtoBuf数据序列化格式,在移动端应用和对传输带宽敏感的场景具有优势。Thrift支持多种语言,适用范围广泛。对于跨语言的服务调用场景,文章建议根据语言支持和性能需求选择合适的框架。 未来RPC框架的发展趋势是支持多语言,各个RPC框架都提供了Sidecar组件来支持多语言平台之间的RPC调用。虽然gRPC和Thrift支持跨语言的RPC调用,但缺乏一系列配套的服务化组件和服务治理功能的支撑,需要自行考虑实现注册中心、熔断、限流、监控、分布式追踪等功能。 总的来说,本文对几种使用最广泛的开源RPC框架的选型建议进行了详细介绍,为读者提供了技术特点和选型依据。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学微服务》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(32)

  • 最新
  • 精选
  • 张龙大骗子
    tars不是介绍说支持C++、Java、PHP、NodeJS ,最近还发布了Go语言版本的

    作者回复: 最近升级的吧,我了解的是刚发布的时候。据说最近也在做mesh方案

    2018-09-22
    2
    7
  • 大龄小学生
    老师,rpc和mq的优势是什么?感觉rpc能做的mq都能做。

    作者回复: mq主要用作异步解耦,场景不同

    2018-09-23
    5
  • long.mr
    胡老师,c++的,是不是也可以考虑下baidu rpc呢,性能在rpc里还是很强的哈~,对比的时候可以考虑下呀😄

    作者回复: brpc我也了解过,里面有些特性很赞,不过感觉开源的声势不够大

    2018-09-22
    2
    4
  • 王晓军
    老师,为什么K8s和service fabric不在你的介绍范围,他们不是微服务框架吗?

    作者回复: k8s是容器平台,不算微服务框架,service fabric不太了解

    2018-10-20
    2
  • 老师你好,请问RPC接口和http接口咋区分?spring cloud的调用方式算rpc接口还是http接口?

    作者回复: 算是一种广义的rpc接口吧

    2018-09-25
    2
  • everpan
    tars支撑java php 最近还支持go了

    作者回复: 看了官方文档,最近更新了。

    2018-09-22
    2
  • 扬扬
    本人经常使用vs2010开发,但是grpc在开发平台的支持限制性太大了,如何破呢?

    作者回复: 什么语言?

    2018-12-13
  • 段启超
    胡老师,“相比 Dubbo 和 Motan 所采用的私有协议来说,在高并发的通信场景下,性能相对要差一些 ,所以对性能有苛刻要求的情况下,可以考虑 Dubbo 和 Motan”这里,应该是性能相对要好一些吧。

    作者回复: 是http相对要差一些

    2018-12-01
  • 步*亮
    老师你好,我想请教个问题。如果我们平台采用java语言开发,从而选择了springcloud框架。当有一个原有由c++实现的服务要作为服务提供者注册进来,可以实现么?

    作者回复: spring cloud应该也支持sidecar模式,可以查查

    2018-11-15
  • gggwvg
    Tars有完整的服务治理生态,支持多语言。
    2018-09-22
    2
    15
收起评论
显示
设置
留言
32
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部