# 多层网络

OpenResty Edge 可以用于构建和管理大规模的网关集群, 默认情况下,Edge 网关节点是直接跟源站通信的, 我们也提供「多层网络」功能,可以很方便的利用现有的 Edge 网关组建一个树状的回源网络。

如何使用多层网络呢,首先我们需要创建多层网络的回源策略, 在「全局配置」=>「多层网络」里,我们可以看到所有的策略的列表,在这里我们先点击新建策略

每个多层网络回源策略,都需要一个唯一的名字,这样用于方便区分使用, 比如这里我们输入 source in China,表示这个策略适合源站是在中国境内的场景。 然后是网关集群网络拓扑,源站在左边,往后右这一列是所有网关集群的名字, 对的,多层网络的回源拓扑是以网关集群为单位的,一般来说一个网关集群就对应一个 IDC 机房, 初始情况下所有网关集群是直接回源站的。

我们可以拖动网关集群来修改网络拓扑,比如把「Tokyo」拖到 「HongKong」上方, 「Tokyo」就会挪到 「HongKong」的后面, 意味着这个策略下 「Tokyo」的回源请求会先发到「HongKong」,再由「HongKong」回真实的源站。

我们还可以拖动「Tokyo」上的「备份」到「Beijing」上方,「Tokyo」的备份就会连线到「Beijing」, 当「Tokyo」到「HongKong」的连接失败,「Tokyo」会用再次尝试发送回源请求到「Beijing」, 如果再次失败的话,「Tokyo」还会尝试直接请求真实的源站。 如果没有配置备份的话,也会尝试直接请求真实的源站。

同理我们也可以把「NewYork」配置为经过「HongKong」回源。

点击保存后回到策略列表页,我们也可以点策略的名字继续修改策略内容。

有了多层网络策略之后,我们就可以在应用内的 反向代理规则 中选择使用的多层网络策略了。 如上面例子所示,如果一个请求达到 「NewYork」的网关节点之后,会先通过「HongKong」中转再回到「Source」源站, 如果一个请求达到「Beijing」网关节点,则会直接回「Source」源站。

另外,不同的应用可以使用同一个多层网络策略,同一个应用的不同规则也可以使用不同的网络策略。

使用「多层网络」可以有这样的好处:

  • 改善 Edge 网关节点到源站的连通性

比如我们用 OpenResty Edge 构建一个全球 CDN 网络对最终用户提供就近访问, 但是源站只有一个,那么边缘的 Edge 网关节点跟源站可能隔着很复杂的网络情况, 比如上述示例中的「NewYork」到源站的网络可能会不够稳定,我们让「NewYork」先回「HongKong」,再由「HongKong」回源站, 当然,我们是假定「NewYork」到「HongKong」的网络会好过一般的线路, 比如通常情况下同一个云主机厂商的不同机房之间线路会有专门的维护,可以认为好过一般的线路

  • 提高 Edge 的整体缓存命中率

如果我们同时开启了缓存,那么回源的请求在经过中间节点的时候,也是可以缓存的, 比如上述示例中的「NewYork」到「HongKong」的回源请求,是可以利用「HongKong」上的缓存资源的, 并且如果「HongKong」也有直接服务终端用户的话,来自终端用户和「NewYork」的请求缓存是通用的。

  • 减少 WAF 的计算资源消耗

WAF 是个重 CPU 计算消耗的过程,如果同时开启了缓存和WAF, 在多层网络的模式下,我们会把 WAF 的匹配检查过程安排到多层网络的最后一层来执行, 这样可以充分利用边缘的缓存来减少 WAF 的执行次数,从而减少整体的 CPU 计算资源消耗。