From bc8b26ac8bdc6c04ad68ceb2e4a406b2f4e50541 Mon Sep 17 00:00:00 2001 From: wangyu096 Date: Thu, 13 Jun 2024 09:45:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=A7=E8=A1=8C=E5=BC=95=E6=93=8E?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=B0=83=E5=BA=A6=E9=85=8D=E9=A2=9D=E9=99=90?= =?UTF-8?q?=E5=88=B6=20#261?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/quota/limit/RunningJobCache.java | 73 +++++++++++++++++++ .../engine/quota/limit/package-info.java | 29 ++++++++ 2 files changed, 102 insertions(+) create mode 100644 src/backend/job-execute/service-job-execute/src/main/java/com/tencent/bk/job/execute/engine/quota/limit/RunningJobCache.java create mode 100644 src/backend/job-execute/service-job-execute/src/main/java/com/tencent/bk/job/execute/engine/quota/limit/package-info.java diff --git a/src/backend/job-execute/service-job-execute/src/main/java/com/tencent/bk/job/execute/engine/quota/limit/RunningJobCache.java b/src/backend/job-execute/service-job-execute/src/main/java/com/tencent/bk/job/execute/engine/quota/limit/RunningJobCache.java new file mode 100644 index 0000000000..507fbcbeb5 --- /dev/null +++ b/src/backend/job-execute/service-job-execute/src/main/java/com/tencent/bk/job/execute/engine/quota/limit/RunningJobCache.java @@ -0,0 +1,73 @@ +/* + * Tencent is pleased to support the open source community by making BK-JOB蓝鲸智云作业平台 available. + * + * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. + * + * BK-JOB蓝鲸智云作业平台 is licensed under the MIT License. + * + * License for BK-JOB蓝鲸智云作业平台: + * -------------------------------------------------------------------- + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and + * to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO + * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +package com.tencent.bk.job.execute.engine.quota.limit; + +import com.tencent.bk.job.common.model.dto.ResourceScope; +import com.tencent.bk.job.common.redis.BaseRedisCache; +import io.micrometer.core.instrument.MeterRegistry; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +@Component +public class RunningJobCache extends BaseRedisCache { + + private final RedisTemplate redisTemplate; + + // 3天过期 + private static final int EXPIRE_DAYS = 3; + private static final String ZSET_KEY_PREFIX = "job:execute:running:job:"; + + + public RunningJobCache(StringRedisTemplate redisTemplate, + MeterRegistry meterRegistry) { + super(meterRegistry, "RunningJobCache"); + this.redisTemplate = redisTemplate; + } + + public void addJob(ResourceScope resourceScope, long jobInstanceId) { + String key = buildKey(resourceScope); + redisTemplate.opsForZSet().add(key, String.valueOf(jobInstanceId), System.currentTimeMillis()); + } + + public void removeJob(ResourceScope resourceScope, long jobInstanceId) { + String key = buildKey(resourceScope); + redisTemplate.opsForZSet().remove(key, String.valueOf(jobInstanceId)); + } + + /** + * 业务是否超过正在执行的任务数量配额 + * @param resourceScope + * @return + */ + public boolean isExceedJobQuotaLimit(ResourceScope resourceScope) { + String key = buildKey(resourceScope); + redisTemplate.opsForZSet().remove(key, String.valueOf(jobInstanceId)); + } + + private String buildKey(ResourceScope resourceScope) { + return ZSET_KEY_PREFIX + resourceScope.getType().getValue() + ":" + resourceScope.getId(); + } +} diff --git a/src/backend/job-execute/service-job-execute/src/main/java/com/tencent/bk/job/execute/engine/quota/limit/package-info.java b/src/backend/job-execute/service-job-execute/src/main/java/com/tencent/bk/job/execute/engine/quota/limit/package-info.java new file mode 100644 index 0000000000..feb731b271 --- /dev/null +++ b/src/backend/job-execute/service-job-execute/src/main/java/com/tencent/bk/job/execute/engine/quota/limit/package-info.java @@ -0,0 +1,29 @@ +/* + * Tencent is pleased to support the open source community by making BK-JOB蓝鲸智云作业平台 available. + * + * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. + * + * BK-JOB蓝鲸智云作业平台 is licensed under the MIT License. + * + * License for BK-JOB蓝鲸智云作业平台: + * -------------------------------------------------------------------- + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and + * to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO + * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +package com.tencent.bk.job.execute.engine.quota.limit; + +/* + * 作业配额限制,防止单业务占用所有执行引擎的调度资源 + */