From c8497f00962810b72f7484c4df6c065b50276884 Mon Sep 17 00:00:00 2001 From: Roy Chiang Date: Thu, 3 Jun 2021 07:44:40 -0700 Subject: [PATCH 1/2] Add proposal for parallel compaction by time interval Signed-off-by: Roy Chiang --- docs/proposals/parallel-compaction.md | 68 ++++++++++++++++++ .../proposals/parallel-compaction-design.png | Bin 0 -> 20148 bytes .../parallel-compaction-grouping.png | Bin 0 -> 27544 bytes .../parallel-compaction-kubernetes-jobs.png | Bin 0 -> 19082 bytes .../parallel-compaction-without-scheduler.png | Bin 0 -> 22698 bytes 5 files changed, 68 insertions(+) create mode 100644 docs/proposals/parallel-compaction.md create mode 100644 website/static/images/proposals/parallel-compaction-design.png create mode 100644 website/static/images/proposals/parallel-compaction-grouping.png create mode 100644 website/static/images/proposals/parallel-compaction-kubernetes-jobs.png create mode 100644 website/static/images/proposals/parallel-compaction-without-scheduler.png diff --git a/docs/proposals/parallel-compaction.md b/docs/proposals/parallel-compaction.md new file mode 100644 index 00000000000..a2d90f0c6fc --- /dev/null +++ b/docs/proposals/parallel-compaction.md @@ -0,0 +1,68 @@ +--- +title: "Parallel Compaction by Time Interval" +linkTitle: "Parallel Compaction by Time Interval" +weight: 1 +slug: parallel-compaction +--- + +- Author: [Roy Chiang](https://github.com/roystchiang) +- Date: May 2021 +- Status: Proposed +--- + +## Introduction +As a part of pushing Cortex’s scaling capability at AWS, we have done performance testing with Cortex and found the compactor to be one of the main limiting factors for higher active timeseries limit per tenant. The documentation [Compactor](https://cortexmetrics.io/docs/blocks-storage/compactor/#how-compaction-works) describes the responsibilities of a compactor, and this proposal focuses on the limitations of the current compactor architecture. In the current architecture, compactor has simple sharding, meaning that a single tenant is sharded to a single compactor. In addition, a compactor handles compaction groups of a single tenant iteratively, meaning that blocks belonging non-overlapping times are not compacted in parallel. + +### Problem and Requirements +Currently, a compactor is able to compact up to 20M timeseries within 2 hours for a level-2 compaction, including the time to download blocks, compact, and upload the newly compacted block. We would like to increase the timeseries limit per tenant, and compaction is one of the limiting factors. In addition, we would like to achieve the following: + +* Compact multiple non-overlapping time intervals concurrently, so we can achieve higher throughput for the compaction of a single tenant +* We should be able to scale up, down compactor as needed, depending on how many compactions are pending +* Insight into the compaction progress of a tenant, such as the number of compactions required in order to catch up to the newest blocks + +## Design + +We accept the fact that a single compaction can potentially take more than 2 hours to compact, and we achieve higher compaction throughput through horizontally scaling the compactor. To compact more blocks in parallel for a single tenant, we distribute the compaction groups to compactors, instead of introducing more parallelism within a compactor. + +### Parallelize Work + +This proposal builds heavily on top of the [GrafanaLabs approach of introducing parallelism via time intervals](https://github.com/cortexproject/cortex/pull/2616). The difference being that a single tenant is now sharded across multiple compactors instead of just a single compactor. The initial approach will be to work on distinct time intervals, but the compactor planner can be later extended to introduce parallelism within a time interval as well. The + +The following is an example of parallelize work at each level: + +![Parallel Compaction Grouping](/images/proposals/parallel-compaction-grouping.png) + +Compactors are shuffle-sharded, meaning that 1 tenant can belong to multiple compactors, and these subset of compactors determine which blocks should be compacted together. Compactors determine amongst themselves the responsibility of the compaction blocks, by using a hash on time interval and the block ids. + +The benefit of this approach is that this aligns with what Cortex currently does in Ruler. The downside is that a compaction job can only be assigned to a single compactor, rather than all of the compactors sharded for the tenant. If a compaction job takes forever, other tenants sharded to the same compactor will be blocked until the issue is resolved. With the scheduler approach, any compactor assigned to a given tenant can pick up any work required. + +![Parallel Compaction Without Scheduler](/images/proposals/parallel-compaction-without-scheduler.png) + +## Scenarios + +### Bad block resulting in non-ideal compaction groups + +A Cortex operator configures the compaction block range. Using 2h and 6h as example, [2h-1] [2h-2] [2h-3] [2h-4] [2h-5] [2h-6]. If the [2h-1] block is corrupted, we may compact the subsequent [2h-2] [2h-3] [2h-4] [2h-5] [2h-6] blocks. To compact into a 6 hour group, the ideal compaction is [2h-1] [2h-2] [2h-3] and [2h-4] [2h-5] [2h-6]. The cortex planner needs to know the ideal compaction interval, and prevent compaction of [2h-2] [2h-3] [2h-4] from happening, which will result in [2h-1] not able to be compacted into longer time interval blocks. Cortex has full information regarding all the available blocks, so we should utilize this information to achieve the best compaction interval. + +## Alternatives + +### Shard compaction jobs amongst compactors with a scheduler +![Parallel Compaction Architecture](/images/proposals/parallel-compaction-design.png) + +We add a new component Compactor Scheduler, which is responsible for calculating the compaction plan, and distributing compaction groups to compactors. The planner is sharded by tenant id, so that we can horizontally scale the planner as needed in order to accept more tenants in the cortex cluster. A tenant will have two queues inside the planner, a compaction queue and a clean up queue, similar to how the query frontend currently holds queues of pending queries. + +Once a compactor scheduler pushes a job to a compactor, the job is no longer available. Every set interval, or once the compaction is done, a compactor will update the compactor schedule the current status of the compaction job. If a compactor does not provide an update to the scheduler within a timeout, the compaction job becomes available to be assigned to other compactors. + +#### Concurrency + +To achieve concurrency within a single tenant, compactor scheduler will push jobs to compactors. Compactors are shuffle-sharded by tenant id, to prevent a large tenant from impacting the compaction of other tenants. Compactor will download blocks from long term storage, compact, and upload. Compactor will also pull from the clean up queues from scheduler, and delete blocks marked for deletion. + +#### Consistency + +On resharding of compactor schedulers, a tenant might move to a different scheduler. We can either drop the current compactor job in order to prevent duplicate compaction jobs, or continue compaction. I propose that the compactor drops the compaction job if the compaction group no longer belongs to the original compactor scheduler. This way, we do not have duplicate compactions happening, and we can minimize work wasted. + +### Contribute to Thanos for a more scalable compactor +Instead of introducing parallelism on the Cortex compactor level, we move the parallelism to the Thanos compactor itself. Thanos has a [proposal to make compactor more scalable](https://docs.google.com/document/d/1xi0V8DB0hE54XgkogJRnNL6yH7C5JThJywlLFoC6dCQ/), and a [PR](https://github.com/thanos-io/thanos/pull/3807). Cortex will enjoy higher throughput per tenant if Thanos is able to speed up the compaction, and we can keep the Cortex architecture the same. However, this approach means that a single tenant is still sharded to a single compactor. In order to compact more groups at once, we must scale up compactor vertically. Although vertical scaling can get us far, we should scale horizontally where we can. + +### Create a Kubernetes job for each of the compaction plans +The compactor schedules creates kubernetes jobs for each of the compaction jobs that can be done, instead of pushing the job to compactor. Kubernetes is responsible for spinning up a compactor pod for each of the job scheduled. This way, we avoid the coordination between compaction scheduler and compactor. Also, the compaction scheduler coordinates with the Kubernetes API server, instead of amongst each other during resharding. The downside of this approach is that we cannot control the concurrency, and Cortex requires a tighter integration with Kubernetes. diff --git a/website/static/images/proposals/parallel-compaction-design.png b/website/static/images/proposals/parallel-compaction-design.png new file mode 100644 index 0000000000000000000000000000000000000000..774f7aad7d302e3643ea38108c2678b81c20d61e GIT binary patch literal 20148 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 literal 0 HcmV?d00001 diff --git a/website/static/images/proposals/parallel-compaction-grouping.png b/website/static/images/proposals/parallel-compaction-grouping.png new file mode 100644 index 0000000000000000000000000000000000000000..8fdc7d19836b72787abb40127f84f4c0ee983b60 GIT binary patch literal 27544 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 CXBABV literal 0 HcmV?d00001 diff --git a/website/static/images/proposals/parallel-compaction-kubernetes-jobs.png b/website/static/images/proposals/parallel-compaction-kubernetes-jobs.png new file mode 100644 index 0000000000000000000000000000000000000000..66852d8bafc5b846fdd0c5a65329327bd52e868f GIT binary patch literal 19082 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 literal 0 HcmV?d00001 diff --git a/website/static/images/proposals/parallel-compaction-without-scheduler.png b/website/static/images/proposals/parallel-compaction-without-scheduler.png new file mode 100644 index 0000000000000000000000000000000000000000..032d68acaa846a544c70ed78eee49bb5e99972f9 GIT binary patch literal 22698 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 PW5?CYHqciWy&nG?v7atZ literal 0 HcmV?d00001 From b04d90f653e39cdb912ba745eb381eb1156ccdfe Mon Sep 17 00:00:00 2001 From: Roy Chiang Date: Tue, 22 Jun 2021 20:31:56 -0700 Subject: [PATCH 2/2] address comments regarding compaction sharding Signed-off-by: Roy Chiang --- docs/proposals/parallel-compaction.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/proposals/parallel-compaction.md b/docs/proposals/parallel-compaction.md index a2d90f0c6fc..8ef2eec9e72 100644 --- a/docs/proposals/parallel-compaction.md +++ b/docs/proposals/parallel-compaction.md @@ -26,13 +26,13 @@ We accept the fact that a single compaction can potentially take more than 2 hou ### Parallelize Work -This proposal builds heavily on top of the [GrafanaLabs approach of introducing parallelism via time intervals](https://github.com/cortexproject/cortex/pull/2616). The difference being that a single tenant is now sharded across multiple compactors instead of just a single compactor. The initial approach will be to work on distinct time intervals, but the compactor planner can be later extended to introduce parallelism within a time interval as well. The +This proposal builds heavily on top of the [GrafanaLabs approach of introducing parallelism via time intervals](https://github.com/cortexproject/cortex/pull/2616). The difference being that a single tenant is now sharded across multiple compactors instead of just a single compactor. The initial approach will be to work on distinct time intervals, but the compactor planner can be later extended to introduce parallelism within a time interval as well. The following is an example of parallelize work at each level: ![Parallel Compaction Grouping](/images/proposals/parallel-compaction-grouping.png) -Compactors are shuffle-sharded, meaning that 1 tenant can belong to multiple compactors, and these subset of compactors determine which blocks should be compacted together. Compactors determine amongst themselves the responsibility of the compaction blocks, by using a hash on time interval and the block ids. +Compactors are shuffle-sharded, meaning that 1 tenant can belong to multiple compactors, and these subset of compactors determine which blocks should be compacted together. Compactors determine amongst themselves the responsibility of the compaction blocks, by using a hash of time interval and tenant id, and putting it on the sharding ring. The benefit of this approach is that this aligns with what Cortex currently does in Ruler. The downside is that a compaction job can only be assigned to a single compactor, rather than all of the compactors sharded for the tenant. If a compaction job takes forever, other tenants sharded to the same compactor will be blocked until the issue is resolved. With the scheduler approach, any compactor assigned to a given tenant can pick up any work required. @@ -63,6 +63,3 @@ On resharding of compactor schedulers, a tenant might move to a different schedu ### Contribute to Thanos for a more scalable compactor Instead of introducing parallelism on the Cortex compactor level, we move the parallelism to the Thanos compactor itself. Thanos has a [proposal to make compactor more scalable](https://docs.google.com/document/d/1xi0V8DB0hE54XgkogJRnNL6yH7C5JThJywlLFoC6dCQ/), and a [PR](https://github.com/thanos-io/thanos/pull/3807). Cortex will enjoy higher throughput per tenant if Thanos is able to speed up the compaction, and we can keep the Cortex architecture the same. However, this approach means that a single tenant is still sharded to a single compactor. In order to compact more groups at once, we must scale up compactor vertically. Although vertical scaling can get us far, we should scale horizontally where we can. - -### Create a Kubernetes job for each of the compaction plans -The compactor schedules creates kubernetes jobs for each of the compaction jobs that can be done, instead of pushing the job to compactor. Kubernetes is responsible for spinning up a compactor pod for each of the job scheduled. This way, we avoid the coordination between compaction scheduler and compactor. Also, the compaction scheduler coordinates with the Kubernetes API server, instead of amongst each other during resharding. The downside of this approach is that we cannot control the concurrency, and Cortex requires a tighter integration with Kubernetes.