内核 - 流量劫持方案
熟悉Envoy的同学都清楚,Envoy是通过iptables的NAT表做流量拦截,可以在业务无感情况下将流量劫持进行Mesh化。
iptables方案很不幸会存在如下问题:
- 配置复杂、内核版本不统一;
- iptables规则过多导致性能问题,性能随着规则增加而线性增加;
- iptables一般需要root权限,iptables可管控性不好;
我们使用的LoopBack方案,需要进行LoopBack管理与分配,打通BNS与LoopBack的映射。有了系统层面拦截之后,应用的Mesh化可以做到无感,此方案极大的改善Mesh落地的便利性。
RPC - 流量劫持方案
hhvm主要使用Ral作为RPC框架,hhvm通过BNS请求Naming-agent获取服务治理策略以及IPList,RPC框架通过策略配置实现服务治理能力。
当BNS标记为以Mesh接入方式是,HHVM会把Timeout,Retry,Balance等服务治理能力托管到Mesh, 当前HHVM,GDP使用的是此方案进行RPC框架流量劫持。
RPC流量劫持流程:
- Envoy向naming-agent注册;
- naming agent 从envoy拉取实例信息;
- envoy向naming agent推送实例信息;
- naming agent从envoy拉取webfoot配置;
- 适配各种rpc框架的fallback机制实现;
通过内核流量劫持与RPC流量劫持,可以解决我们面临的一大挑战,为新技术平滑演进提供基础能力。