From cec264996b997b7a0b799362b7c9d62634f21537 Mon Sep 17 00:00:00 2001 From: Christian Haudum Date: Tue, 28 Feb 2023 13:56:40 +0100 Subject: [PATCH] LID: Improve scheduler to control QoS across users within a tenant (#8585) Even though Loki is built as multi-tenant system by default, there are use-cases where a Loki installation only has a very large, single tenant, e.g. dedicated Loki cells for customers in Grafana Cloud. However, there are potentially a lot of different users using the same tenant to query logs, such as users accessing Loki from Grafana or via CLI or HTTP API. This can lead to contention between queries of different users, because they all share the same tenant. While the current implementation of the scheduler queues allows for QoS guarantees between tenants, it does not account for QoS guarantees across individual users within a single tenant. --- Signed-off-by: Christian Haudum Co-authored-by: Karsten Jeschkies --- .../lids/0003-QueryFairnessInScheduler.md | 180 ++++++++++++++++++ .../lids/scheduler-component-diagram.plantuml | 34 ++++ .../lids/scheduler-component-diagram.png | Bin 0 -> 22143 bytes ...uler-proposal-1-component-diagram.plantuml | 45 +++++ ...scheduler-proposal-1-component-diagram.png | Bin 0 -> 30935 bytes ...uler-proposal-2-component-diagram.plantuml | 59 ++++++ ...scheduler-proposal-2-component-diagram.png | Bin 0 -> 46068 bytes .../lids/scheduler-sequence-diagram.plantuml | 23 +++ .../lids/scheduler-sequence-diagram.png | Bin 0 -> 40605 bytes 9 files changed, 341 insertions(+) create mode 100644 docs/sources/lids/0003-QueryFairnessInScheduler.md create mode 100644 docs/sources/lids/scheduler-component-diagram.plantuml create mode 100644 docs/sources/lids/scheduler-component-diagram.png create mode 100644 docs/sources/lids/scheduler-proposal-1-component-diagram.plantuml create mode 100644 docs/sources/lids/scheduler-proposal-1-component-diagram.png create mode 100644 docs/sources/lids/scheduler-proposal-2-component-diagram.plantuml create mode 100644 docs/sources/lids/scheduler-proposal-2-component-diagram.png create mode 100644 docs/sources/lids/scheduler-sequence-diagram.plantuml create mode 100644 docs/sources/lids/scheduler-sequence-diagram.png diff --git a/docs/sources/lids/0003-QueryFairnessInScheduler.md b/docs/sources/lids/0003-QueryFairnessInScheduler.md new file mode 100644 index 0000000000000..6eb13c61e25a3 --- /dev/null +++ b/docs/sources/lids/0003-QueryFairnessInScheduler.md @@ -0,0 +1,180 @@ +--- +title: "0003: Query fairness across users within tenants" +description: "Improve the query scheduler to ensure fairness between individual users of individual tenants." +--- + +# 0003: Query fairness across users within tenants + +**Author:** Christian Haudum () + +**Date:** 02/2023 + +**Sponsor(s):** @chaudum @owen-d + +**Type:** Feature + +**Status:** Accepted + +**Related issues/PRs:** + +**Thread from [mailing list](https://groups.google.com/forum/#!forum/lokiproject):** + +--- + +## Background + +The query scheduler (or short scheduler) is a component of Loki that distributes requests (sub-queries) from the query frontend (or short frontend) to the querier workers so that execution fairness between tenants can be guaranteed. + +By maintaining separate FIFO queues for each tenant and assigning the correct amount of querier workers to these queues, the scheduler takes care that a single tenant cannot compromise all other tenants' query capabilities. + +**Component diagram:** + +![scheduler-component-diagram.plantuml](../scheduler-component-diagram.png) + +**Sequence diagram:** + +![scheduler-sequence-diagram.plantuml](../scheduler-sequence-diagram.png) + +## Problem Statement + +Even though Loki is built as multi-tenant system by default, there are use-cases where a Loki installation only has a very large, single tenant, e.g. dedicated Loki cells for customers in Grafana Cloud. + +However, there are potentially a lot of different users using the same tenant to query logs, such as users accessing Loki from Grafana or via CLI or HTTP API. This can lead to contention between queries of different users, because they all share the same tenant. + +While the current implementation of the scheduler queues allows for QoS guarantees between tenants, it does not account for QoS guarantees across individual users within a single tenant. + +That said, Loki does not have the notation of individual users. + +## Goals + +The main goal of the following proposals is to lay out ideas how to improve the scheduler component to not only assure QoS across tenants, but also across actors (users) within a tenant, without requiring any changes to the deployment model of frontend, scheduler and queriers. +This should also include changes to the queue structure to be easily extensible for future scheduling improvements. + +## Non-Goals (optional) + +While changing and extending the scheduler requires also user-facing API changes, the public API is not part of the discussion of this document. + +## Proposals + +### Proposal 0: Do nothing + +An alternative to changing the scheduling mechanism is to handle QoS control via multiple tenants and multi-tenant querying. + +**Pros:** +* Keeps the scheduler as simple as it is now +* No development time + +**Cons:** +* While that separation into tenants may work for some prospects, it might not be feasible to implement for others. + +### Proposal 1: Add fixed second level to scheduler + +The current scheduler is implemented in a way that it maintains a separate FIFO queue for each tenant. When a request (sub-query) is enqueued, the scheduler puts it into the existing queue for that tenant. If the queue does not exist yet, it creates it first and re-assignes the connected querier workers to the available tenant queues. Each querier worker pulls round-robin from the assigned queues in a loop. + +Now, instead of enqueuing and pulling directly from the per-tenant queue, requests get enqueued in per-user queues and the per-tenant queue pulls round-robin from the user queues that are assigned to the tenant queues. + +**Component diagram:** + +![scheduler-proposal-1-component-diagram.plantuml](../scheduler-proposal-1-component-diagram.png) + +Like the current implementation, the scheduler enqueues requests based on the `X-Scope-OrgID` header (or equivalent key in the request context), but also takes a second key (such as `X-Scope-UserID`) into account. This ensembles a fixed hierarchy with two levels where the tenant-to-user relation is a one-to-many relation. +However, this has the disadvantage that the concept of users (that does not exist yet in Loki) leaks into the scheduler domain. + +**Pros:** +* Relatively simple to to implement + +**Cons:** +* Not extensible +* Leaks domain knowledge + +### Proposal 2: Fully hierarchical scheduler + +This proposal is similar to _Proposal 1_, but with the difference that there are no fixed levels and levels can be nested arbitrarily. + +**Component diagram:** + +![scheduler-proposal-2-component-diagram.plantuml](../scheduler-proposal-2-component-diagram.png) + +The implementation of the `RequestQueue`, which controls what querier workers are connected to which root queues (aka tenant queues), can be kept as is. However, the concept of tenants and users is dropped and replaced by by a concept of hierarchical actors, which can be represented as a slice of identifiers. Note, this does **not** drop the concept of tenants throughout Loki (represented in the `X-Scope-OrgID` header and/or request context). + +**Example of identifiers:** + +```go +actorA := []string{"tenant_a", "user_1"} +actorB := []string{"tenant_b", "user_2"} +actorC := []string{"tenant_b", "user_3", "service_foo"} +actorD := []string{"tenant_b", "user_3", "service_bar"} +``` + +More generally: + +```go +actorN := []string{"L0 Queue", "L1 Queue", "L2 Queue", ... "Ln Queue"} +``` + +The L0 queue (root queue) needs to be able to handle worker connections and therefore needs additional functionality compared to its leaf queues. + +The following code snippet is meant to show the simplified recursive structure of the queues. + +```go +type Request interface{} + +type Queue interface { + Deqeue(actor []string) Request + Enqueue(r Request, actor []string) error +} + +// RequestQueue implements Queue +type RequestQueue struct { + queriers map[string]*querier + rootQueues map[string]*RootQueue +} + +// RootQueue implements Queue +type RootQueue struct { + queriers map[string]*querier + leafs map[string]*LeafQueue + ch chan Request +} + +// LeafQueue implements Queue +type LeafQueue struct { + leafs map[string]*LeafQueue + ch chan Request +} +``` + +**Pros:** +* Backwards compatible, because tenant can be identified as `[]string{"tenantID"}` +* Queue hierarchy can be extended without changing the scheduler implementation +* Implementation does not require knowledge outside of its domain + +**Cons:** +* More complex to implement than fixed amount of levels +* Each queue comes with memory overhead + +### Proposal 3: Multiple per-tenant sub-queues + +Another option to keep the concept of users out of Loki and still provide some query fairness guarantees would be to simply shard request across multiple sub-queues within a tenant's queue. The shard size could be a per-tenant setting to account for different tenant sizes. + +This is similar to Proposal 1, in the sense of adding another fixed level of sub-queues. +However, with the difference, that in this case, a single query request is assigned a random identifier that is hashed. When the query is split, the sub-requests maintain the same hashed identifier. The modulor of the hash defines to which sub-queue of a tenant requests will be enqueued. + +**Pros:** +* User agnostic per-request QoS control + +**Cons:** +* Requests of individual users can still effect other users +* Not extensible + +**Alternative:** + +Sharding on a per-request basis can still be achieved with Proposal 2, by adding the request hash as an additional level in the hierarchy. + +```go +actor := []string{"tenant", "user", "request_hash"} +``` + +## Consensus + +Proposal 2 is going to be implemented. diff --git a/docs/sources/lids/scheduler-component-diagram.plantuml b/docs/sources/lids/scheduler-component-diagram.plantuml new file mode 100644 index 0000000000000..e8fcfc740223b --- /dev/null +++ b/docs/sources/lids/scheduler-component-diagram.plantuml @@ -0,0 +1,34 @@ +skinparam componentStyle rectangle + +package Frontend { + () RoundTripper as QF +} + +package Scheduler { + () FrontendLoop as FL + + component RequestQueue { + [Tenant Queue] as T1 + [Tenant Queue] as T2 + } + + () QuerierLoop as Q1 + () QuerierLoop as Q2 + +} + +QF -->> FL +FL -->> T1 +FL -->> T2 + +package Querier { + [Worker] as W1 + [Worker] as W2 +} + +T1 -->> Q1 +Q1 -->> W1 + +T2 -->> Q1 +T2 -->> Q2 +Q2 -->> W2 diff --git a/docs/sources/lids/scheduler-component-diagram.png b/docs/sources/lids/scheduler-component-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..576c10575612d8763d010d32b9e1c9a90a60e157 GIT binary patch literal 22143 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 literal 0 HcmV?d00001 diff --git a/docs/sources/lids/scheduler-proposal-1-component-diagram.plantuml b/docs/sources/lids/scheduler-proposal-1-component-diagram.plantuml new file mode 100644 index 0000000000000..d523c5ddef2a2 --- /dev/null +++ b/docs/sources/lids/scheduler-proposal-1-component-diagram.plantuml @@ -0,0 +1,45 @@ +skinparam componentStyle rectangle + +package Frontend { + () RoundTripper as QF +} + +package Scheduler { + () FrontendLoop as FL + + component RequestQueue { + [User Queue] as U1 + [User Queue] as U2 + [User Queue] as U3 + [User Queue] as U4 + [Tenant Queue] as T1 + [Tenant Queue] as T2 + } + + () QuerierLoop as Q1 + () QuerierLoop as Q2 + + U1 ..>> T1 + U2 ..>> T2 + U3 ..>> T2 + U4 ..>> T2 +} + +QF -->> FL +FL -->> U1 +FL -->> U2 +FL -->> U3 +FL -->> U4 + +package Querier { + [Worker] as W1 + [Worker] as W2 +} + +T1 -->> Q1 +Q1 -->> W1 + +T2 -->> Q1 +T2 -->> Q2 +Q2 -->> W2 + diff --git a/docs/sources/lids/scheduler-proposal-1-component-diagram.png b/docs/sources/lids/scheduler-proposal-1-component-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..365af0428d5dc663d5f4d46e98b30b5093b75b21 GIT binary patch literal 30935 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 Y1 + Z2 ..>> Y1 + Z3 ..>> Y2 + Z4 ..>> Y2 + Y1 ..>> X1 + Y2 ..>> X2 + Y3 ..>> X2 + X1 ..>> R1 + X2 ..>> R2 + X3 ..>> R2 +} + +QF -->> FL +FL -->> Z1 +FL -->> Z2 +FL -->> Z3 +FL -->> Z4 +FL -->> Y3 +FL -->> X2 +FL -->> X3 + +package Querier { + [Worker] as W1 + [Worker] as W2 +} + +R1 -->> Q1 +Q1 -->> W1 + +R2 -->> Q1 +R2 -->> Q2 +Q2 -->> W2 diff --git a/docs/sources/lids/scheduler-proposal-2-component-diagram.png b/docs/sources/lids/scheduler-proposal-2-component-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..b24bcb1b4208b9d1a8ffc0d02a9505f18435b77e GIT binary patch literal 46068 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

hj(g1V`FG5DHz5wDajtfO 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 Frontend: GET /api/v1/query_range +activate Frontend + +group gRPC stream [loop] + Frontend -> FrontendLoop: SchedulerToFrontend{} + FrontendLoop -> RequestQueue: Enqueue() + RequestQueue -> tenantqueues: ->chan + RequestQueue --> FrontendLoop: + FrontendLoop --> Frontend: FrontendToScheduler{} +end + +group gRPC stream [loop] + QuerierLoop -> RequestQueue: GetNextRequestForQuerier() + tenantqueues -> RequestQueue: <-chan + RequestQueue --> QuerierLoop: Request{} + QuerierLoop -> Querier: SchedulerToQuerier{} + Querier --> QuerierLoop: QuerierToScheduler{} +end + +Frontend --> Frontend: wait +Querier -> Frontend: QueryResult{} +Frontend --> Client: query response {...} +deactivate Frontend diff --git a/docs/sources/lids/scheduler-sequence-diagram.png b/docs/sources/lids/scheduler-sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..592d81dd3cf1074768d1b1680bd382e4b9a8a10b GIT binary patch literal 40605 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