熊熊出没 发表于 2025-4-19 05:09:43

开源CDN产品-GoEdge

一、背景

        上篇文章分析了一下CDN的根本原理以及利用代码实现了一个乞丐版的智能DNS调治器。从整个例子我们可以清楚相识到CDN原理,也就那么回事。
        但是,之前也讲过了,CDN产品融合的技能比较杂、也比较多。以是我就想着,万物皆有开源竞品。试着找找有没有现成的开源办理方案。比方Web服务器,我们要构建站点就有开源的Nginx。那我想做CDN的话,也会有对整套的开源办理方案吗?
        找了半天,发现能用的很少。我猜测原因大概是,因为CDN这种技能比较杂、涉及的技能面比较广,不像只单纯研究Web一样研究nginx。以是根本上没开发者去开发这么一套庞大而且涉及技能面很广,又险些没有人单独自己去摆设CDN的需求。 毕竟CDN的边缘节点铺设的麋集度、节点稳固性、带宽大小、算力大小等等,不是个人开发者或者普通企业去做的事情。
        只有专业的CDN厂商,才会耗费时间去铺设边缘节点,在各个都会大小机房架设节点,另有利用P2P技能、PCDN技能等等,才气为用户提供可靠的、快速的CDN服务,达到加快结果。
        不过我也找到了一款免费开源的类CDN办理方案,可以作为技能学习进行研究,比方整体架构、计划思路,给人一个直观上的感受。这个产品名称为GoEdge。
        官网: https://goedge.cloud/
    https://i-blog.csdnimg.cn/direct/0e92468eb275409c85c5fc117d001753.png
        从名称就能看出,利用Go语言进行重要的实现。
二、架构先容

1、CDN原理分析

        这里借鉴官网文档信息,让各人对CDN的原理再次进行一次影象加强。
https://i-blog.csdnimg.cn/direct/5da7ef33e58544ddb23d4d6256184326.png
从上图可以看到:

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

 2、GoCDN架构图

https://i-blog.csdnimg.cn/direct/eb99aa11e6f2435cb3ed7f00cd634b1a.png
        存在几个脚色的步伐:
        1、控制平面, 有背景管理, 可以针对节点管理、节点监控管理、缓存预热等等
        2、边缘节点,实际提供服务的节点,缓存了源站的相关静态数据
        3、API节点,为全局的服务提供一个收支口
三、docker摆设GoEdge

1、运行admin控制台

docker-compose.yml如下:
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:
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端口,初次进行安装:
https://i-blog.csdnimg.cn/direct/2e76a72e32594fcc8364b598d94fbe79.png
 https://i-blog.csdnimg.cn/direct/33ff8d662a7d41a68d94b277247fd576.png
 https://i-blog.csdnimg.cn/direct/cc0fd901b5924e15b753fc88ce038e85.png
 https://i-blog.csdnimg.cn/direct/c381ad00d8ef414f8082fc292bc2022d.png
https://i-blog.csdnimg.cn/direct/35869d5616f84dbba366d792bb4ed0e7.png
 https://i-blog.csdnimg.cn/direct/d28f0b38cb084b9cad5b9a341da9b5b7.png
4、边缘节点管理

        我们可以根据边缘节点,对这些边缘节点进行如克制、重启、查看日记、设置、监控等管理。还可以针对数据进行预热、设置绑定域名、回源站策略等等。
        除了CDN的本领,另有提供了WAF的相关功能。
四、总结

        CDN技能一般只有大厂或者自己就是做CDN的企业才会比较深入研究,以是针对此类开源产品相对较少,开发者不乐意耗费很大的精力去研究这种技能。 这种技能要得到市场强盛的支持,必要铺设足够多的边缘节点,同时还要保证这些节点的带宽富足、可用性高, 个人开发者没那么多精力和心思去做, 大部门人花点钱买CDN厂家提供的服务也花不了几个钱(静态加快的环境下),没须要去研究太深。
        CDN还涉及P2P分发、PCDN、WAF、DDOS、NAT内网穿透、流量清洗等等,太多东西了,开发者的精力有限,只能这么说.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 开源CDN产品-GoEdge