CDN

CDN

内容分发网络(Content Delivery Network,简称 CDN),将源内容同步到全国各边缘节点,配合精准的调度系统,将用户的请求分配至最适合他的节点,使用户可以以最快的速度取得他所需的内容,解决网络带宽小、用户访问量大、网点分布不均等问题,提高用户访问的响应速度。

工作原理

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

cdn 高速缓存器 varnish服务器

Varnish

Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进varnish 迅速发展起来

varnish 工作原理

用户通过浏览器访问http服务器,但是需要先经过http加速器varnish服务器,如果用户访问的内容在varnish的cache中,则直接从varnish服务器返回该访问内容,但是如果不再varnish的cache中,就先从后端的http服务器中取出用户需要访问的内容,并保存在varnish的cache中,以便下次的访问。

varnish的状态引擎(state engine)

说道varnish的状态引擎,不得不说vcl(Varnish Configuration Language:varnish配置缓存策略的工具)。它是基于域的一种简单的编程语言,支持算数运算、允许使用正则表达式、支持if语句等。使用vcl语言编写的缓存策略通常保存于.vcl文件中,其需要编译成二进制的格式后才能由varnish调用。

VCL用于让管理员定义缓存策略,而定义好的策略将由varnish的management进程分析、转换成C代码、编译成二进制程序并连接至child进程。varnish内部有几个所谓的状态(state),在这些状态上可以附加通过VCL定义的策略以完成相应的缓存处理机制,因此VCL也经常被称作“域专用”语言或状态引擎,“域专用”指的是有些数据仅出现于特定的状态中。

具体的状态的是通过定义内置函数来实现的,具体过程如下图:


varnish 服务器的搭建及配置

安装    varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm

服务所需要的两个包

配置文件位置
vim /etc/sysconfig/varnish

/etc/varnish/default.vcl

NFILES 最大打开文件数量    65535

受内核,系统控制

[root@foundation31 ~]# sysctl -a | grep file-max
fs.file-max = 371487

查看系统打开文件数量
[root@foundation31 ~]# ulimit -n
1024
limit的配置文件位置
/etc/security/limits.conf

限制文件登陆的在/etc/pam.d/lib/security/pam_limits.so
[root@foundation31 pam.d]#  cd /lib64/security/
[root@foundation31 security]# ll pam_limits.so
-rwxr-xr-x. 1 root root 19584 Aug  4  2015 pam_limits.so

修改varnish 的打开文件数量限制。
[root@server1 ~]# tail -n 1 /etc/security/limits.conf
varnish           -     nofile           65535

/etc/sysconfig/varnish


VARNISH_LISTEN_PORT=80       端口
#
# # Telnet admin interface listen address and port
VARNISH_MIN_THREADS=50   
#
# # The Maximum number of worker threads to start
VARNISH_MAX_THREADS=1000   最大连接数
#
# # Idle timeout for worker threads
VARNISH_THREAD_TIMEOUT=120   内容保存时间
#
# # Cache file location   缓存保存为文件模式保存
VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin
#
# # Cache file size: in bytes, optionally using k / M / G / T suffix,
# # or in percentage of available disk space using the % suffix.
VARNISH_STORAGE_SIZE=1G  保存的size 为1G
#
# # Backend storage specification   # 调用上面的命

VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"

更改 /etc/varnish/default.vcl 文件 重新启动服务


在132中创建index.html文件   

测试

查看缓存命中情况

更改配置文件/etc/varnish/default.vcl


在浏览器主机中添加解析

测试:第一次没命中 去varnish132 上和133 上找找到后换存起来,再次访问www.westos.org直接返回客户端

四 负载均衡: 定义多个不同域名站点的后端服务器

更改配置文件 /etc/varnish/default.vcl

/etc/init.d/varnish reload


测试

轮询:

编辑配置文件 /etc/varnish/default.vcl

    /etc/init.d/varnish reload


测试 :


通过Varnish 手动清除缓存

varnishadm ban.url .*$    清除所有
varnishadm ban.url /index.html    清除 index.html 页面缓存

varnishadm ban.url /admin/$     清除 admin 目录缓存


varnish cdn  推送平台

需要用到的    bansys.zip 包 解压

bansys 有两种工作模式,分别是:telnet 和 http 模式。
telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。

如果是 http 模式需要对 varnish 做以下设置:

更改 php文件


测试


08-02
CDN的全称是Content Delivery Network,即内容分发网络。它是一种通过互联网互相连接的电脑网络系统,旨在提供高性能、可扩展性以及低成本的内容传递服务给最终用户[^5]。这种网络架构通过部署在各地的边缘服务器实现内容的高效分发,使得用户能够从地理位置上更接近自己的服务器获取信息,从而减少了数据传输的时间[^2]。 关于CDN的工作原理,它是构建在网络之上的内容分发网络,依赖于中心平台的负载均衡、内容分发和调度等功能模块。当用户请求一个网站的内容时,如果没有使用CDN,用户的请求会直接到达网站的源服务器。而如果启用了CDN服务,用户的请求首先会被导向到CDN的边缘服务器,这些服务器通常位于离用户较近的位置。CDN通过这种方式确保用户可以就近获取所需内容,进而降低网络拥塞,提高用户访问响应速度和命中率[^2]。 为了更好地理解CDN的工作机制,我们可以参考其关键组成部分:调度系统、链路质量系统、缓存系统和支持系统。其中,调度系统负责决定哪个边缘服务器最适合处理特定用户的请求;链路质量系统监控不同路径上的网络状况以优化路由选择;缓存系统则存储热门内容以便快速响应用户请求;支持系统为整个CDN运行提供必要的基础设施和服务[^3]。 使用CDN的好处包括但不限于提升网站加载速度、增强用户体验、减轻源服务器的压力以及增加网站的安全性和稳定性。尽管如此,并不是所有类型的网站都必须使用CDN。例如,对于那些流量不大或者对加载速度要求不高的网站来说,可能不需要配置CDN服务。但对于游戏、电商、直播等行业的网站,或是希望改善网站性能的新建站点,建议采用CDN加速来保证良好的用户体验和业务连续性[^4]。 ```python # 示例代码:模拟简单的CDN节点选择逻辑 def select_cdn_node(user_location, nodes): """ 根据用户位置选择最近的CDN节点。 :param user_location: 用户所在的位置信息 :param nodes: 可用的CDN节点列表及其位置信息 :return: 最合适的CDN节点 """ # 简单的距离计算函数,实际应用中可能涉及更复杂的算法 def distance(loc1, loc2): # 这里仅作为示例,实际距离计算应基于地理坐标 return abs(loc1 - loc2) closest_node = min(nodes, key=lambda node: distance(user_location, node['location'])) return closest_node # 假设的CDN节点分布 cdn_nodes = [ {'name': 'Node A', 'location': 10}, {'name': 'Node B', 'location': 25}, {'name': 'Node C', 'location': 40} ] # 用户的位置 user_pos = 22 # 选择最近的CDN节点 selected_node = select_cdn_node(user_pos, cdn_nodes) print(f"Selected CDN Node: {selected_node['name']}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值