gitlab runner 并发是如何工作的?
How gitlab runner concurrency works?
Q1: 和
有什么区别
concurrent = 3
[[runners]]
..
executor = "shell"
和
concurrent = 3
[[runners]]
...
executor = "shell"
[[runners]]
...
executor = "shell"
[[runners]]
...
executor = "shell"
Q2:有没有道理,...
在具有全局 concurrent = 3
的单个运行器上有 3 个 相同类型 的执行器 (workers
)?或者具有全局 concurrent = 3
的单个执行器可以安全地并行执行多个作业吗?
Q3:它们之间的关系...
runners.limit
与 runners.request_concurrency
和 concurrent
谢谢
Gitlab's documentation on runners describes them as:
(...) isolated (virtual) machines that pick up jobs through the coordinator API of GitLab CI
因此,每个 运行ner 都是一个独立的进程,负责接收作业执行请求并根据预定义的配置处理它们。作为一个孤立的进程,每个 运行 人都有能力创建 'sub-processes'(也称为机器)以 运行 工作。
当您在 config.toml
中定义 [[runner]]
section 时,您正在配置 运行ner 并设置它应如何处理作业执行请求。
在您的问题中,您提到了其中两个 "how to deal with job execution request"' 设置:
limit
:"Limit how many jobs can be handled concurrently"。换句话说,一个 运行ner 可以创建多少个 'sub-processes' 来同时执行作业;
request_concurrency
:"Limit number of concurrent requests for new jobs from GitLab"。换句话说,运行ner 可以同时从 GitLab CI 作业队列中获取多少个作业执行请求。
此外,还有一些settings that apply to a machine globally。在你的问题中你提到了其中之一:
concurrent
: "Limit how many jobs globally can be run concurrently. This is the most upper limit of number of jobs using all defined runners"。换句话说,它限制了可以同时 运行 个作业的最大 'sub-processes' 数量。
因此,请记住 运行ner 及其子进程之间的区别以及特定 运行ner 设置与全局机器设置之间的区别:
Q1:
不同之处在于,在您的 1st 示例中,您有 one 运行ner 而在 第二个 例子你有三个运行人。值得一提的是,在这两个示例中,您的机器只允许同时 运行ning 3 个作业。
Q2:
不仅单个 运行ner 可以安全地同时 运行 多个作业,而且还可以控制您希望它处理多少个作业(使用上述 limit
设置) .
另外,在同一台机器上有相似的运行ners 运行ning是没有问题的。如何定义 运行 用户的配置取决于您和您的基础设施能力。
此外,请注意 an executor
仅定义如何 运行 您的工作。它不是唯一定义 运行ner 的东西,也不是 "worker" 的同义词。工作的是您的 运行 人员及其子流程。
Q3:
总而言之:您可以在同一台机器上定义一个或多个工人。每一个都是一个孤立的过程。一个 运行ner 的 limit
是一个 运行ner 进程的多少个子进程可以同时创建到 运行 个作业。 运行ner 的 request_concurrency
是 运行ner 可以处理来自 Gitlab CI 作业队列的请求数。最后,将一个值设置为 concurrent
将限制机器中的一个或多个 运行ners 运行ning 可以同时在您的机器上执行多少个作业。
参考资料
为了更好地理解,我真的建议您阅读 Autoscaling algorithm and parameters。
最后,我想您可能会发现这个关于如何 run runners in parallel on the same server 的问题很有用。
Q1: 和
有什么区别concurrent = 3
[[runners]]
..
executor = "shell"
和
concurrent = 3
[[runners]]
...
executor = "shell"
[[runners]]
...
executor = "shell"
[[runners]]
...
executor = "shell"
Q2:有没有道理,...
在具有全局 concurrent = 3
的单个运行器上有 3 个 相同类型 的执行器 (workers
)?或者具有全局 concurrent = 3
的单个执行器可以安全地并行执行多个作业吗?
Q3:它们之间的关系...
runners.limit
与 runners.request_concurrency
和 concurrent
谢谢
Gitlab's documentation on runners describes them as:
(...) isolated (virtual) machines that pick up jobs through the coordinator API of GitLab CI
因此,每个 运行ner 都是一个独立的进程,负责接收作业执行请求并根据预定义的配置处理它们。作为一个孤立的进程,每个 运行 人都有能力创建 'sub-processes'(也称为机器)以 运行 工作。
当您在 config.toml
中定义 [[runner]]
section 时,您正在配置 运行ner 并设置它应如何处理作业执行请求。
在您的问题中,您提到了其中两个 "how to deal with job execution request"' 设置:
limit
:"Limit how many jobs can be handled concurrently"。换句话说,一个 运行ner 可以创建多少个 'sub-processes' 来同时执行作业;request_concurrency
:"Limit number of concurrent requests for new jobs from GitLab"。换句话说,运行ner 可以同时从 GitLab CI 作业队列中获取多少个作业执行请求。
此外,还有一些settings that apply to a machine globally。在你的问题中你提到了其中之一:
concurrent
: "Limit how many jobs globally can be run concurrently. This is the most upper limit of number of jobs using all defined runners"。换句话说,它限制了可以同时 运行 个作业的最大 'sub-processes' 数量。
因此,请记住 运行ner 及其子进程之间的区别以及特定 运行ner 设置与全局机器设置之间的区别:
Q1:
不同之处在于,在您的 1st 示例中,您有 one 运行ner 而在 第二个 例子你有三个运行人。值得一提的是,在这两个示例中,您的机器只允许同时 运行ning 3 个作业。
Q2:
不仅单个 运行ner 可以安全地同时 运行 多个作业,而且还可以控制您希望它处理多少个作业(使用上述 limit
设置) .
另外,在同一台机器上有相似的运行ners 运行ning是没有问题的。如何定义 运行 用户的配置取决于您和您的基础设施能力。
此外,请注意 an executor
仅定义如何 运行 您的工作。它不是唯一定义 运行ner 的东西,也不是 "worker" 的同义词。工作的是您的 运行 人员及其子流程。
Q3:
总而言之:您可以在同一台机器上定义一个或多个工人。每一个都是一个孤立的过程。一个 运行ner 的 limit
是一个 运行ner 进程的多少个子进程可以同时创建到 运行 个作业。 运行ner 的 request_concurrency
是 运行ner 可以处理来自 Gitlab CI 作业队列的请求数。最后,将一个值设置为 concurrent
将限制机器中的一个或多个 运行ners 运行ning 可以同时在您的机器上执行多少个作业。
参考资料
为了更好地理解,我真的建议您阅读 Autoscaling algorithm and parameters。
最后,我想您可能会发现这个关于如何 run runners in parallel on the same server 的问题很有用。