Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深入浅出腾讯云 CDN:缓存篇

深入浅出腾讯云 CDN:缓存篇

原创
作者头像
吴锐
修改于 2017-06-19 11:10:40
修改于 2017-06-19 11:10:40
6K0
举报
文章被收录于专栏:吴锐的专栏吴锐的专栏

作者介绍:吴锐,开源爱好者。曾在阿里巴巴搬砖,目前就职于腾讯担任高级工程师,专注于创造高效代码。

1. 引言

互联网的发展为CDN的发展带来了巨大的机遇。不论是视频点播,直播或者VR技术都需要CDN做为传输内容的载体。老牌CDN服务商网宿2016年上半年CDN业务的营收比上年同期增长达到76.04%。

但是CDN作为云基础服务中关键的一环,一直是各个云服务器提供商的必争之地。腾讯云如果需要在竞争中取得一席之地,就需要能够从容应对云上这些复杂的内容进行处理。原有CDN服务器的存储引擎在处理视频文件,以及复杂的HTTP协议内容上出现了瓶颈,改造迫在眉睫。

2. 问题

对于视频这种大文件,原有SSD盘的存储容量无法保证热点文件存储在缓存中,因此SATA盘这种大容量磁盘被应用到了CDN边缘节点中用来缓存视频大文件,以保证CDN边缘节点的命中率。

但是原有CDN服务器存储引擎在SATA盘上的表现并不理想,如下图所示,在TS6上只能跑600Mbps流量,并且IO也处于比较高的水位,这限制CDN节点的服务能力。

图1 DiskTank在TS6上的处理能力

另外,在某些业务场景下服务器会导致CPU毛刺的出现,定位发现是原有存储引擎的一些限制以及处理流程的问题导致的。不能挡在业务前进的路上,存储引擎的改造势在必行。老的存储引擎为DiskTank,新改造的存储引擎因为历史原因命名为DiskTank3。下文就将老存储引擎成为DiskTank,新引擎成为DiskTank3。

图2 DiskTank的CPU毛刺

3. 硬件层

首先我们考虑是否完全充分利用了磁盘的性能,什么读写方式才能将磁盘的性能最大化。在调研了磁盘相关的构造后发现,经过对齐之后的写操作能够带来巨大的性能优化。

不管SSD盘或者SATA盘都有最小的操作单位,可能是512B,4KB,8KB。如果读写过程中不进行对齐,底层的硬件或者驱动就需要替应用层来做对齐操作,并将一次读写操作分裂为多次读写操作。

如下图是在同一台TS8服务器上进行测试的结果。每次操作块大小为130K的吞吐能力仅为128K的21.65%。每次操作的块大小变大了,性能反而出现了明显的下降。

这是十分反直觉的,并且也说明了对齐的重要性。因此DiskTank3的第一个优化就是将写入的数据都进行Page对齐。目前不论SSD盘或者SATA盘的Page都为4KB的倍数,因此DiskTank3写入数据时按照4KB进行对齐。当然,这个参数是可调,方便后续调整。

图3 128KB块大小吞吐量测试

图4 130KB块大小吞吐量测试

4. 系统层

接下从系统层开始考虑从系统层面开始优化。

第一,在运营过程中发现在内存吃紧时,即使Page Cache中还有空闲内存时,内核会使用Swap的内存,或者是回收内存带来额外的CPU开销等问题;

第二,文件系统的元数据也会有IO的开销。而CDN的存储引擎自己进行缓存数据的管理,完全可以使用裸盘进行读写。消灭文件系统的开销。如下图所示,DiskTank3中支持越过文件系统直接使用裸盘读写,来完全解放磁盘IO性能。

图5 IO处理流程

直接使用裸盘带来的另一个好处是可以使用内核提供的异步IO功能。异步IO可以解放CPU,进一步提高服务器的处理能力。目前DiskTank3已经支持异步IO。但是异步IO在IO没有完成之前,写入缓存会占用内存空间。需要对这部分内存进行限制,防止消耗过多内存影响服务器正常处理。

