目的:通过Bind view视图功能,将来源于不同运营商,不同地域的用户调度至最近的CDN节点,减少用户的响应时长,降低网站源站压力,提高用户体验;
技术栈:
lvs+keepalived:边缘cdn一般两台或多台,通过lvs+keepalived双主,两台同时工作,若其中一台服务器宕机,vip会自动漂移到另一台,实现高可用,并提供对nginx健康检查;
nginx:做反向代理,将用户请求代理到后端的trafficserver缓存服务,并提供限速、对后端trafficserver健康检查等功能;
trafficserver:缓存静态资源,若本地缓存无资源,则将根据配置回源至源站或一级cache节点;
bind:dns服务器,将用户请求的域名解析至离用户最近的节点;
客户加入cdn服务流程:(后续需要做到客户自助平台,用户自助申请,并提供带宽计费,日志查询,用户分布信息等功能)
1、我方提供cname给用户,用户在域名提供商dns除将需要加速的域名cname至我方提供的域名;
2、我方根据用户需求带宽等将cname配置调度策略;
3、我方需要将用户域名配置下发至cdn机房,并验证用户服务是否正常;
用户访问流程:
1、用户请求www.a.com域名,通过本地dns-->运营商dns-->根dns查询递归至.com的权威dns服务器,查询到a.com的权威dns;
2、通过a.com的权威dns查询到www.a.com被cname至我方的cname(a.b.com),而该域名解析权在我方dns服务器;
3、通过递归查询到b.com的权威dns服务器,可以查询到a.b.com的解析地址,在我方的dns服务器中会根据用户的递归dns服务器的IP地域运营商信息来匹配最优的A记录返回给用户;
4、浏览器取到解析的IP地址,并发起http请求;
5、用户请求到我方cdn服务器,nginx将用户请求转发到trafficserver,trafficserver查询缓存是否已存在是否过期,若新鲜则直接返回,若无或者过期,则去上一级缓存或者源站回源,并将其缓存下来,下个用户请求该资源则直接命中;
服务器配置管理:
1、用户通过自助平台申请并填写域名的相关参数,平台会自动下发到git仓库中;
2、管理员审核配置是否无误,审核后自动发布到配置集中管理平台,如puppet;
3、puppet中提前配置好灰度节点的主机名规则如test-t.hostname,边缘cdn节点test-t.hostname通过本地运行的puppet_agent自动向puppet中心服务器同步配置,其他节点不会同步该配置;
4、测试人员绑定主机测试域名是否正常加速,若测试通过,则修改puppet中心服务器分发至所有节点;