网站根目录在哪儿,图片设计公司,alpine wordpress,wordpress商城查件1、Dubbo体系结构 2、Dubbo容错机制
Dubbo集群容错架构图
各节点关系#xff1a;
这里的Invoker是Provider的一个可调用Service的抽象#xff0c;Invoker封装了Provider地址及Service接口信息。Directory代表多个Invoker#xff0c;可以把它看成List#xff0c;但与Lis…1、Dubbo体系结构 2、Dubbo容错机制
Dubbo集群容错架构图
各节点关系
这里的Invoker是Provider的一个可调用Service的抽象Invoker封装了Provider地址及Service接口信息。Directory代表多个Invoker可以把它看成List但与List不同的是它的值可能是动态变化的比如注册中心推送变更。Cluster将Directory中的多个Invoker伪装成一个Invoker对上层透明伪装过程包含了容错逻辑调用失败后重试另一个。Router负责从多个Invoker中按路由规则选出子集比如读写分离应用隔离等。LoadBalance负责从多个Invoker中选出具体的一个用于本次调用选的过程包含了负载均衡算法调用失败后需要重选。
2.1 集群容错模式
Failover Cluster
失败自动切换当出现失败重试其它服务器。(缺省)通常用于读操作但重试会带来更长延迟。可通过retries2来设置重试次数(不含第一次)。
Failfast Cluster
快速失败只发起一次调用失败立即报错。通常用于非幂等性的写操作比如新增记录。
Failsafe Cluster
失败安全出现异常时直接忽略。通常用于写入审计日志等操作。
Failback Cluster
失败自动恢复后台记录失败请求定时重发。通常用于消息通知操作。
Forking Cluster
并行调用多个服务器只要一个成功即返回。通常用于实时性要求较高的读操作但需要浪费更多服务资源。可通过forks2来设置最大并行数。
Broadcast Cluster
广播调用所有提供者逐个调用任意一台报错则报错。(2.1.0开始支持)通常用于通知所有提供者更新缓存或日志等本地资源信息。
dubbo:service retries2 /
dubbo:reference retries2 /
!-- 单一方法配置重试次数 --
dubbo:referencedubbo:method namefindFoo retries2 /
/dubbo:reference!-- 配置集群容错模式 --
dubbo:service clusterfailsafe /
dubbo:reference clusterfailsafe /3、Dubbo服务降级
综述 Dubbo服务降级主要包含两点屏蔽mockforceDubbo-admin配置和容错mockfailMock。
使用Dubbo时可能会遇到以下问题
1多个服务之间可能由于服务没有启动或者网络不通调用中会出现远程调用失败;
服务请求过大需要停止部分服务以保证核心业务的正常运行 mockforce:returnnull 表示消费方对该服务的方法调用都直接返回 null值不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。 还可以改为 mockfail:returnnull 表示消费方对该服务的方法调用在失败后再返回 null值不抛异常。用来容忍不重要服务不稳定时对调用方的影响。 以上两个问题可以使用Dubbo的服务降级来实现 即在服务宕掉或者并发数太高导致的RpcException异常时进行友好的处理或者提示而不是内部报错导致系统不可用。
查看dubbo的官方文档可以发现有个mock的配置mock只在出现非业务异常(比如超时网络异常等)时执行。mock的配置支持两种一种为boolean值默认的为false。如果配置为true则缺省使用mock类名即类名Mock后缀另外一种则是配置返回默认字符串如”return null”或者return 123456可以很简单的忽略掉异常。
/**接口定义*/
public interface IUser {public void addUser(User u);public User getUserById(int id);}/**实现类*/
public class UserImpl implements IUser {private static ListUser USER_LIST new ArrayListUser();static{for(int i0;i10;i){User u new User();u.setAddress(addressi);u.setId(i);u.setName(namei);USER_LIST.add(u);}}public void addUser(User u) {USER_LIST.add(u);System.out.println(total:USER_LIST.size());}public User getUserById(int id) {for(int i0;iUSER_LIST.size();i){if(USER_LIST.get(i).getId() id){return USER_LIST.get(i);}}return null;}
}public class IUserMock implements IUser {Overridepublic void addUser(User u) {throw new RuntimeException(add user fail!);}Overridepublic User getUserById(int id) {return null;}
}
dubbo:reference idiUser interfacecom.dubbosample.iface.IUser timeout10000 checkfalse mocktruedubbo:reference idiUser interfacecom.dubbosample.iface.IUser timeout10000 checkfalse mockreturn null以上配置还可以在dubbo-admin界面中配置 分别是屏蔽和容错
其中屏蔽只能在dubbo-admin中配置不能在dubbo配置文件里配置
屏蔽force.mock 即屏蔽请求直接返回某个值如上面的字符串mock“return 123456”;
容错fail.mock 即允许请求在请求失败的时候再返回某个值如mock“fail:return 123456”;
4、Dubbo服务限流
Dubbo限流主要依赖Sentinel哨兵中间件一起使用
服务提供端限流 对服务提供方的限流可分为服务提供方的自我保护能力和服务提供方对服务消费方的请求分配能力这两个维度。 QPS 定向限流
服务消费端限流 对服务提供方的限流可分为对控制并发线程数和服务降级两个维度。
详见 https://yq.aliyun.com/articles/624053?utm_contentm_1000013383
拓展 https://blog.csdn.net/world_snow/article/details/79080314
5、Dubbo负载均衡
dubbo有四种负载均衡的方式
1RandomLoadBalance加权随机算法默认
2LeastActiveLoadBalance最小活跃负载均衡
3ConsistentHashLoadBalance一致性hash负载均衡
4RoundRobinLoadBalance加权轮询负载均衡
6、Dubbo结果缓存
https://dubbo.apache.org/zh-cn/docs/user/quick-start.html
7、