5. 应用层

最后再来考虑从应用层面优化。主要优化点有:

5.1 文件分片存储

DiskTank存储文件时候使用连续的存储空间。当需要淘汰老文件,挪出空间来存储新文件时,就需要将整个老文件从缓存中删除。对小文件这并没有什么问题。但是如果为了存储一个4KB的小文件而将一个1GB的文件从缓存中删除,这明显得不偿失的。

因此,在DiskTank3中,所有大文件都会被分成一个个1M的数据分片进行存储。这样在淘汰时也只需要淘汰一个1M的数据分片,在需要时也只需要拉取一个1M的数据分片即可。这解决了DiskTank在淘汰大文件时引起大量回源流量的问题。

同时,分片存储也带来了另外一个好处,就是CDN的缓存可以支持变长文件。这在客户源站只支持HTTP中的分块传输(Chunked transfer encoding),这种不知道文件大小长度的情况下就十分有用。

DiskTank由于在存储之前需要知道文件的确切大小,因此之前的做法是先在内存中接受并缓存数据,等到接受完毕确定文件大小后,再存储到缓存中。DiskTank3可以将数据直接写到缓存中,降低了内存和CPU开销。

图6 DiskTank存储与淘汰方式

图7 DiskTank3存储与淘汰方式

5.2 元数据与文件数据隔离

另外在运营中发现,在某些场景下,元数据频繁的被读写。导致元数据的读写IO开销变得十分明显。而元数据与正常文件数据是存放在同一块磁盘中,这影响了正常文件数据的存取。

因此,在DiskTank3中可以将元数据与文件数据分开存储。元数据可以存储在IO能力较强的SSD盘中,而文件数据则单独存储在数据盘中。在小文件场景下,甚至可以将元数据存放在内存文件系统tmpfs中,完全规避元数据的IO开销。

5.3 小文件忽略缓存头部

第三个优化点在于提高小文件的存储效率。CDN在缓存文件的同时会将和文件相关的一些信息,如HTTP头部,Mtime和Host等信息,作为头部存储在缓存文件的开头。这部分数据大小为几KB。在小文件业务,大量文件的长度也就为几KB,缓存头部就占据了将近一半的存储空间。部分业务并不需要这些缓存信息,因此可以将这部分缓存头部省略,进一步提高存储利用率。

5.4 单盘容灾

最后,运营海量服务器的场景下,坏盘变得频繁。

如果运维收到告警后,人肉处理就需要比较长的响应时间,甚至影响服务器上业务的运行。新版本的DiskTank3支持将坏盘自动从缓存中剔除坏盘,坏盘问题不会中断业务的正常运行。坏盘在被剔除之后,缓存会在剩余的其他磁盘上重新Hash分布,不影响正常文件存取。

6. 总结

