Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tracking dependencies #14

Open
sluongng opened this issue May 20, 2021 · 2 comments
Open

Tracking dependencies #14

sluongng opened this issue May 20, 2021 · 2 comments
Labels
enhancement New feature or request

Comments

@sluongng
Copy link

It would be nice if we can have a way to tracking inter-components dependencies relationship.

Would be useful in the following cases:

  1. Ensure dependents SLO never exceed the dependencies
    I.e. if A depends on (B and C), and B and C each have the SLO of 99%, then A should not have the SLO exceeding 99^2 / 100 = 98.01

  2. Circular dependency between services: Optional opt-out circular dependency detection. 2(or more) Services are circular dependents would have the same SLO which is the min SLO among them.

@gplasky
Copy link

gplasky commented May 21, 2021

In principle I think this is a great idea -- e.g. one could add commit/deploy time integration tests for things like #2.

That said, I think in practice for #1 this will be very situational and not sufficiently generalizable. At the very least, there's significant nuance to the interpretation of the nature of dependency and the relative impact of A on B. For example, if A depends on B, but A caches results from B for a specified freshness duration, what is the mathematical nature of the dependence of A on B?

@sluongng
Copy link
Author

Hi @gplasky,

For example, if A depends on B, but A caches results from B for a specified freshness duration, what is the mathematical nature of the dependence of A on B?

-- begin-thinking-out-loud

I think this is the common circuit breaker pattern yeah? In this example, it would often be wiser to think of A as 2 services: A1 and A2. A1 responsibility is to update the cache(C) from B while A2 serves the data from (C). The dependencies chain will looks something like:

B -> A1 -> C -> A2

A1 and A2 can be classified with different SLA/SLO and different error budgets.

What happen when B fail?

A1, C, and A2 are all operating under a partial degradation manner: A1 cannot extract real data to populate cache, C holding stale cache which could potentially evict, A2 could be serving stale data. You would not have the ability to scale A up/down, not having the ability to failover A to a new AZ or deploy a new version of A with fresh cache for canary purposes.

I think in term of SLO, this would be impactful, but in term of SLA, end-user might not notice any differences.

-- end-thinking-out-loud


But you are right though. The OpenSLO spec should be flexible enough to enable folks to customize the different weights of the dependency links up to the actual business / organizational requirements. 🤔

@programmer04 programmer04 added the enhancement New feature or request label Dec 15, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants