开源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如下:

version: "3"networks:goedge:external: falseservices:mysqld:image: mysql:8container_name: mysqldenvironment:- MYSQL_ROOT_PASSWORD=root- MYSQL_USER=edges- MYSQL_PASSWORD=edges- MYSQL_DATABASE=edgesnetworks:- goedgevolumes:- ./data/db/mysql:/var/lib/mysql:rwrestart: alwaysedge-admin:image: icodex/edge-admin:1.3.3container_name: edge-adminports:- 7788:7788/tcp- 8001:8001/tcpnetworks:- goedgevolumes:- ./data/edge-admin/configs:/usr/local/goedge/edge-admin/configs- ./data/edge-api/configs:/usr/local/goedge/edge-admin/edge-api/configsrestart: always

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

 docker-compose.yml:

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

3、配置admin

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

 

 

 

 

4、边缘节点管理

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

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

四、总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式-万能表达式

1、正则 正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找 出满足你想要的格式的句子. {“basketId”: 0, “count”: 1, “prodId”: #prodId#, “shopId”: 1, “skuId”: #skuId#} #prodId# re相关的文章: https://www.cnblogs.com/Simple-S…

javaWeb Router

一、路由简介 1、什么是路由? - 定义:路由就是根据不同的 URL 地址展示不同的内容或页面。 - 通俗理解:路由就像是一个地图,我们要去不同的地方,需要通过不同的路线进行导航。 2、路由的作用 - 单页应用程序…

【前端】使用 HTML、CSS 和 JavaScript 创建一个数字时钟和搜索功能的网页

文章目录 ⭐前言⭐一、项目结构⭐二、HTML 结构⭐三、CSS 样式⭐四、JavaScript 功能⭐五、运行效果⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈(,NET/Java/Python/C)、数…

聚焦应用常用功能,提升用户体验与分发效率

随着HarmonyOS应用的持续发展,应用的功能将越来越丰富,实际上80%的用户使用时长都会集中在20%的特性上,其余的功能可能也仅仅是面向部分用户。 用户在下载应用时,如果应用包含大量的功能和资源,可能会导致下载时间过长…

OCR 识别案例

OCR 识别案例 注意点:输入图像尺寸比例尽量和参与模型训练的数据集比例相似,识别效果会更好。 1、pytesseract Pytesseract是一个Python的光学字符识别(OCR)工具,它作为Tesseract OCR引擎的封装,允许你在…

IP大洗牌ipv6强势来袭!!!【ipv6配置及应用】

前言 随着时代的发展,IPv4(互联网协议第四版)已逐渐无法满足全球互联网爆炸式增长的需求。自20世纪80年代诞生以来,IPv4凭借其简洁的架构和约43亿的地址容量,支撑了互联网的早期扩张。然而,在移动互联网、物…

OpenAI 推出图像生成新突破:GPT-4o 实现图像编辑对话化

关键要点 OpenAI 推出了 4o 图像生成功能,集成于 GPT-4o,提供精准且逼真的图像生成。 它似乎适用于多种用户,包括免费用户,API 访问预计几周内推出。 安全措施包括 C2PA 元数据和内容屏蔽,限制生成不适当图像。 研究…

如何快速对比两个不同的excel文件中的单元格的数据是否完全相同 并把不同的单元格的背景颜色更改为红色?

要快速对比两个不同的Excel文件中的单元格数据是否完全相同,并将不同的单元格背景颜色更改为红色,可以使用Excel的以下几种方法: 方法一:使用条件格式 打开两个Excel文件。将一个文件的内容复制到另一个文件的新工作表中&#x…

口腔种植全流程AI导航系统及辅助诊疗与耗材智能化编程分析

一、系统架构与编程框架设计 口腔种植全流程人工智能导航系统的开发是一项高度复杂的多学科融合工程,其核心架构需在医学精准性、工程实时性与临床实用性之间实现平衡。系统设计以模块化分层架构为基础,结合高实时性数据流与多模态协同控制理念,覆盖从数据采集、智能决策到…

nginx配置页面缓存,前端每次打包生成新的js文件

前端需要处理的:使用时间戳作为文件名 // nuxt.config.js export default {build: {filenames: {app: ({ isDev }) > isDev ? [name].js : [name].${Date.now()}.js, // 生产环境用时间戳chunk: ({ isDev }) > isDev ? [name].js : [name].${Date.now()}.j…

4.Socket类、InetAddr类、Epoll类实现模块化

目录 1. InetAddr类 类定义 代码说明 类实现 2.Socket类 类定义 类实现 3. Epoll类 类定义 构造与析构函数 方法实现 类实现 4. 使用模块化设计 示例使用(main.cpp) 5. 运行程序 随着程序复杂度的增加,单一的面向过程的代码会变得难以理…

视频生成的测试时Scaling时刻!清华开源Video-T1,无需重新训练让性能飙升

来源 | 机器之心 视频作为包含大量时空信息和语义的媒介,对于 AI 理解、模拟现实世界至关重要。视频生成作为生成式 AI 的一个重要方向,其性能目前主要通过增大基础模型的参数量和预训练数据实现提升,更大的模型是更好表现的基础&#xff0c…

Go 语言标准库中time模块详细功能介绍与示例

以下是 Go 语言 time 模块的详细说明及示例,涵盖时间操作、定时器、时区处理等核心功能: 一、时间基础操作 1. 获取时间 // 当前本地时间 now : time.Now() fmt.Println(now) // 2023-08-04 15:30:45.123456 0800 CST// 构造指定时间 t : time.Date(20…

【强化学习】基于深度强化学习的微能源网能量管理与优化策略研究【Python】

目录 主要内容 程序要点 2.1 微能源网系统组成 2.2 强化学习及Q学习算法 部分代码 运行结果 下载链接 主要内容 该程序借助深度 Q 网络(DQN),学习预测负荷、风 / 光可再生能源功率输出及分时电价等环境信息,运用…

dom0-kernel: /thermal-zones/soc_max/cooling-maps/map0: could not find phandle 2

问题描述: 由于soc_max下某个节点找不到,到时dom0-kernel后面有很多有关thermal热管理之类报错 问题解决及其原因分析: 这是因为在Xen解析相关节点时,soc_max下的某个节点被跳过了,注释掉相关的cpu节点处理dom0就可以找…

关于计算机视觉中的插值小记

计算机视觉中的插值(Interpolation)讲解 插值(Interpolation)在计算机视觉中是一项基础操作,常用于图像缩放、旋转、去噪、图像重建等任务。其核心思想是在已知数据点之间进行推测,估计未知的像素值或特征…

计算机网络--传输层(1)

第五章 传输层 一、传输层基本功能 进程到进程的逻辑通信 套接字(Socket):IP地址:端口号 IP地址:标识主机(网络层功能)端口号:16位整数(0-65535),标识进程 熟…

指定 Python 3.12.6-slim 作为基础镜像

指定 Python 3.12.6-slim 作为基础镜像,意思就是: 👉 用官方的 Python 3.12.6(精简版)作为容器的起点,里面已经有 Python 3.12.6 预装好了,你不用自己装。 🔹 为什么用 -slim&…

【蓝桥杯】算法笔记1

1.暴力枚举 给定一个正整数n,请找出所有满足a + b = n的整数对(a, b),其中a和b都是正整数,且a ≤ b。 输入格式:一个正整数n (1 ≤ n ≤ 10⁶) 输出格式:所有符合条件的(a, b)对,每行一对,按a的升序排列。如果没有符合条件的对,输出"No solution"。 问题分…

专注自习室:番茄工作法实践

专注自习室:番茄工作法实践 我需要一个任务管理工具,但在网上找了很多都找不到合适的工具。市面上的大多数产品过于强调任务完成性,给我带来了很强的心理压力,这种压力最终反而降低了我的工作效率。于是我决定自己动手&#xff0…