megaease/easemesh

Support EaseMesh for Canary deployment

benja-wu opened this issue · 1 comments

Background

  1. According to EaseMesh product requirement[1], one of EaseMesh's main traffic scheduling abilities is canary deployment.

Proposal

Canary Labels

Traffic

  • Traffic in mesh is split into two kinds, the normal traffic and colored traffic.
  • The colored traffic is recognized by carried with Mesh Service's canary rule's specified HTTP headers.

Service instances

  • Mesh service instances are also split into two kinds, the normal instances and canary instances.
  • The canary instances are recognized by no empty instance register records' Labels fields.

Control plane

  • Already support canary rules spec CRUD operations.

Data plane

EG-sidecar

  1. Support registering service instances with provided service instances labels by the Operator.
  2. Support creating a pipeline with a canary pool inside backend filter for handling colored traffic.
  3. Store global service's traffic HTTP header keys, and push it to the EaseAgent (with JMX over HTTP) every minutes with the version.

EaseAgent

  1. Accept global service's traffic HTTP header keys, and inject them into RPC headers if exists.

References

  1. mesh requirements https://docs.google.com/document/d/19EiR-tyNJS75aotvLqYWjsYK7VqyjO7DCKrYjktfg-A/edit#

Already merged into branch with 89a35a6113fa8b9eda0c22f32b076ba7fee0c183