-
Notifications
You must be signed in to change notification settings - Fork 5.1k
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
Being able to do A/B testing - Canary #1164
Comments
Actually, I'm not sure but I'm thinking about that issue as well :) I feel like option 1 is my favorite but I'm really not sure. |
Solution 1 is really attractive because it's the most logical, but it has many problems. After more reflection I think solution 3 respond to every solution without more configuration. A backend will only work like any other server and it's possible to do the same than 2 with 3. |
Is it possible to document this pattern? I wonder how it can work and what needs to be done on Marathon to do it? |
@stibbons curious, how does Kubernetes do this? The one approach I'm aware of is to spawn more Pods and adjust service labels accordingly, which all seems to be below the proxy/Ingress level that Traefik operates on. |
Sorry, I should not have said "Kuberentes does it already". I correct it in my statement. Should be like: Kubernetes allow Rolling update with time delay/period ( In anyway, if Traefik can document inside the official doc how to configure both K8s and Marathon to have an A/B deployment with Traefik, this would be simply extraordinaire! |
I also really have a need for this. Right now I have multiple swarm services (A/B) both declaring the same frontend Host label, attempting to do this kind of thing, but it doesn't work, only the first frontend declared w/ a |
@guilhem in your diagram above when you say "what is possible". Are any of those in your diagram currently possible? For example "frontend with multiple backends"... i don't think this is currently possible correct? |
@bitsofinfo correct, those are proposals, they are not currently supported. I validated the same thing in the slack channel the other day. :) I also tried the suggestion of overriding the traefik.backend to have both stacks use the same backend but Rancher backend doesn't support it. So I'm watching for updates here. |
So if want to accomplish this today.... if I have 2 separate docker services (A/B), if they both share the same |
@bitsofinfo I'm not on the Traefik team but AFAIK, neither of those configs are supported. It MAY work as indicated by @guilhem since the marathon backend seems to work but your milage may vary. So to clarify, today there are no officially supported or functional canary - A/B config scenarios. Anyone else feel free to correct me if I've misspoken. |
For anyone interested, this is the only way I can get it to "work" (traefik latest) Launch 2 nginx services
Traefik dashboard results in: Repeated requests for the fqdn, bounce between both A/B versions Not sure exactly which frontend is actually picking up the requests, but sort of don't care. One of the front-ends seems useless I guess. Would definitely be nice to just have |
The other scenario is if you want to have an Launch 3 nginx services
Traefik dashboard results in: So here http calls to |
@bitsofinfo thanks for the workaround. |
Yes. We currently have this same situation as well where we want to distribute load between two backend service in round robin or random fashion. We would love to see this implemented in the next release. Cheers! |
Yes! It would be nice if traefik would just add support for this. The workaround mentioned by @bitsofinfo works but it just adds a lot more complexity and limitations to a service deployment specifically whenever you have to re-deploy a second version of the service just to create a frontend to target that specific version. |
I currently have a need for this as well! A straightforward way to split traffic 50/50 between current version and "new" version of a service would be amazing. |
Does this workaround @bitsofinfo works with sticky session? as if you fire a HTTP request, and traefik picks backend A or B at 50%/50%, and the subsequent request from the same user strictly goes to the EXACTLY same backend it hit at first entry? |
@milewski I don't know, you'll have to test that: https://docs.traefik.io/basics/#sticky-sessions |
Any update on this issue? Nginx has nginx.ingress.kubernetes.io/canary-by-header and nginx.ingress.kubernetes.io/canary-by-cookie (see https://github.com/Shopify/ingress/blob/master/docs/user-guide/nginx-configuration/annotations.md#canary). Is there anything like this for traefik? |
@JPM84 we shipped support for traffic splitting (which should allow A/B testing) at least for the Kubernetes provider with 1.7: https://docs.traefik.io/user-guide/kubernetes/#traffic-splitting |
@timoreimann Yeah, I saw this feature, it's is very cool! But what I am looking for is traefik-splitting for testing a new version/canary-builds internally e.g. based on some check (e.g. header, cookie,...). |
@JPM84 agreed, your use case would likely require some workarounds for now. |
Close by #5237 |
When using an orchestrator (like Marathon), we often want to "bulletproof" software releases by deploying a new version on a small set of instances.
Current workaround it to set
traefik.backend
to the same value inA
andB
versions.It works but it avoids being able to create frontend that targets a specific version.
What is possible:
What are you thinking about this?
The text was updated successfully, but these errors were encountered: