我想做个旅游网站怎么做,直播网站开发报价,怎么仿网站链接,定制网站开发食道里感觉有东西堵目录 一、开源RPC框架有哪些#xff1f;1、跟语言平台绑定的开源RPC框架2、跨语言平台的开源RPC框架 二、跟语言平台绑定的开源RPC框架 -- Dubbo1、Dubbo的架构主要包含四个角色2、Dubbo的调用框架是如何实现的#xff1f; 三、如何选择#xff1f;四、跨语言平台的开源RPC框… 目录 一、开源RPC框架有哪些1、跟语言平台绑定的开源RPC框架2、跨语言平台的开源RPC框架 二、跟语言平台绑定的开源RPC框架 -- Dubbo1、Dubbo的架构主要包含四个角色2、Dubbo的调用框架是如何实现的 三、如何选择四、跨语言平台的开源RPC框架 -- gRPC五、跨语言平台的开源RPC框架 -- Thrift六、对比选型七、总结微服务 Spring Cloud系列 大家好我是哪吒。
一、开源RPC框架有哪些
1、跟语言平台绑定的开源RPC框架
Dubbo国内最早开源的RPC框架由阿里巴巴公司开发并于2011年末对外开源仅支持Java语言。Motan微博内部使用的RPC框架于2016年对外开源仅支持Java语言。Tars腾讯内部使用的RPC框架于2017年对外开源仅支持C语言。Spring Cloud国外Pivotal公司2014年对外开源的RPC框架仅支持Java语言。
2、跨语言平台的开源RPC框架
gRPCGoogle于2015年对外开源的跨语言RPC框架支持多种语言。Thrift最初是由Facebook开发的内部系统跨语言的RPC框架2007年贡献给了Apache基金成为Apache开源项目之一支持多种语言。
如果你的业务场景仅仅局限于一种语言的话可以选择跟语言绑定的RPC框架中的一种如果涉及多个语言平台之间的相互调用就应该选择跨语言平台的RPC框架。
二、跟语言平台绑定的开源RPC框架 – Dubbo
1、Dubbo的架构主要包含四个角色
服务提供者Provider提供服务的实体通常是一个具体的业务服务实现类。服务消费者Consumer调用远程服务的实体通常是一个具体的业务服务调用方。注册中心Registry负责服务的注册与发现通常是一个高可用的分布式服务注册中心。监控中心Monitor收集服务调用的统计信息通常用于监控服务调用的性能、质量等。 具体的交互流程是Consumer一端通过注册中心获取到Provider节点后通过Dubbo的客户端SDK与Provider建立连接并发起调用。Provider一端通过Dubbo的服务端SDK接收到Consumer的请求处理后再把结果返回给Consumer。
可以看出服务消费者和服务提供者都需要引入Dubbo的SDK才来完成RPC调用因为Dubbo本身是采用Java语言实现的所以要求服务消费者和服务提供者也都必须采用Java语言实现才可以应用。
2、Dubbo的调用框架是如何实现的
Dubbo的调用框架的实现主要基于以下几个核心组件和服务治理策略
服务注册与发现Dubbo通过注册中心进行服务的注册与发现。服务提供者在启动时将自己的元数据如服务IP、Port等注册到注册中心。服务消费者在启动时向注册中心订阅服务提供者的元数据。注册中心将服务提供者地址列表提供给消费者并在数据变更时推送给订阅的消费者。RPC调用在获取服务提供者的元数据后服务消费者可以发起RPC调用。Dubbo的RPC层负责建立网络通信连接实现服务的远程调用。同时RPC层还支持负载均衡、容灾和集群功能以确保调用的稳定性和性能。服务监控在RPC调用前后Dubbo会向监控中心上报统计信息如并发数、调用接口等。这些信息可以用于服务的性能监控和调优。
此外Dubbo的实现还采用了分层的思想每层负责不同的职责使得用户可以基于Dubbo框架进行二次开发扩展其功能。同时Dubbo还支持与Spring框架的无缝集成使得用户可以更方便地将其应用于实际的业务场景中。
三、如何选择
SpringCloud提供了服务注册组件、配置中心组件、负载均衡组件、断路器组件、分布式消息追踪组件等一系列组件Dubbo只提供了最基础的RPC框架的功能其他微服务组件都需要自己去实现。Spring Cloud的RPC通信采用了HTTP协议相比Dubbo所采用的私有协议来说在高并发的通信场景下性能相对要差一些所以对性能有苛刻要求的情况下可以考虑Dubbo。
因此在堆性能没有苛刻要求的场景下都会选择SpringCloud。
四、跨语言平台的开源RPC框架 – gRPC
gRPC通过IDLInterface Definition Language文件定义服务接口的参数和返回值类型然后通过代码生成程序生成服务端和客户端的具体实现代码这样在gRPC里客户端应用可以像调用本地对象一样调用另一台服务器上对应的方法。 它的主要特性包括三个方面。
通信协议采用了HTTP/2HTTP/2提供了连接复用、双向流、服务器推送、请求优先级、首部压缩等机制在通信过程中可以节省带宽、降低TCP连接次数、节省CPU、尤其对移动端来说可以帮助延长电池寿命。IDL使用了ProtoBufProtoBuf是由Google开发的一种数据序列化协议它的压缩和传输效率极高语法也简单所以被广泛应用在数据存储和通信协议上。多语言支持能够基于多种语言自动生成对应语言的客户端和服务端的代码。
五、跨语言平台的开源RPC框架 – 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等。
六、对比选型
那么涉及跨语言的服务调用场景到底该选择gRPC还是Thrift呢
从成熟度上来讲Thrift因为诞生的时间要早于gRPC所以使用的范围要高于gRPC在HBase、Hadoop、Scribe、Cassandra等许多开源组件中都得到了广泛地应用。而且Thrift支持多达25种语言这要比gRPC支持的语言更多所以如果遇到gRPC不支持的语言场景下选择Thrift更合适。
但gRPC作为后起之秀因为采用了HTTP/2作为通信协议、ProtoBuf作为数据序列化格式在移动端设备的应用以及对传输带宽比较敏感的场景下具有很大的优势而且开发文档丰富根据ProtoBuf文件生成的代码要比Thrift更简洁一些从使用难易程度上更占优势所以如果使用的语言平台gRPC支持的话建议还是采用gRPC比较好。
七、总结
以上就是我对几种使用最广泛的开源RPC框架的选型建议也是基于它们目前现状所作出的判断从长远来看支持多语言是RPC框架未来的发展趋势。正是基于此判断各个RPC框架都提供了Sidecar组件来支持多语言平台之间的RPC调用。
Dubbo在去年年底又重启了维护并且宣称要引入Sidecar组件来构建Dubbo Mesh提供多语言支持。Motan也在去年对外开源了其内部的Sidecar组件Motan-go目前支持PHP、Java语言之间的相互调用。Spring Cloud也提供了Sidecar组件spring-cloud-netflix-sideca可以让其他语言也可以使用Spring Cloud的组件。
所以未来语言不会成为使用上面这几种RPC框架的约束而gRPC和Thrift虽然支持跨语言的RPC调用但是因为它们只提供了最基本的RPC框架功能缺乏一系列配套的服务化组件和服务治理功能的支撑所以使用它们作为跨语言调用的RPC框架就需要自己考虑注册中心、熔断、限流、监控、分布式追踪等功能的实现不过好在大多数功能都有开源实现可以直接采用。 微服务 Spring Cloud系列
微服务 Spring Cloud 1服务如何拆分使用微服务的注意事项
微服务 Spring Cloud 2一文讲透微服务核心架构注册中心、服务通信、服务监控、服务追踪、服务治理
微服务 Spring Cloud 3如何对微服务进行有效的监控
微服务 Spring Cloud 4分布式系统如何进行数据分区
微服务 Spring Cloud 5一图说透Spring Cloud微服务架构
微服务 Spring Cloud 6用了这么多年Docker容器殊不知你还有这么多弯弯绕
微服务 Spring Cloud 7Nacos配置中心的Pull原理附源码 哪吒多年工作总结Java学习路线总结搬砖工逆袭Java架构师。 华为OD机试 2023B卷题库疯狂收录中刷题点这里 刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。