

- Rollout: Canary is gradual; blue-green is all-or-nothing.
- Risk/downtime: Canary minimizes risk to a subset of users; blue-green can be rolled back quickly but is riskier during the switch.
- Exposure: Canary limits exposure (so it can be hard to know how the full stack will behave under full load), while blue-green immediately exposes the whole user base to the new version.

app-svc Service via the app: frontend selector, while each deployment is distinguished by its version label.
Istio does not provide a standalone “mirror” resource; mirroring is configured in the VirtualService (with subsets defined in a DestinationRule). Here is an example VirtualService and DestinationRule that send all production traffic to subset v1 while mirroring it to subset v2:
- The
routeblock sends 100% of client requests to subsetv1. - The
mirrorblock instructs Envoy to send a copy of the request to subsetv2. mirrorPercentcontrols what fraction of requests are mirrored (100 means mirror every request; you can set a lower percentage to sample).
- Test new versions with real production traffic without affecting users.
- Detect bugs and performance issues early, under real-world conditions.
- Gain insights for debugging, benchmarking, and capacity planning.
- Safely validate behavior before switching traffic fully.

Mirrored requests are sent as copies by the sidecar proxy (Envoy). The proxy does not wait for the mirrored response — the client only receives the response from the primary (non-mirrored) route. Because mirrored traffic can still trigger side effects on the mirrored service, avoid mirroring requests that cause irreversible actions (e.g., charging payments) unless the mirrored service is prepared to handle such effects safely.