概念
Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
容器(container):启动服务的容器。
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者,一般使用zk做注册中心。
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心,监控中心对调用没有什么影响,所以安装与否并不重要。
特点
高可用
1,Monitor挂了,不用服务整体调用,只会损失部分统计数据
2,注册中心数据库挂了,注册中心使用缓存数据,仍能对外提供正常的服务注册与发现
3,注册中心集群master一台挂了,其他机器会重新选举新的master,仍能对外提供正常的服务注册与发现
4,注册中心集群全部挂了,消费者可以依据本地缓存的服务折信息进行调用,但是无法注册到新的服务
5,服务集群的某台挂了,消费者调到这一台不可用,会有重试机制
6,服务集群全部挂了,那么消费者就会调用失败
负载均衡
1,随机,默认的方式
2,轮询
3,最小活跃调用
4,hash一致
服务降级
服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略
向注册中心写入动态配置覆盖规则,比如
1,mock=force:return+null :方法不再远程调用,直接返回null
2, mock=fail:return+null :方法调用失败,不抛异常返回null
集群容错
在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。
Failover Cluster
失败之后重试,可以配置重试次数。
Failfast Cluster
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
调用流程
一次完整的RPC调用流程如下(这里以同步为例)
1,client 发起本地调用
2,client stub 序列化方法参数等信息
3,client stub 依据路由规则选择一个服务发起远程调用
4,service stub 反序列化信息
5,service stub 调用本地方法
6,本地执行对应的方法,将结果返回给service stub
7, service stub序列化结果
8,service stub发送结果
9,client stub收到消息,并反序列化结果
10 ,client获取结果
dubbo就是将2-5,7-9的过程封装起来,让我们的client像调用本地方法一样调用远程的方法