背景:由于业务需要,需要将大量静态资源进行分开。如果单纯使用IDC或云服务器进行分发,会占用大量带宽;如果使用CDN+OSS,则会存在大量的OSS外网带宽和请求费用。因此我把目标投向了机房运营的中小型VPS服务商,利用他们的带宽资源,加上本地的存储和家宽进行相关业务操作。这样操作,家宽不需要有公网IP,也不会有私设web服务的风险。而VPS服务商那边根据对方要求来,有些需要进行域名接入,有些则是直接域名过白即可。
  从目前经历的业务来看,相关静态资源分发分成两部分:(1)网站及APP依赖的渲染资源和图片资源分发;(2)文件资源分发。这两种属于不同的业务类型,因此需要不同的方式进行解决。后续文中提到多终端同步方式,由于实现的方式较多,文中不进行相关介绍。
  基础条件:至少两个分属不同物理地点的本地服务器(物理上可以是PC机甚至是ARM设备,分属不同地点是为了防止单点故障);本地服务器所在上行带宽大于30Mbps。

一、实时性要求较高的场景
  原理:将本地的静态资源站的HTTP端口通过frp映射到机房运营的VPS上,然后在CDN中将相关地址设置为源站进行分发。

  1、在本地服务器上,执行以下frp操作,将本地资源站的HTTP站点映射到VPS上:

[common]
server_addr = 1.1.1.1 //直接通过刚才过来的端口回去
server_port = 55555
token = 123456      //token按公司要求设置

//映射HTTP配置
[xxx1]
type = http
local_ip = 10.99.0.251
local_port = 80
custom_domains = xxx.xxx.xxx   //此处填入域名
group = http  //此处及下一行填入负载均衡的组名及组密码
group_key = http  
use_encryption = true
use_compression = true

  2、在CDN上填入相关参数,建议开启HTTPS,完成相关操作。

二、实时性要求不高的场景
  原理:HTTP部分将本地的静态资源站的HTTP端口通过frp映射到不同机房运营的VPS上,HTTPS部分是先将HTTP映射,然后在VPS上进行聚合。完成frp相关操作后,为了防止出现点位宕机造成无法访问的情况,本次采用shell脚本监控,如果出现问题将通过各个dns解析商的CLI进行域名解析调整,剔除故障节点。如果故障解除,需要人工复核加入。

  1、在本地服务器上,执行以下frp操作,将本地资源站的HTTP站点映射到VPS上:

[common]
server_addr = 1.1.1.1 //直接通过刚才过来的端口回去
server_port = 55555
token = 123456      //token按公司要求设置

//映射HTTP配置
[xxx1]
type = http
local_ip = 10.99.0.251
local_port = 80
custom_domains = xxx.xxx.xxx   //此处填入域名
group = http  //此处及下一行填入负载均衡的组名及组密码
group_key = http  
use_encryption = true
use_compression = true

  2、https聚合,如果没有https,则不需要执行相关操作:

[common]
server_addr = 127.0.0.1 //直接通过刚才过来的端口回去
server_port = 55555
token = 123456      //token按公司要求设置

[xxx_htts2http]
type = https
custom_domains = xxx.xxx.xxx
plugin = https2http
plugin_local_addr = 127.0.0.1:80
plugin_crt_path = /etc/test/ssl/xxx.pem
plugin_key_path = /etc/test/ssl/xxx.top.key

  3、将各地的IP填入DNS解析,如果有必要建议开启分区域解析。然后做好监控,有异常直接使用CLI完成解析调整。