用linux文件系统的链接功能实现文件缓存LRU

概述:

       目前,随着家庭宽带网络、无线宽带技术,以及终端设备性能的不断发展,基于多媒体的应用越来越广泛,特别是互联网视频的应用更是成为推动这些技术发展的源动力。作为互联网视频VOD的应用,提高视频播放的流畅度是一个非常重要的指标之一。除了编解码技术,视频CDN技术是解决用户视频播放流畅度的首要环节,而CDN技术中除了智能调度技术,边缘服务器的性能优化也是非常重要的环节之一。本方法就是着眼于边缘服务器的性能优化,以有限的边缘服务器磁盘存储空间为前提,利用LRU方法实现对视频Cache对象的动态管理,从而充分利用有限的磁盘空间,提升用户服务体验,满足未来长期运营的需要。

实现方法:

       本方法所要解决的技术问题是对于以文件为缓存对象的缓存服务器,如何来实现一个LRU的缓存管理算法。本人用本文描述的方法基于nginx,实现了CDN大容量缓存服务功能。

      有人会问,nginx本身不是提供了cache功能吗?是的,nginx本身确实有cache能力,但是它有它的问题,比如:文件的索引都是在内存中的,启动的时候需要通过遍历目录树的方式将文件的索引加载到内存,对内存的要求就比较高,启动初始化的过程比较长。本方法正好克服了这个缺点,服务器的内存使用不会随着缓存内容的增加而增加。

      本方法所实现的技术方案是,利用Linux系统(或者类Unix系统)所提供的文件链接的功能,对被缓存的文件对象采用硬链接来记录文件的被访问时间,用软链接来指向最近被访问的Cache对象的硬链接版本,并通过按时间顺序批量淘汰的方式来实现LRU的功能。

以下对本方法的具体实现方式进行说明。

