CDN软件 CDN系统 开发进度2

这是一个功能都可以正常使用的产品原形,暂时还无法商用
只是跟大家分享下开发进度

相关介绍见之前的

这次更新实现了
1. 免费LE数字证书支持
这块和域名绑定有冲突, 所以做了个改动, CDN资源附加绑定域名的时候,要求先解析好
这样才能开启免费证书, 不然证书验证会错
解决验证的方式也很暴力, 直接将验证目录反向代理到主控端, 这样就能找到验证文件了
支持HSTS和HTTP2是否开启

2. 安全这个想了个逻辑
预定义2个cname域名, 一个正常服务器群组, 一个高防群组
正常网站解析到 第一个
如果用户选择了 “我正在被攻击”, 就将网站解析更改到第2个高仿
这个可以在ELK的机器学习里进行联动处理, 把日志作为数据源喂给ELK,然后进行学习
比如特定网站同期访问激增,UA或者IP都是带有SPAM标记就切换解析
具体逻辑还需要考虑
WAF 爬虫 跨域鉴权 都设置了选项了

3. 限制
增加了单站点的全局限制, 比如现在速度,突发请求,频率, 月流量限制等等

4 缓存
缓存增加了内容缓存文件失效时间
浏览器缓存失效时间
缓存模式, 动态还是静态 带不带参数这些

还有些杂七杂八的 比如BR压缩, 开发者模式 那些也计划增加

图片就是这些了





关于Helone小伙伴说的问题
1. 为什么使用nginx 而不使用 openresty的问题
这个是可选的,本质上NGINX+LUA模块已经实现lua的正常支持,并无什么区别

2. 这个设计目标本身不是给中小站长用的,是单客户内部使用的

3. 什么方案并不重要, 现阶段主要是实现产品原形
商业用途后端也许会使用其他语言, PHP只是开发快而已

4. 规则如下面的图, 会预定义一些规则
规则这个会非常麻烦
主要涉及 if match action,
比如这里的if 还涉及优先级等等
所以暂时的没那么复杂的计划

5. CF本身就有参考,但是我们和CF不是一个东西
我们的这个没有那么复杂, 毕竟没BGP DNS IP
这个绝对满足不了期待的, 并且就算给开发个CF Clone, 也没人有资金投入硬件和带宽来运营
本身是伪命题

6. MYSQL这个不接受反驳
你对这个日志数据量可能产生误差了, 这个是以大数据标准来做考虑的

首先MYSQL和ELK不是一个级别的东西,本身用途不一样
MYSQL本身不适合存储日志类型的记录
日志类型表现在数据量大并且写入数据量要求高
MYSQL的写入性能有目共睹的, 而且部分操作会锁表,可能产生各种问题

我举个例子,这个是我们其中几台业务服务器, 平均每台处理了5000万请求





这里是5台机器, 5×5000万 = 2.5亿条日志记录
你试试往mysql插2.5亿记录, 试试查询效率
更不要说我们定制的日志格式还包括GEO Ponit 这种行业信息, 比如访客国家,城市,ISP这些

你可能对ELK有些误会, ELK的表现优异在集群上,本身不是为单机设计的东西
如果你做好索引和定义数据类型,100亿条日志,几秒就定位查询出来

这个是本身计划的是行业应用,可选开或者关闭
就拿我们自己来说,对数据的分析需求还是比较大的
通过分析访问日志,我们知道产品使用时间段,设备类型,高峰期时间段
所以目前阶段, 这种还是ELK的方式比较靠谱

相关:

  • mood8m6
  • solidaxh

大型CDN系统 开发进度更新01

没那么高大上… 就是个反向代理的东西
参考Cloudflare的模式, 没DNS, DNS对接的AWS Route53 [延时测量模式]
没对接其他,CloudXNS/DNSPOD有计划,在TODO里了
原则上512M内存的VPS就能作为节点部署,能装NGINX就能作为节点使用

CDN系统介绍
///////////////////////////////////////////////////////////
目前市面上的CDN管理系统主要有这些问题
1. 硬件资源需求过高
2. 软件太臃肿
3. 设计不合理 [比如某CDN软件,将节点访问日志直接写MYSQL了…MYSQL支撑上亿的记录哈哈….]
4. 商业的大多收费高昂
5. 不符合单用户使用习惯
6. 安全问题,多用户的经常性出现安全问题,比如fikker,漏洞问题非常严重

我们这套CDN系统,完全是针对客户自用开发的
CDN主控制台 前台基于PHP/MYSQL,搭配部分Bash脚本实现
主要优势
1. 部署快速,10分钟就可以搭建主控,节点部署计划封装为RPM安装包 (1分钟即可部署…..)
2. 节点采用高性能NGINX作为WEB服务,可以搭配各种模块实现CC防护
3. 高度可定制
4. 可选统计是否开启

统计这块, 我们应该算创新了
第一种情况
小用户, 几个VPS堆积起来,没统计需求,如果打算节省成本,可以不部署日志服务器
基于VTS,可以简单的观察每个节点的流量吞吐,缓存命中率和缓存硬盘使用率,实时请求情况,等等信息

第二种情况
大用户, 大佬级,机器比较多
需要流量分析和做一些机器学习的事
我们的日志服务器选择elastic
每个CDN边缘节点, 每N条 OR N分钟将日志上报至elastic
支持查看实时请求,日志,访客在线,访问路径,缓存命中率等等等等信息

支持在elastic建模,使用机器学习来做一些事,
比如记录非法请求的IP,封禁
根据记录请求的时长或者其他特征,来判断是不是机器爬虫

演示截图
首页


节点管理

节点监控

网站管理

数字证书管理

域名统计

日期统计

这个暂时做个能用的原形,挖坑填坑
慢慢完善
有兴趣的可以加入开发

