Skip to content

Commit

Permalink
feat: 执行引擎任务调度配额限制 TencentBlueKing#261
Browse files Browse the repository at this point in the history
  • Loading branch information
wangyu096 committed Jun 27, 2024
1 parent f8cbf13 commit 1262943
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,25 @@ void parseByPercentageLimitValue() {
assertThat(resourceQuota.getAppQuotaLimit().getCustomLimits().get("bk-soap")).isEqualTo(200L);
assertThat(resourceQuota.getAppQuotaLimit().getCustomLimits().get("bk-nodeman")).isEqualTo(100L);

resourceScopeQuotaLimit =
new ResourceQuotaLimitProperties.QuotaLimitProp("10%", "biz:2=20%");
appQuotaLimit =
new ResourceQuotaLimitProperties.QuotaLimitProp("20%", "bk-soap=40%");
resourceQuotaLimitProp =
new ResourceQuotaLimitProperties.ResourceQuotaLimitProp(true, "16", resourceScopeQuotaLimit,
appQuotaLimit);
resourceQuota = parser.parse(resourceQuotaLimitProp);

assertThat(resourceQuota.getCapacityExpr()).isEqualTo("16");
assertThat(resourceQuota.getCapacity()).isEqualTo(16L);

// 测试配额计算值向下取整
assertThat(resourceQuota.getResourceScopeQuotaLimit().getGlobalLimitExpr()).isEqualTo("10%");
assertThat(resourceQuota.getResourceScopeQuotaLimit().getGlobalLimit()).isEqualTo(1L);
assertThat(resourceQuota.getResourceScopeQuotaLimit().getCustomLimits().get("biz:2")).isEqualTo(3L);
assertThat(resourceQuota.getAppQuotaLimit().getGlobalLimitExpr()).isEqualTo("20%");
assertThat(resourceQuota.getAppQuotaLimit().getGlobalLimit()).isEqualTo(3L);
assertThat(resourceQuota.getAppQuotaLimit().getCustomLimits().get("bk-soap")).isEqualTo(6L);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public class QuotaLimit {
/**
* 解析之后的全局业务配额限制
*/
private Long globalLimit;
protected Long globalLimit;

public QuotaLimit(String globalLimitExpr, String customLimitExpr) {
this.globalLimitExpr = globalLimitExpr;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,21 @@
package com.tencent.bk.job.common.resource.quota;

import com.tencent.bk.job.common.model.dto.ResourceScope;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.HashMap;
import java.util.Map;
import java.util.StringJoiner;

/**
* 配额限制-资源管理空间
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Getter
@Setter
@NoArgsConstructor
public class ResourceScopeQuotaLimit extends QuotaLimit {

Expand All @@ -57,4 +60,14 @@ public long getLimit(ResourceScope resourceScope) {
}
return limit;
}

@Override
public String toString() {
return new StringJoiner(", ", ResourceScopeQuotaLimit.class.getSimpleName() + "[", "]")
.add("globalLimitExpr='" + globalLimitExpr + "'")
.add("globalLimit=" + globalLimit)
.add("customLimits=" + customLimits)
.add("customLimitExpr='" + customLimitExpr + "'")
.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,10 @@ public interface ServiceResourceQuotaResource {
@GetMapping("/config")
InternalResponse<Map<String, ResourceQuotaLimit>> getResourceQuotaConfig();

@ApiOperation(value = "获取正在执行中的作业数量统计", produces = "application/json")
@ApiOperation(value = "获取正在执行中的作业配额使用情况", produces = "application/json")
@GetMapping("/runningJob/quotaUsage")
InternalResponse<RunningJobQuotaUsage> getRunningJobQuotaUsage();

@GetMapping("/runningJob/quotaUsage")
InternalResponse<Void> performanceTest();
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@

package com.tencent.bk.job.execute.api.inner;

import com.tencent.bk.job.common.constant.ResourceScopeTypeEnum;
import com.tencent.bk.job.common.model.InternalResponse;
import com.tencent.bk.job.common.model.dto.ResourceScope;
import com.tencent.bk.job.common.resource.quota.ResourceQuotaLimit;
import com.tencent.bk.job.common.service.quota.ResourceQuotaStore;
import com.tencent.bk.job.execute.engine.quota.limit.RunningJobResourceQuotaManager;
Expand Down Expand Up @@ -62,4 +64,22 @@ public InternalResponse<RunningJobQuotaUsage> getRunningJobQuotaUsage() {
runningJobQuotaUsage.setResourceScopeCount(runningJobResourceQuotaManager.getResourceScopeRunningJobCount());
return InternalResponse.buildSuccessResp(runningJobQuotaUsage);
}

@Override
public InternalResponse<Void> performanceTest() {

new ResourceScope(ResourceScopeTypeEnum.BIZ, "2");
long start = System.currentTimeMillis();
for (int i = 1; i <= 50000; i++) {
String appCode = "bk-test-" + i % 10;
ResourceScope resourceScope = new ResourceScope(ResourceScopeTypeEnum.BIZ, String.valueOf(i % 100));
runningJobResourceQuotaManager.checkResourceQuotaLimit(appCode, resourceScope);
long jobInstanceId = 1000000000L + i;
runningJobResourceQuotaManager.addJob(appCode, resourceScope, jobInstanceId);
runningJobResourceQuotaManager.removeJob(appCode, resourceScope, jobInstanceId);
}
long end = System.currentTimeMillis();
log.info("RunningJobQuotaLimitPerformanceTest cost: {}", end - start);
return InternalResponse.buildSuccessResp(null);
}
}

0 comments on commit 1262943

Please sign in to comment.