Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >6种微服务RPC框架,你知道几个?

6种微服务RPC框架,你知道几个?

原创
作者头像
程序员追风
修改于 2019-08-21 02:05:57
修改于 2019-08-21 02:05:57
3.9K0
举报

开源 RPC 框架有哪些呢?

一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的。

跟语言平台绑定的开源 RPC 框架主要有下面几种。

  • Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。
  • Motan:微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。
  • Tars:腾讯内部使用的 RPC 框架,于 2017 年对外开源,仅支持 C++ 语言。
  • Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言

而跨语言平台的开源 RPC 框架主要有以下几种。

  • gRPC:Google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。
  • Thrift:最初是由 Facebook 开发的内部系统跨语言的 RPC 框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持多种语言。

如果你的业务场景仅仅局限于一种语言的话,可以选择跟语言绑定的 RPC 框架中的一种;

如果涉及多个语言平台之间的相互调用,就应该选择跨语言平台的 RPC 框架。

RPC 框架,它们具体有何区别?

1. Dubbo

先来聊聊 Dubbo,Dubbo 可以说是国内开源最早的 RPC 框架了,目前只支持 Java 语言,它的架构可以用下面这张图展示。

从图中你能看到,Dubbo 的架构主要包含四个角色,其中 Consumer 是服务消费者,Provider 是服务提供者,Registry 是注册中心,Monitor 是监控系统。

具体的交互流程是 Consumer 一端通过注册中心获取到 Provider 节点后,通过 Dubbo 的客户端 SDK 与 Provider 建立连接,并发起调用。Provider 一端通过 Dubbo 的服务端 SDK 接收到 Consumer 的请求,处理后再把结果返回给 Consumer。

2. Motan

Motan 是国内另外一个比较有名的开源的 RPC 框架,同样也只支持 Java 语言实现,它的架构可以用下面这张图描述。

Motan 与 Dubbo 的架构类似,都需要在 Client 端(服务消费者)和 Server 端(服务提供者)引入 SDK,其中 Motan 框架主要包含下面几个功能模块。

  • register:用来和注册中心交互,包括注册服务、订阅服务、服务变更通知、服务心跳发送等功能。
  • protocol:用来进行 RPC 服务的描述和 RPC 服务的配置管理,这一层还可以添加不同功能的 filter 用来完成统计、并发限制等功能。
  • serialize:将 RPC 请求中的参数、结果等对象进行序列化与反序列化
  • transport:用来进行远程通信,默认使用 Netty NIO 的 TCP 长链接方式。
  • cluster:请求时会根据不同的高可用与负载均衡策略选择一个可用的 Server 发起远程调用。

3. Tars

Tars 是腾讯根据内部多年使用微服务架构的实践,总结而成的开源项目,仅支持 C++ 语言,它的架构图如下。

Tars 的架构交互主要包括以下几个流程:

  • 服务发布流程:在 web 系统上传 server 的发布包到 patch,上传成功后,在 web 上提交发布 server 请求,由 registry 服务传达到 node,然后 node 拉取 server 的发布包到本地,拉起 server 服务。
  • 管理命令流程:web 系统上的可以提交管理 server 服务命令请求,由 registry 服务传达到 node 服务,然后由 node 向 server 发送管理命令。
  • 心跳上报流程:server 服务运行后,会定期上报心跳到 node,node 然后把服务心跳信息上报到 registry 服务,由 registry 进行统一管理。
  • 信息上报流程:server 服务运行后,会定期上报统计信息到 stat,打印远程日志到 log,定期上报属性信息到 prop、上报异常信息到 notify、从 config 拉取服务配置信息。
  • client 访问 server 流程:client 可以通过 server 的对象名 Obj 间接访问 server,client 会从 registry 上拉取 server 的路由信息(如 IP、Port 信息),然后根据具体的业务特性(同步或者异步,TCP 或者 UDP 方式)访问 server(当然 client 也可以通过 IP/Port 直接访问 server)。

4. Spring Cloud

Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。

只支持 Java 语言平台,它的架构图可以用下面这张图来描述。

