dubbo知识整理

dubbo中zookeeper做注册中心,如果注册中心集群都关掉了,发布者和订阅者之间还能通讯么?
    1.可以通讯的,启动dubbo服务时,消费者会从zk拉取注册的生产者的接口地址等数据,缓存在本地,每次调用按照本地存储的地址进行调用;
    2.注册中心对等集群,任意一台宕机,将会切换到另一台;
    3.服务提供者无状态,任何一台宕机不影响其他的服务提供者提供服务;
dubbo在安全机制方面是如何解决的?
    1.dubbo通过token令牌防止用户绕过注册中心直连,然后在注册中心上管理授权;
    2.dubbo还提供服务黑白名单机制,来控制服务所允许的调用方;
dubbo工作原理?
    1.第一层,service层,接口层,供服务提供者和消费者实现;
    2.第二层,config层,配置层,主要对dubbo进行各种配置;
    3.第三层,proxy层,服务代理层,无论是consumer还是provider,dubbo都会生成代理并通过代理之间进行网络通讯;
    4.第四层,registry层,服务注册层,负责服务的注册与返回;
    5.第五层,cluster层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务;
    6.第六层,monitor层,监控层,对rpc接口的调用次数和调用时间进行监控;
    7.第七层,protocol层,远程调用层,封装rpc接口;
    8.第八层,exchange层,信息交换层,封装请求相应模式,同步转异步;
    9.第九层,transport层,网络传输层,抽象mina和netty为统一接口;
    10.第十层,serialize层,数据序列化层;
dubbo工作流程?
    1.第一步,provider向注册中心注册本身;
    2.第二步,consumer从注册中心订阅服务,注册中心会通知consumer注册好的服务;
    3.consumer直接调用provider;
    4.consumer和provider都异步通知监控中心;
dubbo不同的通讯协议?
    1.dubbo协议,单一长连接,nio异步通讯,使用hessian序列化协议,适合传输数据量较小(100kb以内),但是并发量很高;
    2.rmi协议,使用java二进制序列化,多个连接,适合消费者和提供者数量差不多的情况,适用于文件的传输;
    3.hessian协议,使用hessian序列化协议,多个短连接,适用于提供者数量比消费者数量还多的情况,适用于文件传输;
    4.http协议,使用json序列化;
    5.webservice协议,使用soap文本序列化;
dubbo支持的序列化协议?
    1.hessian序列化(默认);
    2.java二进制序列化;
    3.json序列化;
    4.soap文本序列化;
dubbo负载均衡策略?
    1.random loadbalance,随机调用;
    2.roundrobin loadbalance,均匀将流量发送到各个服务;
    3.leastactive loadbalance,自动感知,给不活跃的性能差的机器更少的请求;
    4.consistanthash loadbalance,一致性hash,相同参数的请求一定分发到同一个provider上;
dubbo集群容错策略?
    1.failover cluster模式,失败自动切换,快速重试其他机器(默认);
    2.failfast cluster模式,失败了立即失败;
    3.failsafe cluster模式,失败了忽略掉;
    4.failback cluster模式,失败了后台记录请求,之后定时发送,适用于写消息队列;
    5.forking cluster模式,并行调用多个provider,只要一个成功就立即返回;
    6.broadcacst cluster模式,逐个调用所有的provider;
服务降级?
    1.接口调用失败,统一返回mock中定义的内容;
    2.修改配置mock=true,基于接口实现mock类,命令"接口名+mock",实现降级逻辑;
dubbo动态代理?
    1.默认使用java sister动态字节码生成创建代理类;
    2.通过spi扩展机制配置动态代理策略;
spi机制?
    1.service provider interface,比如你有一个接口,有三个实现类,可以指定的配置或者默认的配置,在项目中加载对应的实现类,并使用这个实现类的实例对象;
    2.应用场景:插件扩展;比如一套开源框架,提供扩展功能,允许使用者自定义某些逻辑或者插件,插入到框架中扩展相应的功能,就可以使用spi;
    3.dubbo扩展组件:构建一个java的maven工程,在src/main/resources下创建meta-inf/services目录,并创建com.alibaba.dubbo.rpc.protocol(dubbo定义的接口),写入my=com.myprotocol,之后将此工程打成jar放入私服中;在dubbo项目中依赖此jar,在配置文件中配置<dubbo:protocol name="my"/>,dubbo项目启动的时候就会根据此配置使用com.myprotocol,通过此方式可替换大量的dubbo内部组件;
服务治理?
    1.调用链自动生成:在基于dubbo做的分布式系统中,将各个服务之间的调用自动记录下来,然后自动将各个服务之间的依赖关系和调用链路生成出来,可以很清楚的看清楚服务之间的调用关系;
    2.服务访问压力及时长统计,移动统计各个接口和服务之间的嗲用次数以及访问延时;
    3.其他:服务鉴权、调用链失败监控和报警、服务分层(避免循环依赖)、服务可用性监控(接口成功率);
失败重试及超时机制?
    1.retries配置失败重试次数;
    2.timeout配置失败超时时间;
分布式服务接口请求保证顺序?
    1.最好设计为不需要顺序性保证的调用;
    2.若要实现,负载均衡策略使用一致性hash,并在provider中将请求放入内存队列中,强制排队执行业务;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值