首先,先说明一下Cache对象在磁盘上的存储方式。

  1. Cache对象是以文件的方式存储到磁盘上的。每个Cache对象会对应一个URL,这个URL是用户访问的路径,将URL的相对路径部分(除了http://domain部分)进行HASH,映射成磁盘中的存储路径。譬如,对于URL为 http://vod.test.com/movie/file/path/name.ts的Cache对象,我们用/movie/file/path/name.ts部分进行MD5 hash,计算得到MD5值是8f595e5b69f

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

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

相关文章

编程笔记 html5cssjs 077 Javascript 关键字

编程笔记 html5&css&js 077 Javascript 关键字 一、关键字二、Javascript关键字注意 在计算机编程语言中,关键字(Keyword)是指那些被编程语言赋予特殊含义、具有预定义用途的保留字。这些词汇不能用作变量名、函数名或其他标识符&…

红队渗透靶机:LORD OF THE ROOT: 1.0.1

目录 信息收集 1、arp 2、nmap 3、knock 4、nikto 目录探测 1、gobuster 2、dirsearch WEB sqlmap 爆库 爆表 爆列 爆字段 hydra爆破 ssh登录 提权 信息收集 内核提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, ty…

参考数据集INRIA Holidays dataset

Download datasets 很贴心,MATLAB访问代码: % This function reads a siftgeo binary file % % Usage: [v, meta] = siftgeo_read (filename, maxdes) % filename the input filename % maxdes maximum number of descriptors to be loaded % (default=unlimit…

【微服务】Spring Boot集成ELK实用案例

推荐一款我一直在用国内很火的AI网站,包含GPT3.5/4.0、文心一言、通义千问、智谱AI等多个AI模型,支持PC、APP、VScode插件同步使用,点击链接跳转->ChatGPT4.0中文版 一、前言 在现代软件开发中,微服务架构已成为一种流行趋势。…

1 月 30 日算法练习-数论

唯一分解定理 唯一分解定理指的是:对于任意一个>1的正整数,都可以以唯一的一种方式分解为若干质因数的乘积。 x p 1 k 1 ⋅ p 2 k 2 ⋅ … ⋅ p m k m x p_1^{k_1} \cdot p_2^{k_2} \cdot \ldots \cdot p_m^{k_m} xp1k1​​⋅p2k2​​⋅…⋅pmkm​…

数据分析之数据预处理、分析建模、可视化

数据分析的过程通常包括数据预处理、分析建模和可视化三个主要阶段。以下是每个阶段的简要说明: 数据预处理: 数据预处理是数据分析过程中的一个重要步骤,它涉及到对原始数据进行清洗、整理、转化等操作,以便更好地进行后续的分析…

Guava cache中 LoadingCache和Cache的区别

在 Guava 缓存库中,LoadingCache 和 Cache 是两个不同的接口,它们在功能和使用方式上有一些区别。 LoadingCache: LoadingCache 是 Cache 接口的子接口,继承了 Cache 的所有方法,并添加了一些额外的方法。LoadingCache…

Kubernetes集群搭建

一、概述 Kubernetes是一个Google开源的全新的分布式容器集群管理系统,由于从第一个字母到字母s中间有8个字母,所以简称K8s。 二、准备 ip角色内存192.168.187.130master4G192.168.187.131node2G192.168.187.132node2G 小提示: 设置静态i…

前端使用vue-simple-uploader进行分片上传

目录 一、安装vue-simple-uploader 二、在vue中使用 一、安装vue-simple-uploader npm install vue-simple-uploader --save main.js初始化vue-simple-uploader import uploader from vue-simple-uploaderVue.use(uploader) common/config文件 export const ACCEPT_CONF…

信号传输中串扰的影响.

1.导线间的串扰 当导线之间发生串扰时,一根导线上的信号会影响到另一根信号线,给连接的电路造成干扰。这种现象通常发生在平行的导线之间。在设计设备的布线时,特别要注意低电平模拟信号的传输问题。附近导线对其的串扰常常是系统性能下降的主要原因。因此在布线设计时,必须…

docker容器代理上网问题解决参考

背景:折腾一个项目,奈何很多依赖来自外部服务器。 一、网上冲浪做法 1、修改docker配置文件 2、根据docker官方教程设置代理配置 3、设置端口映射 4、加载镜像时,设置网络只能走本地 奈何都没有解决容器内部代理上网问题 二、个人做法…

seq2seq编码器-解码器实现

我们在之前的文章快速上手LSTM-CSDN博客中提及了RNN的几种不同的类型,其中有同步的 many to many 的根据视频的每一帧对视频分类任务,以及异步的 many to many 文本翻译。对于这种输入和输出不等长的序列,我们采用seq2seq(sequenc…

一步步成为React全栈大师:从环境搭建到应用部署

文章目录 第一步:环境搭建第二步:了解React基础第三步:组件与路由第四步:状态管理第五步:接口与数据交互第六步:样式与布局第七步:测试第八步:构建与部署《深入浅出React开发指南》内…

【面试官问】Redis 持久化

目录 【面试官问】Redis 持久化 Redis 持久化的方式RDB(Redis DataBase)AOF(Append Only File)混合持久化:RDB + AOF 混合方式的持久化持久化最佳方式控制持久化开关主从部署使用混合持久化使用配置更高的机器参考文章所属专区

React 面试题

1、组件通信的方式 父组件传子组件:通过props 的方式 子组件传父组件:父组件将自身函数传入,子组件调用该函数,父组件在函数中拿到子组件传递的数据 兄弟组件通信:找到共同的父节点,用父节点转发进行通信 …

一键转换MOV至MP3:轻松删除原视频,释放存储空间!

你是否曾经有一个MOV格式的视频文件,想要提取其中的音频却苦于没有合适的工具?现在,有了我们的全新视频剪辑工具,这个烦恼全部消失!我们为你提供一键式解决方案,将MOV视频文件快速转换为MP3音频格式。 首先…

基于单片机的造纸纸浆液位控制系统结构设计

摘要:为适应无人化与高效化制浆造纸生产体系,造纸企业趋于以嵌入式技术优化造纸过 程中的纸浆液位控制系统,以单片机与传感器相互耦合实现纸浆液位控制。本文基于单片机 设计了造纸纸浆液位控制系统,其结构由控制模块、信息采集模块、物联网模…

备战蓝桥杯---搜索(应用入门)

话不多说,直接看题: 显然,我们可以用BFS,其中,对于判重操作,我们可以把这矩阵化成字符串的形式再用map去存,用a数组去重现字符串(相当于map映射的反向操作)。移动空格先找…

JVM之Java内存区域

JVM-Java内存区域 Java内存区域是Java虚拟机(JVM)管理的内存资源的逻辑划分,用于存储程序运行时所需的数据。Java内存区域的合理划分和管理对于程序的性能和稳定性具有重要影响。本文将深入探讨Java内存区域的各个部分,包括方法区…

(delphi11最新学习资料) Object Pascal 学习笔记---第4章第2节( 参数和返回值)

4.2 参数和返回值 ​ 调用函数或过程时,需要传递正确数量的参数,并确保它们符合预期类型。否则,编译器会发出错误信息,就像给变量赋值时类型不匹配一样。前面的 DoubleIt 函数定义了一个 整数参数,如果调用&#xff1…