在进行优化之后,将老版本的DiskTank与新版本的DiskTank3在同机房选择了两台机器,使用相同业务进行压测对比。流量提升40%,负载降低13%,消耗降低31% 。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
服务好“最后一公里”,高效CDN架构经验
国内,随着互联网的高速发展,因为各大通信公司的政策,造成了南电信北联通互通有局限性,再加上大小且质量参差不齐的运营商,在这特殊的氛围的互联互通下号称“八线合一”的机房开始崭露头角。互联网的广泛性使得网民分散在全国各地,由于全国地区的经济发展和互联网建设的不平衡,实际网民的体验往往受限于最后一公里的速度。在技术大喷井的年代,一些无聊或者有目的黑客攻击也开始涌现,无论是渗透还是DDoS攻击都非常频繁,时刻威胁着网站的安全…… 上述种种问题,作为应用服务提供商,我们要如何解决此类问题呢?归根结底就是要充分利用好C
小小科
2018/05/02
1.9K0
从青铜到王者系列:深入浅出理解 DeepSeek 3FS(1)
这里从零实现一个3FS文件系统开始。 探讨 讲背后计算网络,内存,文件,cpu串联起来。
早起的鸟儿有虫吃
2025/03/19
3140
从青铜到王者系列:深入浅出理解 DeepSeek 3FS(1)
深入浅出分布式存储的设计与优化之道
面对信息化程度不断提高带来的PB级海量数据存储需求,传统的存储系统在容量和性能的扩展上存在瓶颈。云存储以其扩展性强、性价比高、容错性好等优势得到了业界的广泛认同。分布式文件系统和分布式块存储作为云存储中重要的技术,成为奠定云存储发展的重要基石。
冬瓜哥
2019/06/10
1.5K0
深入浅出分布式存储的设计与优化之道
CubeFS在大数据和机器学习的探索和实践丨ArchSummit峰会实录
近日,AS 全球架构师峰会上海站圆满落地。会上,来自 OPPO 安第斯智能云的唐之享围绕云原生分布式存储 CubeFS 在机器学习和大数据的探索和实践这一主题展开了精彩分享,以下为本次分享的精华内容。本次分享主要从以下四个方面进行: CubeFS 的架构设计和关键产品特性; CubeFS 在机器学习领域的应用和实践,详细说明 OPPO 机器学习存储的演进过程和遇到的问题和挑战,以及如何基于 CubeFS 应对这些问题和挑战; CubeFS 在大数据的应用和实践; 展望 CubeFS 的未来演进方向。 01
深度学习与Python
2023/05/09
9430
CubeFS在大数据和机器学习的探索和实践丨ArchSummit峰会实录
伸手党福利 - 直击TFS技术内幕
TEG云端专业号
2017/07/13
4K0
伸手党福利 - 直击TFS技术内幕
干货!万亿级数据库MongoDB集群性能优化实践合辑(上)
本文来自OPPO文档数据库mongodb负责人杨亚洲老师2020年深圳Qcon全球软件开发大会《专题:现代数据架构》专场、dbaplus专场:万亿级数据库MongoDB集群性能优化实践、mongodb2020年终盛会分享,分享内容如下(体验万亿级mongodb服务层、存储引擎、高并发线程模型、异地多活容灾等实现细节)。
MongoDB中文社区
2021/04/02
2.9K0
分布式对象存储设计原理
保存像图片、音视频这类大文件就是对象存储。不仅有很好的大文件读写性能,还可通过水平扩展实现近乎无限容量,并兼顾服务高可用、数据高可靠。
JavaEdge
2023/01/02
1.4K0
分布式对象存储设计原理
腾讯云数据库CDB技术演进之路
作者简介:程彬,腾讯基础架构部数据库研发负责人。2008年毕业加入腾讯,一直从事数据存储相关研发工作;在云计算浪潮涌来之时参与到腾讯云存储产品的打造。目前在腾讯TEG基础架构部,负责数据库(CDB)和云硬盘(CBS)研发相关工作。
腾讯 架构师
2021/07/15
2.3K0
腾讯云数据库CDB技术演进之路
磁盘I/O那些事
背景 计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。 硬盘性能的制约因素是什么?如何根据磁盘I/O特性来进行系统设计?针对这些问题,本文将介绍硬盘的物理结构和性能指标,以及操作系统针对磁盘性能所做的优化,最后讨论下基于磁盘I/O
美团技术团队
2018/03/13
5.3K0
磁盘I/O那些事
人脸识别等海量小文件场景,需要怎样的存储?
根据IDC在2018年底的预测显示,由于大数据、AI、物联网、5G等因素的驱动,全球的数据量在2025年将高达175ZB(1ZB=1024EB,1EB=1024PB)。在中国市场,由于AI技术在安防等领域的大规模落地与应用,IDC预计,中国将在2025年成为拥有数据量最大的地区,甚至超过整个EMEA(欧洲+中东+非洲),其中绝大部分数据是非结构化数据。
大数据在线
2020/03/20
2.7K0
沙场秋点兵——MySQL容器化性能测试对比
容器技术改变了应用交付、运行的方式,几乎各种Linux环境下的应用程序都可以使用容器来运行。但是否能在容器环境里运行数据库应用,以及数据库应用是否适合在容器里运行,一直都是大家很关注的问题,今天我们就来深入分析一下容器环境运行MySQL数据库的事。
焱融科技
2020/02/27
1.3K0
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
早起的鸟儿有虫吃
2025/04/11
2420
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
深入理解 新一代存储引擎BlueStore,需四步
”走暗路、耕瘦田、进窄门、见微光” 告诉我 面试关键就 深入理解自己项目 这个才是最考察基本功的地方。
早起的鸟儿有虫吃
2025/04/28
1510
深入理解 新一代存储引擎BlueStore,需四步
挑战存储“不可能之三角”:用自研技术引领存储性能突破
然而,随着非结构化数据在生产业务中的广泛应用,各行各业正在经历数据量的爆炸式增长。虽然分布式存储在大众认知内具有高性价比和高扩展性,却未被赋予高性能的标签。
科技云报道
2024/01/10
3610
挑战存储“不可能之三角”:用自研技术引领存储性能突破
硬卷 NoSQL 数据库系列(六):MongoDB 存储引擎 WiredTiger 技术详解
前面介绍了 MongoDB 的安装与基础的 CURD 操作、索引与聚合、基本使用、常用管理命令与授权认证等相关的知识点。今天我将详细的为大家介绍 MongoDB 存储引擎 WiredTiger 相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!
民工哥
2023/08/25
2.7K0
硬卷 NoSQL 数据库系列(六):MongoDB 存储引擎 WiredTiger 技术详解
Innodb是如何运转的
Master Thread是非常核心的后台线程,主要负责脏页的刷新,合并插入缓冲,UNDO页回收等。
大忽悠爱学习
2022/12/07
4100
Innodb是如何运转的
【万字长文】HDFS最全知识点整理(建议收藏)
1)跟NN通信查询元数据(block所在的DN的节点),找到文件块所在的DN的服务器。2)挑选一台DN(就近原则,然后随机)服务器,请求建立socket流。3)DN开始发送数据(从磁盘里读取数据放入流,一packet为单位做校验) 4)客户端以packet为单位接收,现在本地缓存,然后写入目标文件中,后面的block块就相当于append到前面的block块,最后合成最终需要的文件。
857技术社区
2022/05/17
3.2K0
【万字长文】HDFS最全知识点整理(建议收藏)
玩转腾讯云CDN
加速区域选择为中国境内或全球时,需要先完成 ICP 备案,若您的域名尚未完成 ICP 备案,您可以使用腾讯云网站备案。
杜志强
2021/07/25
12.4K0
玩转腾讯云CDN
google三篇论文之GFS
Google在03至06年发表了著名的三大论文——GFS、BigTable、MapReduce,用来实现一个大规模的管理计算系统。
张哥编程
2024/12/19
2870
google三篇论文之GFS
百万级高并发mongodb集群性能数十倍提升优化实践(上篇)
线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性。该集群采用mongodb天然的分片模式架构,数据均衡的分布于各个分片中,添加片键启用分片功能后实现完美的负载均衡。集群每个节点流量监控如下图所示:
美的让人心动
2019/12/26
3.2K0
百万级高并发mongodb集群性能数十倍提升优化实践(上篇)
推荐阅读
相关推荐
服务好“最后一公里”,高效CDN架构经验
更多 >
LV.0
这个人很懒,什么都没有留下~
交个朋友
加入架构与运维工作实战群
高并发系统设计 运维自动化实践
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
加入架构与运维趋势交流群
技术趋势前瞻 架构演进方向
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档