由此可见,Spring Cloud 微服务架构是由多个组件一起组成的,各个组件的交互流程如下。

  • 请求统一通过 API 网关 Zuul 来访问内部服务,先经过 Token 进行安全认证。
  • 通过安全认证后,网关 Zuul 从注册中心 Eureka 获取可用服务节点列表。
  • 从可用服务节点中选取一个可用节点,然后把请求分发到这个节点。
  • 整个请求过程中,Hystrix 组件负责处理服务超时熔断,Turbine 组件负责监控服务间的调用和熔断相关指标,Sleuth 组件负责调用链监控,ELK 负责日志分析

5. gRPC

先来看下 gRPC,它的原理是通过 IDL(Interface Definition Language)文件定义服务接口的参数和返回值类型,然后通过代码生成程序生成服务端和客户端的具体实现代码,这样在 gRPC 里,客户端应用可以像调用本地对象一样调用另一台服务器上对应的方法。

它的主要特性包括三个方面。

  • 通信协议采用了 HTTP/2,因为 HTTP/2 提供了连接复用、双向流、服务器推送、请求优先级、首部压缩等机制
  • IDL 使用了ProtoBuf,ProtoBuf 是由 Google 开发的一种数据序列化协议,它的压缩和传输效率极高,语法也简单
  • 多语言支持,能够基于多种语言自动生成对应语言的客户端和服务端的代码。

6. Thrift

再来看下 Thrift,Thrift 是一种轻量级的跨语言 RPC 通信方案,支持多达 25 种编程语言。为了支持多种语言,跟 gRPC 一样,Thrift 也有一套自己的接口定义语言 IDL,可以通过代码生成器,生成各种编程语言的 Client 端和 Server 端的 SDK 代码,这样就保证了不同语言之间可以相互通信。它的架构图可以用下图来描述。

从这张图上可以看出 Thrift RPC 框架的特性。

  • 支持多种序列化格式:如 Binary、Compact、JSON、Multiplexed 等。
  • 支持多种通信方式:如 Socket、Framed、File、Memory、zlib 等。
  • 服务端支持多种处理方式:如 Simple 、Thread Pool、Non-Blocking 等。

关于微服务我总结了一个技术路线,分享给大家

最后

欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
复旦教授徐英瑾:人工智能研究为何需要哲学参与?
【导读】人工智能哲学作为一个行当,在国内基本上是还没有确立起来。总体来说国外的情况比我们好一点,马马虎虎算一个哲学分支。举个例子,玛格丽特·博登是研究人工智能哲学的一个比较大牌的人物,一个女哲学家,英国人。她为什么研究比较好?因为她和MIT、卡耐基梅隆这些研究人工智能的重镇有非常密切的联系,和那里的人工智能界的大佬都是私下的朋友。而且玛格丽特除了是哲学专家以外,在计算机、生物学、心理学方面都有相应的学位。我们国家在文科和理科的交汇方面的确做得不是很好。 一、哲学能够为人工智能做些什么? 哲学要做的第一件事是
WZEARW
2018/04/10
8140
复旦教授徐英瑾:人工智能研究为何需要哲学参与?
复旦教授徐英瑾:人工智能研究为何需要哲学参与? (下)
文章主要探讨了通用人工智能、自然语言处理技术和认知心理学等多个方面的内容,提出了关于通用人工智能未来发展的思考。
腾讯研究院
2017/11/01
1.2K0
复旦教授徐英瑾:人工智能研究为何需要哲学参与? (下)
换个角度看AI:追溯人工智能研究的历史和哲学逻辑
大数据文摘作品 编译:Zoe Zuo、HAPPEN、丁慧、小鱼 正如题图所示,仿生人会梦见电子羊吗? (译者注:Do Androids Dream of Electric Sheep?是Philip
大数据文摘
2018/05/23
5350
人工智能简史
《人工智能简史》全面讲述人工智能的发展史,几乎覆盖人工智能学科的所有领域,包括人工智能的起源、自动定理证明、专家系统、神经网络、自然语言处理、遗传算法、深度学习、强化学习、超级智能、哲学问题和未来趋势等,以宏阔的视野和生动的语言,对人工智能进行了全面回顾和深度点评。
iOSDevLog
2018/07/25
2.5K0
人工智能简史
【CCCF专栏】人工智能的缘起
作者:尼克 国家千人计划专家。图灵基金合伙人。早年曾任职于哈佛大学和惠普,后连环创业。中文著作包括《UNIX内核剖析》和《哲学评书》等。 背景 1956年的达特茅斯会议(Dartmouth Conf
新智元
2018/03/14
1.2K0
【CCCF专栏】人工智能的缘起
一位真正的科学思想家: 纪念人工智能之父Marvin Minsky教授
图1. Marvin Minsky (1927.08.09-2016.01.24) 为了纪念去世的人工智能创始人之一,认知科学家Marvin Minsky教授,IEEE Intelligent Systems(IS)杂志正组织相关领域专家及其Minsky生前的学生与朋友,撰写In Memoriam,以各具特色的自由风格,怀念这位在人工智能史上有着特殊重要地位的先驱和开拓者。作为IS的前任主编和现任名誉主编,我自然积极响应,并邀请了人工智能另一位重要的先驱与开拓者,斯坦福人工智能实验室的Nilsson教授共
大数据文摘
2018/05/24
1.1K0
人工智能会重塑哲学吗?
2016年,山西大学科学技术史研究所的厚宇德教授对杨振宁先生做了一个访谈。期间,杨先生比较系统地讲了自己对科学与哲学的关系的一些看法,他的观点是本文讨论人工智能与哲学关系的一个起点。
小腾资讯君
2024/08/12
1250
人工智能基础(高中版)教材补充和资源分享之一 无限光明的未来、过去和现在
这些天,抽空读了一下人工智能基础(高中版),觉得作为高中科普教材,还是非常不错的,五星好评推荐。
zhangrelay
2019/01/23
1.3K0
人工智能的缘起:达特茅斯会议
本文探讨了人工智能的发展历史和未来前景,特别关注了达特茅斯会议、符号主义、连接主义和神经网络等关键概念。作者指出,人工智能已经广泛应用于生活和科研领域,但还存在许多挑战和问题。未来,人工智能将不断向强人工智能发展,挑战人类智能的极限。
企鹅号小编
2018/01/03
3.5K0
人工智能的缘起:达特茅斯会议
一场会议,两场棋局,三门学派,5个阶段带你了解波澜壮阔的人工智能发展史(中)
科学只认第一,不认第二。既然都想争第一,必然有纷争。当然,学术界其实既有纷争,也有合作,但是互相合作的故事不吸引人,纷争的故事才有戏剧性。这里,讲一下人工智能领域学派纷争的故事(主要参考自文献[9-11])。
用户9861443
2024/04/15
2230
一场会议,两场棋局,三门学派,5个阶段带你了解波澜壮阔的人工智能发展史(中)
学人工智能必知:人工智能的发展史
1.2人工智能的发展史 人工智能的研究不仅与对人的思维研究直接相关,而且和许多其它学科领域关系密切。因此说到人工智能的历史,应当上溯到历史上一些伟大的科学家和思想家所作的贡献,他们为人工智能研究积累了充分的条件和基础理论。这里仅列举几位重要的代表人物。 ◆古希腊伟大的哲学家、思想家Aristotle(亚里士多德)(公元前384-322),他的主要贡献是为形式逻辑奠定了基础。形式逻辑是一切推理活动的最基本的出发点。 在他的代表作《工具论》中,就给出了形式逻辑的一些基本规律,如矛盾律、排中律,并且实际上已经提到
机器人网
2018/04/19
1.6K0
【MIT TR 深度】人工智能困境:机器何时才能理解语言
【新智元导读】随着人工智能系统变得越来越高端复杂,我们也愈发难以想象不通过语言,而使用其他方法与计算机沟通。不仅如此,能够简单地与人类交流会让人觉得计算机无比神奇。毕竟,语言是人类理解世界、与世界互动最重要的方法之一,是时候让机器也懂人话了。但是,虽然人工智能领域的科学家进行了各种尝试,但是机器真正理解人话依然是一个难点。本文作者认为,近年来深度学习的发展为解决这一问题带来了希望,但是究竟能不能实现机器与人类在语言上基于理解的沟通,还有待观察。 在韩国首尔的一场格外紧张的围棋比赛的中,史上最佳棋手之一李世石
新智元
2018/03/23
7540
【MIT TR 深度】人工智能困境:机器何时才能理解语言
【万赟】从图灵测试到深度学习:人工智能60年
【新智元导读】美国休斯敦大学副教授万赟回溯人工智能60年历史,对比理性和感性两大流派各自轨迹,指出在目前这轮以深度学习为代表的人工智能新高潮中,各大企业对收购和人才猎取的投入最终很有可能以泡沫破裂收场;目前我们对人脑智能仍然缺乏理解,真正需要防范的是强势集团对人工智能技术的滥用。 作者简介:万赟,美国休斯敦大学维多利亚分校,副教授,研究方向为电子商务和互联网应用。 人工智能诞生 2014 年英美合作的电影《模仿游戏》讲述了英国数学家艾伦·图灵60年前在二战期间帮助设计电子计算机破译纳粹德国军事密码的真实
新智元
2018/03/22
1.4K0
【万赟】从图灵测试到深度学习:人工智能60年
从人工智能简史看人工智能的科学先驱们
2017年是中国人工智能领域发展的关键之年。无论是《政府工作报告》还是10月的十九大报告,都将人工智能作为一项发展内容明确提出,这意味着人工智能上升至国家战略层面。 2017年7月5日,百度首次发布人
安智客
2018/02/24
1.5K0
从人工智能简史看人工智能的科学先驱们
AI简史
“人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学,是计算机科学的一个分支。它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。” ——百度百科
iOSDevLog
2018/07/25
1.1K0
AI简史
到底人工智能会不会统治世界?
原文:MIT Technology Review 编译:虎嗅 几年前,有次我和一位正在创业的朋友喝咖啡。当时他刚刚过了 40 岁生日,父亲生病了,又经常背痛,他觉得自己被生活压得透不过气。“别笑话我,”他对我说,“我可是盼着奇点来临拯救我呢。” 我的这位朋友在科技行业工作,他目睹了微处理器的飞速发展和互联网的崛起。即便是在中年危机来到之前,想要让他相信机器智慧超越人类——也就是被未来学家称之为奇点的那一刻——也不是那么难。一种博爱的超级智慧或许能够迅速以更快的速度分析人类的基因密码,破解人类永葆青春的秘密
大数据文摘
2018/05/23
5810
现实中的机器人“大白”和微磁力机器人
---- 不管喷火、磁悬浮车盘、等离子切割还是能粘住一切的化学材料,在由数以万计的微型磁力机器人组成的“变形金刚”前都相继失色,在最近上映的热门动画片《超能陆战队》中,要不是强力磁场把这些“小而黑”的
机器人网
2018/04/19
1.3K0
现实中的机器人“大白”和微磁力机器人
学界 | Yan LeCun强推的AI简史:两大流派世纪之争,神经网络华丽回归
2010年以来,基于机器学习(尤其是深度学习)的预测算法在一些领域取得了极大的成功,比如说图像识别和机器翻译。而我们把这些算法都称作是人工智能(AI)。
大数据文摘
2018/12/25
1K0
人工智能悖论:简单的动作比复杂的推理更难以实现
作者:张玉坤、刘伟,北邮人机交互与认知工程实验室 网站: http://www.leiphone.com/ 微信: leiphone-sz 就像IBM的深蓝战胜卡斯帕罗夫的2007年5月一样,2016
大数据文摘
2018/05/24
4990
【AI初识境】从3次人工智能潮起潮落说起
智能,即Intelligence,那什么是智能呢?按照中国古代思想家荀子在《荀子·正名篇》的说法:“所以知之在人者谓之知,知有所合谓之智。所以能之在人者谓之能,能有所合谓之能”。
用户1508658
2019/07/26
6970
【AI初识境】从3次人工智能潮起潮落说起
推荐阅读
相关推荐
复旦教授徐英瑾:人工智能研究为何需要哲学参与?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档