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泛化调用引发的“血案”