dubbo源码分析--预热warmup过程

本文探讨了Dubbo的预热特性,解释了warmup在负载均衡中的作用,并分析了dubbox分支中预热功能存在的问题。通过查看GitHub上的修改记录,发现bug fix并未包含在dubbox的版本中。同时,文章建议对使用dubbox的系统进行优化,修复warmup时间戳问题,并介绍了dubbo的延迟暴露服务以提高生产环境的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阿飞Javaer,转载请注明原创出处,谢谢!

前言

今天群里小伙伴黄晓峰VIVO咨询一个问题:”dubbo接口怎么做预热呢,每次上线,都会有一小部分超时?”,熟悉JVM都知道,JVM重启后有一段预热过程,要运行一段时间,它的性能才能达到最佳状态;阿里JVM团队就针对这个缺陷进行了优化,其特性名曰:jwarmup,可以点击Alibaba JVM创新提效 获国际社区认可登台JVM圈顶会,对jwarmup稍微了解;

另外,在阿里大神你假笨那里了解到jwarmup的大概原理:针对上次JIT对应用的优化,主动去触发JIT编译优化,而不是等jvm运行一段时间自己去感知!

阿里大厂可以这么做,我们小厂肿么办?事实上dubbo作者梁飞大神考虑到了这种情况,在dubbo中也引入了”warmup”特性(和阿里的jwarmup还是完全不一样的),核心源码在“com.alibaba.dubbo.rpc.cluster.loadbalance.AbstractLoadBalance.java”中:

protected int getWeight(Invoker<?> invoker, Invocation invocation) {
    // 先得到Provider的权重
    int weight = invoker.getUrl().getMethodParameter(invocation.getMethodName(), Constants.WEIGHT_KEY, Constants.DEFAULT_WEIGHT);
    if (weight > 0) {
        // 得到provider的启动时间戳
        long timestamp = invoker.getUrl().getParameter(Constants.REMOTE_TIMESTAMP_KEY, 0L);
        if (timestamp > 0L) {
            // provider已经运行时间
            int uptime = (int) (System.currentTimeMillis() - timestamp);
            // 得到warmup的值,默认为10分钟
            int warmup = invoker.getUrl().getParameter(Constants.WARMUP_KEY, Constants.DEFAULT_WARMUP);
            // provider运行时间少于预热时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值