目录
Dubbo的通信原理?
Dubbo协议:常规远程方法调用,默认采用dubbo协议,dubbo协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
<!--当前服务发布所依赖的协议 -->
<dubbo:protocol name="dubbo" port="20880"/>
https://blog.csdn.net/u010942020/article/details/79263854
https://blog.csdn.net/fuyuwei2015/article/details/72848310
Dubbo的负载均衡策略?
dubbo提供4种负载均衡方式:
Random,随机,按权重配置随机概率,调用量越大分布越均匀,默认是这种方式
RoundRobin,轮询,按权重设置轮询比例,如果存在比较慢的机器容易在这台机器的请求阻塞较多
LeastActive,最少活跃调用数,不支持权重,只能根据自动识别的活跃数分配,不能灵活调配
ConsistentHash,一致性hash,对相同参数的请求路由到一个服务提供者上,如果有类似灰度发布需求可采用
dubbo的负载均衡机制是在客户端调用时通过内存中的服务方信息及配置的负责均衡策略选择,如果对自己系统没有一个全面认知,建议先采用random方式。
启动时默认有超时机制和重试机制
超时:规定时间内,provider没有返回,则认为调用失败
重试:调用失败情况下,会重新调用,规定的调用次数仍未成功的话,就认为请求异常,抛出。
如果出现超时,如何处理?
通常时刻业务处理太慢。
处理方案:
性能调优:jstack PID > jstack.log 分析线程都卡在哪个方法调用上,这里就是慢的原因
如果不能调优,就将timeout设置大点
超时或重试可能出现的异常?需要合理设置。
超时设置:
dubbo消费端设置超时时间需要根据业务实际情况来设定,如果设置的时间太短,一些复杂业务需要很长时间完成,导致在设定的超时时间内无法完成正常的业务处理。这样消费端达到超时时间,那么dubbo会进行重试机制,不合理的重试在一些特殊的业务场景下可能会引发很多问题,需要合理设置接口超时时间。
比如发送邮件,可能就会发出多份重复邮件,执行注册请求时,就会插入多条重复的注册数据
合理设置的思路:
- 对于核心的服务中心,去除dubbo超时重试机制,重新评估设置超时时间
- 业务处理代码放在服务端,客户端只做参数验证和服务调用,不涉及业务流程处理。
dubbo超时和重连配置示例
!-- 服务调用超时设置为5秒,超时不重试-->
<dubbo:service interface="com.provider.service.DemoService" ref="demoService" retries="0" timeout="5000"/>
重连机制 retries
dubbo在调用服务不成功时,默认会重试2次。
dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以dubbo的重试机器也能一定程度上保证服务的质量。
但是如果不合理的配置重试次数,当失败时会进行重试多次,这样在某个时间点出现性能问题,调用方再连续重复调用,系统请求编程正常值的retries倍,系统压力会大增,容易引起服务雪崩,需要根据业务情况规划好如何进行异常处理,何时进行重试。
项目中引入duboo.xsd原因?
dubbo.xsd 文件 解决标签识别问题
引入 dubbo框架 需要引用dubbo标签,dubbo.xsd 可以解决标签不识别的问题
添加xsd支持
https://blog.csdn.net/wzygis/article/details/51381905
dubbo中zookeeper的配置
https://blog.csdn.net/w1014074794/article/details/52172790
dubbo中核心配置
http://baijiahao.baidu.com/s?id=1601781224676099887&wfr=spider&for=pc
dubbo本地暴露和局部暴露
https://blog.csdn.net/SilenceCarrot/article/details/66967755
面试主要问得多是远程暴露,因为远程暴露涉及到了zookeeper和netty.比如和zookeeper相关的最常问的两道题是服务提供者能实现失效踢出是根据什么原理?,
dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?.
https://blog.csdn.net/medtc/article/details/80306764?utm_source=blogxgwz3
,比如zookeeper实现分布式锁,zookeeper选举机制等等
https://blog.csdn.net/hxpjava1/article/details/80930520
dubbo直连操作?
在目前开发环境中,A启动service或者单元测试,都会把本地ip注册到注册中心,其他开发人员在连服务的时候,就可能连到A的ip,但本意是连服务器。解决这个问题:本地启动service或者单元测试的时候,绕过注册中心,只测试指定服务提供者,点对点直连
操作:
1. 复制下面选中文件,到本地的user.home目录下,不要改名字dubbo-resolve.properties
2. 如果你说,这个文件位置和名字都是可以改的。
3. 修改dubbo-resolve.properties文件内容
本服务的所有façade,都应该在这个文件中,不然读不到,下面标红的需要修改,其他不需要修改
4. 请见下图,修改service中dubbo.xml中设置,去读配置文件中设置的dubbo.registry.register内容
5. 在service的dubbo配置文件中设置是否要绕过注册中心,true是注册,false是不注册
6. profile设置