微服务:通信协议:Restful,RPC(Dubbo、Motan、gRPC)
发布网友
发布时间:2024-09-26 04:46
我来回答
共1个回答
热心网友
时间:2024-11-12 15:05
在单体式应用中,各个模块通过编程语言级别的方法或函数进行调用。然而,基于微服务的分布式应用在多台机器上运行,每个服务实例为一个独立进程。微服务必须使用进程间通信协议(如HTTP、AMQP)或二进制协议(如TCP)进行交互。
为服务选择IPC时,需考虑交互模式:一对一(一个客户端请求对应一个服务实例响应)或一对多(一个客户端请求对应多个服务实例响应)。交互模式又分为同步(客户端请求等待服务端即时响应,可能阻塞)和异步(客户端请求不阻塞进程,服务端响应可能非即时)。
基于消息通信的优点包括:解耦客户端和服务端,无需了解具体服务实例位置;消息缓冲,客户端可接受订单即使系统慢或不可用;弹*互,支持多种模式;直接进程间通信,模仿本地调用。
RPC(Remote Procere Call)通过代理模式简化远程调用,使其如同本地调用。它解决分布式系统中服务调用问题,允许用户感知不到远程调用过程。RPC框架如Dubbo、Motan、gRPC提供不同功能和配置方式。
Dubbo是阿里开源的分布式服务框架,支持分层架构,减少各层耦合。Motan是微博开源的高性能、易于使用的RPC框架。gRPC是面向移动和HTTP/2设计的高性能通用远程调用框架。
Motan支持Motan协议,使用TCP长连接和Netty通信。Dubbo支持多种协议,包括Dubbo协议、Rmi协议、Hessian协议、HTTP协议、WebService协议、Dubbo Thrift协议、Memcached协议。gRPC支持HTTP/2.0协议,基于Netty4.1.3通信。
序列化方面,Motan默认使用Hessian2,支持JSON格式。Dubbo协议默认序列化为Hessian2,Rmi协议为Java,HTTP协议为JSON。gRPC使用ProtoBuf序列化协议,由用户使用.proto文件定义服务。
Motan支持多种负载均衡模式,如ActiveWeight、Random、RoundRobin等。Dubbo支持随机、轮循、一致性Hash等策略。gRPC提供可插拔的负载均衡器。
容错方面,Motan支持Failover和Failfast策略。Dubbo支持多种策略,包括Failover、Failfast、Failsafe、Failback、Forking、Broadcast。gRPC具有Failover容错策略。
Motan支持Consul、Zookeeper、点对点直连等注册中心。Dubbo支持Zookeeper、Redis、Multicast、Simple注册中心。gRPC允许用户自定义注册中心。
性能方面,Motan在高并发、高负载场景下保持良好性能。Dubbo2.0相比1.0性能提升,但在大数据量处理不如RMI或HTTP。gRPC采用ProtoBuf序列化协议,性能明显优于其他协议。
在配置方面,Motan支持Xml配置和Spring注解配置。Dubbo支持Xml配置、注解配置、属性配置、API配置。gRPC仅支持API配置。
Motan支持多种负载均衡策略,提供自定义动态负载均衡和跨机房流量调整。Dubbo在健壮性和伸缩性方面表现良好,拥有监控中心宕掉仍能使用、数据库宕掉服务仍可用等特性。
总之,不同RPC框架在功能、配置、性能和兼容性上各有优势。Motan注重简单、易用和高并发高可用场景,Dubbo提供丰富配置和扩展性,gRPC支持跨语言调用和自定义注册中心。