当前位置: 首页 > 科技观察

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

时间:2023-03-12 00:38:10 科技观察

有哪些开源RPC框架?一种是绑定特定的语言平台,另一种是语言无关的,即跨语言平台。与语言平台绑定的开源RPC框架主要有以下几种。Dubbo:国内最早的开源RPC框架,由阿里巴巴研发,2011年底开源,只支持Java语言。Motan:微博内部使用的RPC框架,2016年开源,只支持Java语言。Tars:腾讯内部使用的RPC框架,2017年开源,仅支持C++语言。SpringCloud:2014年国外公司Pivotal开源的RPC框架,只支持Java语言,面向跨语言平台的开源RPC框架主要有以下几种。gRPC:谷歌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、MotanMotan是国内另一个知名的开源RPC框架,同样只支持Java语言实现。它的架构可以用下图来描述。Motan的架构与Dubbo类似,都需要在客户端(服务消费者)和服务端(服务提供者)引入SDK。Motan框架主要包括以下功能模块。register:用于与注册中心进行交互,包括注册服务、订阅服务、服务变更通知、服务心跳发送等功能。protocol:用于RPC服务描述和RPC服务配置管理。该层还可以添加不同功能的过滤器,完成统计、并发限制等功能。serialize:序列化和反序列化RPC请求中的参数和结果等对象。transport:用于远程通信,默认使用NettyNIO的TCP长链接方式。cluster:请求时,会根据不同的高可用和负载均衡策略,选择一个可用的服务器发起远程调用。3.TarsTars是腾讯内部多年使用微服务架构实践总结出来的开源项目。它只支持C++语言。其架构图如下。Tars的架构交互主要包括以下流程:服务发布流程:将服务端的发布包上传到web系统的补丁中,上传成功后,提交请求在web端发布服务端,registryservice传递给节点,然后节点拉取server发布包到本地,并启动server服务。管理命令流程:在web系统上,可以提交一个管理服务器服务命令请求,由注册服务传达给节点服务,然后节点将管理命令发送给服务器。心跳上报流程:服务器服务运行后,会周期性地向节点上报心跳,节点再将服务心跳信息上报给注册中心服务,由注册中心统一管理。信息上报流程:服务器服务运行后,会定期向stat上报统计信息,打印远程日志到log,定期上报属性信息到prop,上报异常信息到notify,从config中拉取服务配置信息。客户端访问服务器流程:客户端可以通过服务器对象名Obj间接访问服务器,客户端会从注册中心拉取服务器路由信息(如IP、端口信息),然后根据具体的业务特性(同步或异步、TCP或UDP)方式)访问服务器(当然客户端也可以直接通过IP/端口访问服务器)。4.SpringCloudSpringCloud利用SpringBoot的特性,整合了开源界优秀的组件,在微服务架构整体上提供了一套服务治理的解决方案。它只支持Java语言平台,其架构图可以用下图来描述。可以看出,SpringCloud微服务架构是由多个组件组成的,各个组件的交互过程如下。请求统一通过API网关Zuul访问内部服务,首先要经过Token进行安全认证。安全认证通过后,网关Zuul从注册中心Eureka获取可用服务节点列表。从可用服务节点中选择一个可用节点,然后将请求分发到该节点。整个请求过程中,Hystrix组件负责处理服务超时熔断,Turbine组件负责监控服务间调用和熔断相关指标,Sleuth组件负责调用链监控,ELK负责日志分析.5.gRPC我们先来看看gRPC。它的原理是通过IDL(InterfaceDefinitionLanguage)文件定义服务接口的参数和返回值类型,然后通过代码生成程序生成服务端和客户端的具体实现代码,这样在gRPC中,客户端应用程序可以像本地对象一样调用另一台服务器上的相应方法。其主要特点包括三个方面。通信协议采用HTTP/2,因为HTTP/2提供了连接复用、双向流、服务器推送、请求优先级、头部压缩等机制。IDL使用的是ProtoBuf,这是Google开发的一种数据序列化协议。它的压缩和传输效率极高,语法简单,支持多国语言。可以基于多种语言自动生成相应语言的客户端和服务端代码。6.Thrift让我们再看看Thrift。Thrift是一个轻量级的跨语言RPC通信解决方案,支持多达25种编程语言。Thrift为了支持多种语言,和gRPC一样,也有自己的一套接口定义语言IDL,可以通过代码生成器为客户端和服务端生成各种编程语言的SDK代码,从而保证不同语言之间可以互通彼此。相互沟通。其架构图可以用下图来描述。从这张图中可以看出ThriftRPC框架的特点。支持多种序列化格式:如Binary、Compact、JSON、Multiplexed等支持多种通信方式:如Socket、Framed、File、Memory、zlib等服务端支持多种处理方式:如Simple、ThreadPool、非阻塞等