下面看下SCF网络架构是如何支持函数访问VPC的。简单的说就是我们在SCF集群与客户VPC之间添加了一层Proxy代理集群。每个vpc/subnet建立一对主备proxy。主备proxy使用havip进行容灾切换。havip是一个浮动的内网 IP,支持机器通过 ARP 宣告进行绑定,更新 IP 和 MAC 地址的映射关系。
在高可用部署场景下,该 IP 可从主服务器切换至备服务器,从而完成业务容灾。在主备proxy之间可以实现秒级切换,且切换前后TCP连接保持不断。
当客户的函数需要访问VPC时,首先会通过ipip把流量转发到proxy上,proxy解出ipip的内层报文后,在snat成出口的HAVIP,然后转发到客户的VPC中,客户VPC的回包同样沿着相同的路径反向路由到运行函数的容器中。另外我们会依据客户的访问流量对proxy进行自动扩缩容,当流量提升时自动扩容一对主备proxy,当流量下降时,自动对多对主备proxy进行缩容。
在传统架构下,VPC函数冷启动时可能需要创建弹性网卡而增加几秒的冷启动耗时,在SCF新架构下仅需创建函数时,在proxy侧建立客户vpc的弹性网卡,函数调用时运行函数的容器或者node不在需要弹性网卡,仅需配置隧道参数。耗时仅仅几毫秒,因此函数冷启动时,VPC网络的配置时间从秒级下降到毫秒级。同时该方案避免了运行函数时因为客户子网ip资源耗尽而导致的函数运行失败。