-
Notifications
You must be signed in to change notification settings - Fork 263
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
Support setting up traffic splitting of service #210
Comments
I'd prefer if users didn't think about traffic splitting as a "route" manipulation, because it's not. It's a modification to a KnService resource. As an example, let's say I have this KnService:
I'd like to discuss how this would appear on a Just some brainstorming/ramblings....
So, with that, the above KnService update command might look like: Note that I think the general syntax for the arg would be:
For clarity, other examples:
|
First some commentary on what's here.
The semantics here suggests this should be removed from the traffic block entirely, but this seems a confusing way to specify that.
This would be a clearer way to specify removing something from traffic. The traffic assignment command surface is subject to a variety of challenges. Some goals you might come to the task with:
There are two ways to go here — one in which you have to plan out the resulting traffic distribution on paper and put every element in your command line just right, and one in which you only have to specify what you're doing. The former is more explicit, the latter is less error-prone (because you're less likely to forget that you had a revision tagged, or had a revision in your list of revisions that should get some traffic, etc) Your suggestion above can do a lot of the above in the "only specify what you're doing" way, given some modifications:
So those scenarios:
WHEW. |
My concern with basically providing a delta is:
I actually disagree that delta are less error prone, I think it's far harder for people to calculate a delta instead of being explicit. This is why in many cases I've seen people provide the default value for flags instead of letting the defaults kicks in - it allows people to know for sure what's going on and that gives them a sense of comfort and control. If we were talking about modifying one control knob (by saying "increase this by X") and it didn't have any impact on any other knobs then I think deltas make some sense. But in this case we're dealing with a potentially long list of routing paths and asking the user to calculate this delta doesn't feel trivial to me when as they change one knob they need to make sure all of the others are modified appropriately. Plus look at the list of rules you had to specify in order to explain what will happen based on the absence or presence of things - that's non-trivial. In my proposal absence means what people expect... you get nothing for that field. |
to be clear... I'm not against some sort of mixture of the two, but i do think the delta side of it needs to be limited in scope otherwise we'll scare people with the amount of processing rules and delta calculations we're asking of them |
The read-modify-write thing you're worrying about is going to be prevented by a resource version field, when done by the client.
Furthermore, you get a much worse read-modify-write problem if you expect people to always be explicit. Consider the use cases I posted.
I want to roll out candidate to 10%. I GET the service, and see candidate is at 5%, current is at 95%, experiment is at 0%.
You want to roll out experiment to 2%. You GET the service, and see candidate is at 5%, current is at 95%, experiment is at 0%.
You set candidate to 5% (you don't want to mess with a rollout, after all), current to 93%, and experiment to 2%, using the explicit command line.
I set candidate to 10%, current to 90%, and experiment to 0%.
Oops. This could be easily avoided by using delta commands.
This is exactly why I favor them — delta commands avoid RMW problems that are inherent in the human having a "delta" intent but only full-explicit ability to specify things.
… On Jul 1, 2019, at 7:48 PM, Doug Davis ***@***.***> wrote:
to be clear... I'm not against some sort of mixture of the two, but i do think the delta side of it needs to be limited in scope otherwise we'll scare people with the amount of processing rules and delta calculations we're asking of them
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
|
As for changing multiple knobs, that's what the "rest" percent is for. It says "use this one to make it all add up".
… On Jul 1, 2019, at 7:48 PM, Doug Davis ***@***.***> wrote:
to be clear... I'm not against some sort of mixture of the two, but i do think the delta side of it needs to be limited in scope otherwise we'll scare people with the amount of processing rules and delta calculations we're asking of them
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.
|
it doesn't because you're thinking of it from a Kube perspective. I'm thinking of it from a user perspective. Yes we can prevent Kube from complaining but that won't stop the case of someone thinking one revision is at 10% when in reality it's at 90% because someone else just changed it - and not knowing this information could have changed how the user does their delta. |
The number of combinations and their rules can be simplified if we revisit the two operations being performed, i.e. (1) doing actual traffic split (b) assign the custom traffic tags. Roland and I spent some time on this and proposing UX for this in doc PTAL. |
Hi, Based on the discussion above, I consolidated and drafted a proposal about traffic splitting, blue/green deployment and etc. And had an initial discussion with @duglin and @maximilien today, I would like to share the proposal and we can discuss further. Any comment is welcomed. Thanks! https://docs.google.com/document/d/1oxbFqIUPEjLdTSikjNVVYGuYVeX4oHX9w1eX1kL8pxs/edit?usp=sharing There may be some overlap with the proposal above but we can figure out later after discussions:) |
Thanks for the feedback on the doc
Writing down the feedback below:
Opened PR #285 as traffic splitting doc to help ease reviewing. Examples after incorporating the feedback:
|
See: #285 (comment) for why searching for traffic blocks isn't possible. |
I'd like to work on this, already got some code in place, anyone else would like to collaborate feel free to comment or just ping on slack. /assign @navidshaikh |
I also would like to work on this item and collaborate with @navidshaikh. I think the voting for differences for the two proposals is almost done. After there's an agreement, we can break them down to specific items and pick up and work on them. Thanks! |
I also would like to work together, @navidshaikh @zhanggbj. |
With implementations of
kn route
in the works (issues #205, #201, #204), it's perhaps time to think about how to allow users to set traffic splitting on their services.Not only as potentially a
kn route update ...
with percentage values for different revisions, but also whether other types of traffic routing splitting is warranted.I know @duglin has ideas on "feature flag traffic splitting" so let's use this issue to discuss the client UX. Perhaps the MVP and the v2 and nice to have.
The text was updated successfully, but these errors were encountered: