feat: support the shortest response time loadbalancer

pull/1636/head
fishtailfu 3 months ago
parent 4d338d39e7
commit 629bdee3d8

@ -0,0 +1,23 @@
package com.tencent.cloud.polaris.loadbalancer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "spring.cloud.polaris.loadbalancer")
public class PolairsShortestResponseTimeLoadBalancerProperties {
/**
* Slide period in milliseconds.
*/
@Value("${spring.cloud.polaris.loadbalancer.polarisShortestResponseTime.slidePeriod:30000}")
private long slidePeriod;
long getSlidePeriod() {
return slidePeriod;
}
void setSlidePeriod(long slidePeriod) {
this.slidePeriod = slidePeriod;
}
}

@ -18,13 +18,17 @@
package com.tencent.cloud.polaris.loadbalancer; package com.tencent.cloud.polaris.loadbalancer;
import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled; import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled;
import com.tencent.cloud.rpc.enhancement.stat.config.PolarisStatProperties;
import com.tencent.cloud.rpc.enhancement.stat.config.StatConfigModifier;
import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration; import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
/** /**
@ -33,12 +37,16 @@ import org.springframework.context.annotation.Configuration;
* @author Haotian Zhang * @author Haotian Zhang
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties @EnableConfigurationProperties(PolairsShortestResponseTimeLoadBalancerProperties.class)
@ConditionalOnDiscoveryEnabled @ConditionalOnDiscoveryEnabled
@ConditionalOnPolarisEnabled @ConditionalOnPolarisEnabled
@ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.enabled", matchIfMissing = true) @ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.enabled", matchIfMissing = true)
@AutoConfigureAfter(LoadBalancerAutoConfiguration.class) @AutoConfigureAfter(LoadBalancerAutoConfiguration.class)
@LoadBalancerClients(defaultConfiguration = PolarisLoadBalancerClientConfiguration.class) @LoadBalancerClients(defaultConfiguration = PolarisLoadBalancerClientConfiguration.class)
public class PolarisLoadBalancerAutoConfiguration { public class PolarisLoadBalancerAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public PolarisShortestResponseTimeLoadBalancerConfigModifier polarisShortestResponseTimeLoadBalancerConfigModifier(PolairsShortestResponseTimeLoadBalancerProperties polairsShortestResponseTimeLoadBalancerProperties) {
return new PolarisShortestResponseTimeLoadBalancerConfigModifier(polairsShortestResponseTimeLoadBalancerProperties);
}
} }

@ -0,0 +1,28 @@
package com.tencent.cloud.polaris.loadbalancer;
import com.tencent.cloud.polaris.context.PolarisConfigModifier;
import com.tencent.polaris.factory.config.ConfigurationImpl;
import com.tencent.polaris.plugins.loadbalancer.shortestresponsetime.ShortestResponseTimeLoadBalanceConfig;
public class PolarisShortestResponseTimeLoadBalancerConfigModifier implements PolarisConfigModifier {
private final PolairsShortestResponseTimeLoadBalancerProperties polairsShortestResponseTimeLoadBalancerProperties;
public PolarisShortestResponseTimeLoadBalancerConfigModifier(
PolairsShortestResponseTimeLoadBalancerProperties polairsShortestResponseTimeLoadBalancerProperties) {
this.polairsShortestResponseTimeLoadBalancerProperties = polairsShortestResponseTimeLoadBalancerProperties;
}
@Override
public void modify(ConfigurationImpl configuration) {
ShortestResponseTimeLoadBalanceConfig config = new ShortestResponseTimeLoadBalanceConfig();
config.setSlidePeriod(polairsShortestResponseTimeLoadBalancerProperties.getSlidePeriod());
configuration.getConsumer().getLoadbalancer().setPluginConfig("shortestResponseTime",
config);
}
@Override
public int getOrder() {
return 0;
}
}

@ -164,6 +164,12 @@
"type": "java.lang.String", "type": "java.lang.String",
"defaultValue": "roundRobin", "defaultValue": "roundRobin",
"description": "loadbalancer strategy." "description": "loadbalancer strategy."
},
{
"name": "spring.cloud.polaris.loadbalancer.polarisShortestResponseTime.slidePeriod",
"type": "java.lang.Long",
"defaultValue": 30000,
"description": "The length of the average response time calculation window for instances in milliseconds. The default is 30000 milliseconds."
} }
], ],
"hints": [ "hints": [

Loading…
Cancel
Save