概览
本文是对基于Nginx的CDN网络的学习笔记,阅读的代码为:https://github.com/leandromoreira/cdn-up-and-running
其中,先确定CDN中的一些基础概念:
- Balancer:负载均衡,即请求数据的流量最开始打到Balancer,由负载均衡算法确定流量导到后续Edge节点,即缓存边缘节点
- Edge:边缘节点,即具有数据缓存,能够更快响应数据给回客户端的节点,在负载均衡和后端服务之间
- Backend:后端节点,即实际存储数据的节点
本文阅读学习的仓库,通过Nginx构建所有节点,用到了以下属性
- vhost_traffic_status:记录并存储每个节点的网络情况,包括处理状态码、处理时间
- proxy_cache:缓存交互处理,包括缓存路径、过期时间、中断处理、缓存键值存储区域(共享内存)
- nginx:使用nginx的基础功能,包括 server、location、proxy_pass、upstream 等
- openresty:配合lua引擎使用的nginx扩展,包括脚本增强、set_by_lua、access_by_lua、balancer_by_lua、content_by_lua 等能力
另外,还是用到 prometheus 作为监控各节点的工具,使用 grafana 作为时间序列数据的可视化工具
实现
Balancer
# vi:syntax=nginx
events {
worker_connections 1024;
}
error_log stderr;
http {
resolver 127.0.0.11 ipv6=off;
include generic_conf/setup_logging.conf;
include generic_conf/lua_path_setup.conf;
# 本节点的统计信息,请求时长、status状态等
include generic_conf/basic_vts_setup.conf;
# 缓存相关设置
include generic_conf/setup_cache.conf;
init_by_lua_block {
loadbalancer = require "loadbalancer"
loadbalancer.setup_server_list()
}
upstream backend {
server 0.0.0.1;
# 进行流量负载均衡,选定 edge 节点
balancer_by_lua_block {
loadbalancer.set_proper_server()
}
keepalive 60;
}
server {