天天看点

Dubbo最佳实践

Dubbo最佳实践

环境

本文仅针对​

​Dubbo2.6.+​

​​版本,​

​3.+​

​版本较新,暂无考虑

Version版本

在​

​Dubbo​

​​的​

​@Service​

​​和​

​@Reference​

​​都有​

​version​

​​,此字段是为了灰度发布使用,故一般情况下配置通用​

​1.0.0​

​​即可,​

​dubbo​

​​默认是​

​0.0.0​

如果不考虑灰度发布,消费者使用​

​@Reference(verson = "*")​

​​即可,因为灰度发布需要全链路泳道支持,并非仅仅​

​Dubbo​

​层

注意:如果消费者指定了version但是注册中心内没有该版本,则会报​

​no provider​

​错误

参数校验

基于​

​JSR-303​

​进行参数校验,参数校验支持消费者和提供者两端的校验,如果是消费端校验则可以节省一次请求的资源,但是需要注意的是因为需求一直在变更,如果有变更那么消费端和提供端都需要一起发布,影响范围较大,一般不建议

提供者使用​

​@Service(validation = "true")​

​,默认是关闭

消费者使用​

​@Reference(validation = "true")​

​,默认是关闭

服务发布

一般项目都是使用​

​sdk​

​​的方式发布​

​api​

​​,在个别的项目中使用​

​SNAPSHOT​

​发布到私服,这时候存在相同版本发布到私服影响到其他环节的发布

向下兼容性的​

​sdk​

​​不需要修改版本号,不兼容性的​

​sdk​

​发布则需要修改版本避免影响线上环节

不兼容性接口应该使用​

​methodNameV2​

​方式来声明新接口

泛化调用

不允许使用编程式泛化调用,原因如下:

泛化调用时候,由于没有缓存​

​reference​

​​,因此每次请求这个方法,就会在zk创建个消费节点(无论​

​provider​

​​是否启动),导致在短时间大量访问​

​zk​

​​并创建了240万+的节点,造成​

​zk​

​​所有节点陆续崩溃导致,多个应用因无法连接到​

​zk​

​报错。

生产故障|Dubbo泛化调用引发的“血案”

官方建议

后续