开源CDN产品-GoEdge

一、背景

上篇文章分析了一下CDN的基本原理以及使用代码实现了一个乞丐版的智能DNS调度器。从整个例子我们可以清晰了解到CDN原理,也就那么回事。

但是,之前也讲过了,CDN产品融合的技术比较杂、也比较多。所以我就想着,万物皆有开源竞品。试着找找有没有现成的开源解决方案。例如Web服务器,我们要构建站点就有开源的Nginx。那我想做CDN的话,也会有对整套的开源解决方案吗?

找了半天,发现能用的很少。我猜测原因可能是,因为CDN这种技术比较杂、涉及的技术面比较广,不像只单纯研究Web一样研究nginx。所以基本上没开发者去开发这么一套庞大并且涉及技术面很广,又几乎没有人单独自己去部署CDN的需求。 毕竟CDN的边缘节点铺设的密集度、节点稳定性、带宽大小、算力大小等等,不是个人开发者或者普通企业去做的事情。

只有专业的CDN厂商,才会花费时间去铺设边缘节点,在各个城市大小机房架设节点,还有利用P2P技术、PCDN技术等等,才能为用户提供可靠的、快速的CDN服务,达到加速效果。

不过我也找到了一款免费开源的类CDN解决方案,可以作为技术学习进行研究,例如整体架构、设计思路,给人一个直观上的感受。这个产品名称为GoEdge

官网: https://goedge.cloud/

从名称就能看出,使用Go语言进行主要的实现。

二、架构介绍

1、CDN原理分析

这里借鉴官网文档信息,让大家对CDN的原理再次进行一次记忆加强。

从上图可以看到:

  1. 不同区域或者不同网络的用户,可以通过DNS服务被分配到不同的边缘节点上;
  2. 边缘节点如果已经缓存内容,可以就近直接向用户发送内容;如果还没有缓存内容,则一级一级网上找,直至去源站(即内容提供原始的站点)去获取内容,然后再一级一级返回,直至发送给用户;
  3. 由于边缘节点可以缓存内容,所以可以有以下几个优点:
    1. 降低了网络延时,加速了内容的分发,因为用户可以就近获取内容,就无需跨多个网络千里迢迢访问最原始的服务器;
    2. 大幅降低源站压力,通过边缘节点的分担,源站通常可以减少绝大部分访问;
    3. 增加数据传输的可靠性,因为每个边缘节点都可以独立发送内容,即使源站服务器宕机,也不会影响内容的访问;
    4. 增强了源站的安全性,当遭遇大规模类似于DDOS的攻击时,可以通过边缘节点有效减少到源站的流量,也可以在边缘节点增加防御规则(比如WAF),让攻击的流量无法到达源站,从而提升了源站的安全性。

2、GoCDN架构图

存在几个角色的程序:

1、控制平面, 有后台管理, 可以针对节点管理、节点监控管理、缓存预热等等

2、边缘节点,实际提供服务的节点,缓存了源站的相关静态数据

3、API节点,为全局的服务提供一个出入口

三、docker部署GoEdge

1、运行admin控制台

docker-compose.yml如下:

html 复制代码
version: "3"

networks:
  goedge:
    external: false

services:
  mysqld:
    image: mysql:8
    container_name: mysqld
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=edges
      - MYSQL_PASSWORD=edges
      - MYSQL_DATABASE=edges
    networks:
      - goedge
    volumes:
      - ./data/db/mysql:/var/lib/mysql:rw
    restart: always

  edge-admin:
    image: icodex/edge-admin:1.3.3
    container_name: edge-admin
    ports:
      - 7788:7788/tcp
      - 8001:8001/tcp
    networks:
      - goedge
    volumes:
      - ./data/edge-admin/configs:/usr/local/goedge/edge-admin/configs
      - ./data/edge-api/configs:/usr/local/goedge/edge-admin/edge-api/configs
    restart: always

2、安装节点注册到admin控制台

docker-compose.yml:

html 复制代码
version: "3"

services:
  edge-node:
    image: icodex/edge-node:1.3.3
    container_name: edge-node
    environment:
      - ENDPOINTS=http://xxx.com:8001     #admin所在信息
      - CLUSTERID=xxx              #登录控制台后,查看集群节点信息
      - SECRET=xxx                #登录控制台后,查看集群节点信息
    network_mode: host
    volumes:
      - ./data/edge-node/cache:/opt/cache
      - ./data/edge-node/configs:/usr/local/goedge/edge-node/configs
    restart: always

3、配置admin

进入admin的7788端口,首次进行安装:

4、边缘节点管理

我们可以根据边缘节点,对这些边缘节点进行如停止、重启、查看日志、配置、监控等管理。还可以针对数据进行预热、配置绑定域名、回源站策略等等。

除了CDN的能力,还有提供了WAF的相关功能。

四、总结

CDN技术一般只有大厂或者本身就是做CDN的企业才会比较深入研究,所以针对此类开源产品相对较少,开发者不愿意花费很大的精力去研究这种技术。 这种技术要得到市场强大的支持,需要铺设足够多的边缘节点,同时还要保证这些节点的带宽充足、可用性高, 个人开发者没那么多精力和心思去做, 大部分人花点钱买CDN厂家提供的服务也花不了几个钱(静态加速的情况下),没必要去研究太深。

CDN还涉及P2P分发、PCDN、WAF、DDOS、NAT内网穿透、流量清洗等等,太多东西了,开发者的精力有限,只能这么说.

相关推荐
Patrick_Wilson10 天前
从一次 Safari 白屏,聊聊 CDN 外置 React 的坑与前端监控盲区
前端·react.js·cdn
姚不倒12 天前
从 A 记录到 CDN 切换:我的 DNS 认知跃迁之路
运维·cdn·dns
字节跳动视频云技术团队16 天前
AI Agent 会自己选 CDN 了:当网站访问者从 “人” 扩展到 “AI”,内容分发已升级
人工智能·cdn
Linsk16 天前
2026年了,请停止相信“公共 CDN 能提升性能”
前端·jquery·cdn
锐速网络1 个月前
游戏加速、DNS加速、CDN网络加速三者选型指南
cdn·网络优化·网络运维·游戏加速·dns加速·运维选型·长连接加速
锐速网络1 个月前
CDN视频加速集群部署与性能调优
cdn·网络优化·视频加速·流媒体加速·直播cdn·cdn集群部署·锐速安全
mCell2 个月前
别急着骂运营商,你家路由器里可能藏着一台 PCDN 盒子
前端·http·cdn
云安全干货局2 个月前
怎么选择靠谱的CDN服务品牌?主流品牌性能对比及加速效果解析
cdn·安全加速·云加速·业务加速·edge scdn
SEO_juper2 个月前
CDN 地域节点优化:匹配 GEO 信号,提升加载速度
服务器·ai·php·seo·cdn·geo·谷歌优化
Love Song残响2 个月前
PowerSetting下载慢?CDN加速 + 离线包分发综合优化方案
cdn