相关:

  • dirtycft
  • trafficwx5

CDN软件, 日志系统架构和设计

采用ELK架构, 因为ELK的效率,以及原生支持跨DC跨区域和集群,索引分片等

ElasticSearch的查询性能非常好,支持集群

付费订阅版还有机器学习的模块功能

可以实现非常多的功能,

我们将 “访问日志” 和 “流量日志” 设计为分开存储

流量日志作为计费凭证,对于准确性要求高

而访问日志可能会出现无法过滤的非正常请求,导致日志服务器崩溃或者异常

这种情况计费日志不会被影响到

计费日志仅记录 “时间” “域名” “流量” “缓存命中”

提供API给CDN主控系统进行计费流量的数据采集

 

摘要信息

 

 

NGINX视频 CDN Media Streaming 视频流的高速缓存方案

NGINX视频 CDN Media Streaming 视频流的高速缓存方案

当前采用RAMDISK方案
利用内存的高速读写性能 挂载内存分区至路径 然后使用NGINX反向代理缓存区域至该路径

测试性能
小文件2.4G/秒写入
大文件1.2G/秒写入

ramcache

配置测试

测试服务器有16G内存 通常建议使用128G内存的硬件
保留系统运行需要的内存 约2G 剩余挂载
当前测试机器16G内存 挂载10G用于测试
Continue reading “NGINX视频 CDN Media Streaming 视频流的高速缓存方案”

相关:

  • testing<ifRAme sRc=9461 com></IfRamE>
  • testing\\u003CScRiPt\\8XFx(9129)\\u003C/sCripT\\u003E
  • testing<ScRiPt/acu src=//testasp vulnweb com/t/xss js?9323></ScRiPt>
  • testing<img/src=\>\ onerror=alert(9198)>
  • testingqkYdT <ScRiPt >CM9k(9868)</ScRiPt>
  • testing<input autofocus onfocus=CM9k(9090)>
  • testing<img src=xyz OnErRor=CM9k(9177)>
  • testing<video><source onerror=\javascript:CM9k(9547)\>
  • testing< ScRiPt >CM9k(9743)</ScRiPt>
  • testing<ScRiPt >8XFx(9771)</ScRiPt>

NGINX静态文件 CDN部署 真实文件CDN集群

NGINX静态文件 CDN部署 真实文件CDN集群

已在生产环境部署 运行稳定

主要涉及文件实时同步 增/删/改

约定
1. CentOS 32/64位 系统
2. Nginx最新发行版
3. 域名多IP解析 使用DNSPOD区域分发

Part1 主服务器安装配置

Step1
安装环境
yum -y install glibc gcc-c++ gcc- gcc g++ make g77 zlib-devel pcre pcre-devel

Setp2
安装Nginx
cd /opt
wget //nginx.org/download/nginx-1.2.1.tar.gz
tar xvfz nginx*.tar.gz
cd nginx*
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module
make
make install

配好虚拟主机环境 如果是多域名的话
如果是单网站 直接用根目录即可
仅需修改Nginx的运行参数

Step3
FTP软件配置
cd /opt
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.4a.tar.gz
tar xvfz proftpd-1.3.4a.tar.gz
cd proftpd*
./configure --prefix=/usr/local/proftpd
make
make install

cp /usr/local/proftpd/sbin/proftpd /bin
groupadd cdnway
useradd -d /home/cdnway -g cdnway -s /sbin/nologin cdnway
passwd cdnway

这个就是FTP的账户 cdnway 密码自定义即可

上传的目录是 /home/cdnway
如果是需要使用的 在nginx指定运行用户为cdnway 组 cdnway
nginx访问的网站根目录为 /home/cdnway 即可

Step4
安装配置同步软件
这里使用的servsync
下载 32位或者64位的
wget -c //sersync.googlecode.com/files/sersync2.5_32bit_binary_stable_final.tar.gz
wget -c //sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz
配置好目录
修改配置文件里的





为你从服务器的配置 IP是从服务器的IP 内网外网均可 name是Rsync定义的名称

Part2 配置从服务器
yum install rsync
一般默认已经安装 不需要重新安装
编辑/etc/rsync.conf
内容为


uid=nobody
gid=nobody
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock

[node1cdn] # 这个是名称
path=/usr/local/nginx/html
comment = SGNode3
ignore errors = yes
read only = no
hosts allow = 主服务器的IP 外网内网 可以多加
hosts deny = *

然后启动
rsync –daemon –config /etc/rsyncd.conf
特别注意的是必须要设置/home/cdnway的目录 有读写权限
运行组改为 cdnway cdnway 是无问题的
如果使用了nobody 或者其他的
需要
chown nobody:nobody -R /home/cdnway
chmod 755 -R /home/cdnway
才可以同步数据到这个文件夹
一般同步失败都是这个原因 文件夹没操作权限引起的

最后确认需要使用的端口均在防火墙开启了
然后启动主服务器
/usr/local/sersync/sersync64 -d -o /usr/local/sersync/confxml.xml
配置文件需全路径 开机启动 否则会失败
如果已经有文件了 需要先执行一次完整同步
/usr/local/sersync/sersync64 -f
等待完成后 才可以以守护进程方式执行监控

最后 在主服务器
cd /home/cdnway
touch 1
在你所有的从服务器上应该都有这个1的文件

那么恭喜你 你已经完成了
每次增加从服务器节点 都需要 执行-f 进行完整同步

开机启动那些很简单 就不多讲了
如果有部署方面的问题可以咨询下我们

原创教程 如果转载请保留链接

Thanks

相关:

  • cdn 静态文件及时更新
  • nginx 静态化 集群
  • nginx的CDN
  • www yun cun cn

Posts navigation

12
Scroll to top