Skip to content

Commit

Permalink
Site updated: 2024-01-17 20:08:16
Browse files Browse the repository at this point in the history
  • Loading branch information
hebinbin1 committed Jan 17, 2024
1 parent cd73111 commit 745f84d
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 70 deletions.
6 changes: 3 additions & 3 deletions 2024/01/13/cloud-native/nydus/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<meta property="og:image" content="https://so2bin.github.io/2024/01/13/cloud-native/nydus/metadata.png">
<meta property="og:image" content="https://so2bin.github.io/2024/01/13/cloud-native/nydus/nydus-vs-other.png">
<meta property="article:published_time" content="2024-01-13T06:40:04.000Z">
<meta property="article:modified_time" content="2024-01-17T01:59:18.138Z">
<meta property="article:modified_time" content="2024-01-17T12:07:53.177Z">
<meta property="article:author" content="so2bin">
<meta property="article:tag" content="Cloud Native">
<meta property="article:tag" content="Nydus">
Expand Down Expand Up @@ -242,7 +242,7 @@ <h1 class="post-title" itemprop="name headline">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2024-01-17 09:59:18" itemprop="dateModified" datetime="2024-01-17T09:59:18+08:00">2024-01-17</time>
<time title="修改时间:2024-01-17 20:07:53" itemprop="dateModified" datetime="2024-01-17T20:07:53+08:00">2024-01-17</time>
</span>


Expand Down Expand Up @@ -280,7 +280,7 @@ <h2 id="特点"><a href="#特点" class="headerlink" title="特点"></a>特点</
<li>blobs级别的镜像数据去重,节省空间;</li>
<li>提供用户态文件系统Fuse,兼容OCI分发标准,和artifacts标准(lazy加载就是基于该fuse实现);</li>
<li>支持镜像存储backend,镜像数据可以放registry或对象存储上;</li>
<li>与Dragonfly P2P系统集成;</li>
<li>与Dragonfly P2P系统集成;<span id="more"></span></li>
</ul>
<h2 id="架构"><a href="#架构" class="headerlink" title="架构"></a>架构</h2><ul>
<li>主要包括一种新的镜像格式和一个负责解析容器镜像的FUSE用户态文件系统进程;<img src="/2024/01/13/cloud-native/nydus/arch.png" width="70%" height="70%" style="margin: 0 auto;"></li>
Expand Down
19 changes: 13 additions & 6 deletions atom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -122,16 +122,23 @@
<link href="https://so2bin.github.io/2024/01/13/cloud-native/nydus/"/>
<id>https://so2bin.github.io/2024/01/13/cloud-native/nydus/</id>
<published>2024-01-13T06:40:04.000Z</published>
<updated>2024-01-17T01:59:18.138Z</updated>
<updated>2024-01-17T12:07:53.177Z</updated>

<content type="html"><![CDATA[<h2 id="资料"><a href="#资料" class="headerlink" title="资料"></a>资料</h2><ul><li><a href="https://developer.aliyun.com/article/979419">官方技术博客介绍</a></li><li><a href="https://mp.weixin.qq.com/s?spm=a2c6h.12873639.article-detail.7.71813892qT8cYh&__biz=MzUxNjE3MTcwMg==&mid=2247485160&idx=1&sn=289581225c168e86c5ed3e6819f2a719&chksm=f9aa3431ceddbd277ae447934fbe3fa7bf773158976c5f2b95dcf516ab87e1a32871692683dd&scene=21#wechat_redirect">容器技术之容器镜像篇</a></li><li><a href="https://mp.weixin.qq.com/s?spm=a2c6h.12873639.article-detail.8.71813892qT8cYh&__biz=MzUxNjE3MTcwMg==&mid=2247484853&idx=1&sn=4ef7232be5e32a479987f073e3c6bd20&chksm=f9aa376cceddbe7ab678e11a1b6baa89a338a7d6dd7fd2de7734fb50a4bc3963d850fdb5f991&scene=21#wechat_redirect">Dragonfly 发布 Nydus 容器镜像加速服务</a></li><li><a href="https://drive.google.com/file/d/1LRfLUkNxShxxWU7SKjc_50U0N9ZnGIdV/view?pli=1">Toward Next Generation Container Image</a></li></ul><h2 id="特点"><a href="#特点" class="headerlink" title="特点"></a>特点</h2><ul><li>镜像lazy加载,按需下载镜像blob数据,容器启动速度更快;</li><li>blobs级别的镜像数据去重,节省空间;</li><li>提供用户态文件系统Fuse,兼容OCI分发标准,和artifacts标准(lazy加载就是基于该fuse实现);</li><li>支持镜像存储backend,镜像数据可以放registry或对象存储上;</li><li>与Dragonfly P2P系统集成;</li></ul><h2 id="架构"><a href="#架构" class="headerlink" title="架构"></a>架构</h2><ul><li>主要包括一种新的镜像格式和一个负责解析容器镜像的FUSE用户态文件系统进程;<img src="/2024/01/13/cloud-native/nydus/arch.png" width="70%" height="70%" style="margin: 0 auto;"></li><li>nydus可以配置一个本地缓存(local cache)用来缓存镜像数据,避免每次都从远端数据源拉取数据;</li></ul><h3 id="nydus-Rafs-vs-OCIv1镜像格式"><a href="#nydus-Rafs-vs-OCIv1镜像格式" class="headerlink" title="nydus Rafs vs OCIv1镜像格式"></a>nydus Rafs vs OCIv1镜像格式</h3><ul><li>如下图所示,Rafs镜像格式是分了两块:元数据(bootstrap)、镜像数据块(blobs);</li><li>OCI下的镜像层文件tar.gz变成了只存储文件数据块,文件以chunk为粒度进行切割和去重;<br><img src="/2024/01/13/cloud-native/nydus/rafs-vs-oci.png" alt="Rafs vs OCI"></li></ul><h3 id="Rafs用户态FUSE缺陷和解决"><a href="#Rafs用户态FUSE缺陷和解决" class="headerlink" title="Rafs用户态FUSE缺陷和解决"></a>Rafs用户态FUSE缺陷和解决</h3><ul><li>用户太的FUSE会存在大量的系统开销,当容器中存在大量文件时,会产生大量的fuse请求,生成内核态和用户态之间的频繁切换,造成性能瓶颈;</li><li>nydus为了解决该问题,在开发Rafs v6镜像格式,该功能依托于EROFS文件系统,用于实现真正的内核态的容器镜像格式;</li><li>该Rafs v6的按需加载技术,将由EROFS over Fscache技术完成,阿里为此改造了linux fscache文件的缓存内核模块,以于合并到linux 5.19内核版本主线;<blockquote><p>fscache是linux系统中成熟的文件缓存方案,广泛用于网络文件系统,如NFS, Ceph等,阿里对该模块进行了增强,使用支持本地文件系统(如erofs)的按需加载特性,因此该方案中,fscache接管了本地缓存管理的工作(即前面的local cache);</p></blockquote></li><li>改造后的视图变为:<br><img src="/2024/01/13/cloud-native/nydus/nydus-on-erofs.png" alt="nydus-on-erofs"></li><li>下图为pod使用fscache与nydus交互的过程:<br><img src="/2024/01/13/cloud-native/nydus/fscache-nydus.png" alt="fscache+nydus"></li><li>官方使用教程:<a href="https://github.com/dragonflyoss/nydus/blob/master/docs/nydus-fscache.md">https://github.com/dragonflyoss/nydus/blob/master/docs/nydus-fscache.md</a></li></ul><h3 id="Rafs镜像格式"><a href="#Rafs镜像格式" class="headerlink" title="Rafs镜像格式"></a>Rafs镜像格式</h3><blockquote><p>Rafs: Registry Acceleration File System</p></blockquote><h4 id="Merkle-Tree"><a href="#Merkle-Tree" class="headerlink" title="Merkle Tree"></a>Merkle Tree</h4><blockquote><p><a href="https://developer.aliyun.com/article/842854">镜像元数据核心算法:merkle tree</a></p></blockquote><ul><li>nydus实现了一种新的镜像格式(docker原生的OCI镜像格式可以参考我之前的文章”OCI镜像规范”),该格式是将镜像文件拆分成元数据和数据blobs两层,其中的元数据就是一颗以文件&#x2F;目录为树节点的Merkle Tree;</li><li>该数据结构的特点有:<ul><li>MT树可以是二叉树也可以为多叉树,这里nydus是后者;</li><li>MT树叶子节点的value是数据集合的单元数据或单元数据的HASH;</li><li>MT树的非叶子节点的value是根据所有子节点的值计算出来的HASH值;</li></ul></li><li>该数据结构的优势有:<ul><li>对比两颗MT的root节点能直接对比出该树的数据是否一样,如这里的nydus可以通过root的HASH值直接判断出下载的镜像是否与原始镜像一样;</li><li>如数据不一样,能够快速分辨出哪一个子节点不同,递归后即可快速找出异常的叶子节点,因此可以仅重新下载该叶子节点的数据即可;</li><li>blobs的HASH列表可以看成一颗调度为2的MT树;</li><li>检索数据块的时间复杂度为<code>Log(N)</code></li></ul></li><li>该数据结构被广泛应用于P2P网络中,用于确保从其它节点接受的数据没有损坏或被人为替换;<img src="/2024/01/13/cloud-native/nydus/MT.png" width="70%" height="50%" style="margin: 0 auto;"></li></ul><h4 id="nydus镜像元数据"><a href="#nydus镜像元数据" class="headerlink" title="nydus镜像元数据"></a>nydus镜像元数据</h4><ul><li>如下图所示,nydus的元数据是以文件&#x2F;目录为节点组件的MT树,所有叶子节点为文件,value由文件内容的HASH决定,非叶子节点为目录,HASH由目录下的子节点HASH确定:<img src="/2024/01/13/cloud-native/nydus/metadata.png" width="80%" style="margin: 0 auto;"></li></ul><h4 id="nydus-blobs镜像数据"><a href="#nydus-blobs镜像数据" class="headerlink" title="nydus blobs镜像数据"></a>nydus blobs镜像数据</h4><ul><li>镜像数据是被分成固定大小的blobs数据块,大小为4MB;</li><li>blobs可以用于多镜像共享;</li><li>传统OCI镜像是以gzip从仓库拉到本地并进行解压的,解压前会有数据校验,但解压后并不会再进行校验,这里可能就存在漏洞,而nydus的数据不需要解压到本地,且对每一次数据访问均会进行校验,因此提供了blobs级的安全校验;</li></ul><h3 id="对比"><a href="#对比" class="headerlink" title="对比"></a>对比</h3><ul><li>如下图,是官方给出的nydus与之前的镜像加速方案的对比图,如Slacker, dragonfly方案:<br><img src="/2024/01/13/cloud-native/nydus/nydus-vs-other.png" alt="nydus-vs-other"></li></ul>]]></content>
<content type="html"><![CDATA[<h2 id="资料"><a href="#资料" class="headerlink" title="资料"></a>资料</h2><ul><li><a href="https://developer.aliyun.com/article/979419">官方技术博客介绍</a></li><li><a href="https://mp.weixin.qq.com/s?spm=a2c6h.12873639.article-detail.7.71813892qT8cYh&__biz=MzUxNjE3MTcwMg==&mid=2247485160&idx=1&sn=289581225c168e86c5ed3e6819f2a719&chksm=f9aa3431ceddbd277ae447934fbe3fa7bf773158976c5f2b95dcf516ab87e1a32871692683dd&scene=21#wechat_redirect">容器技术之容器镜像篇</a></li><li><a href="https://mp.weixin.qq.com/s?spm=a2c6h.12873639.article-detail.8.71813892qT8cYh&__biz=MzUxNjE3MTcwMg==&mid=2247484853&idx=1&sn=4ef7232be5e32a479987f073e3c6bd20&chksm=f9aa376cceddbe7ab678e11a1b6baa89a338a7d6dd7fd2de7734fb50a4bc3963d850fdb5f991&scene=21#wechat_redirect">Dragonfly 发布 Nydus 容器镜像加速服务</a></li><li><a href="https://drive.google.com/file/d/1LRfLUkNxShxxWU7SKjc_50U0N9ZnGIdV/view?pli=1">Toward Next Generation Container Image</a></li></ul><h2 id="特点"><a href="#特点" class="headerlink" title="特点"></a>特点</h2><ul><li>镜像lazy加载,按需下载镜像blob数据,容器启动速度更快;</li><li>blobs级别的镜像数据去重,节省空间;</li><li>提供用户态文件系统Fuse,兼容OCI分发标准,和artifacts标准(lazy加载就是基于该fuse实现);</li><li>支持镜像存储backend,镜像数据可以放registry或对象存储上;</li><li>与Dragonfly P2P系统集成;<span id="more"></span></li></ul><h2 id="架构"><a href="#架构" class="headerlink" title="架构"></a>架构</h2><ul><li>主要包括一种新的镜像格式和一个负责解析容器镜像的FUSE用户态文件系统进程;<img src="/2024/01/13/cloud-native/nydus/arch.png" width="70%" height="70%" style="margin: 0 auto;"></li><li>nydus可以配置一个本地缓存(local cache)用来缓存镜像数据,避免每次都从远端数据源拉取数据;</li></ul><h3 id="nydus-Rafs-vs-OCIv1镜像格式"><a href="#nydus-Rafs-vs-OCIv1镜像格式" class="headerlink" title="nydus Rafs vs OCIv1镜像格式"></a>nydus Rafs vs OCIv1镜像格式</h3><ul><li>如下图所示,Rafs镜像格式是分了两块:元数据(bootstrap)、镜像数据块(blobs);</li><li>OCI下的镜像层文件tar.gz变成了只存储文件数据块,文件以chunk为粒度进行切割和去重;<br><img src="/2024/01/13/cloud-native/nydus/rafs-vs-oci.png" alt="Rafs vs OCI"></li></ul><h3 id="Rafs用户态FUSE缺陷和解决"><a href="#Rafs用户态FUSE缺陷和解决" class="headerlink" title="Rafs用户态FUSE缺陷和解决"></a>Rafs用户态FUSE缺陷和解决</h3><ul><li>用户太的FUSE会存在大量的系统开销,当容器中存在大量文件时,会产生大量的fuse请求,生成内核态和用户态之间的频繁切换,造成性能瓶颈;</li><li>nydus为了解决该问题,在开发Rafs v6镜像格式,该功能依托于EROFS文件系统,用于实现真正的内核态的容器镜像格式;</li><li>该Rafs v6的按需加载技术,将由EROFS over Fscache技术完成,阿里为此改造了linux fscache文件的缓存内核模块,以于合并到linux 5.19内核版本主线;<blockquote><p>fscache是linux系统中成熟的文件缓存方案,广泛用于网络文件系统,如NFS, Ceph等,阿里对该模块进行了增强,使用支持本地文件系统(如erofs)的按需加载特性,因此该方案中,fscache接管了本地缓存管理的工作(即前面的local cache);</p></blockquote></li><li>改造后的视图变为:<br><img src="/2024/01/13/cloud-native/nydus/nydus-on-erofs.png" alt="nydus-on-erofs"></li><li>下图为pod使用fscache与nydus交互的过程:<br><img src="/2024/01/13/cloud-native/nydus/fscache-nydus.png" alt="fscache+nydus"></li><li>官方使用教程:<a href="https://github.com/dragonflyoss/nydus/blob/master/docs/nydus-fscache.md">https://github.com/dragonflyoss/nydus/blob/master/docs/nydus-fscache.md</a></li></ul><h3 id="Rafs镜像格式"><a href="#Rafs镜像格式" class="headerlink" title="Rafs镜像格式"></a>Rafs镜像格式</h3><blockquote><p>Rafs: Registry Acceleration File System</p></blockquote><h4 id="Merkle-Tree"><a href="#Merkle-Tree" class="headerlink" title="Merkle Tree"></a>Merkle Tree</h4><blockquote><p><a href="https://developer.aliyun.com/article/842854">镜像元数据核心算法:merkle tree</a></p></blockquote><ul><li>nydus实现了一种新的镜像格式(docker原生的OCI镜像格式可以参考我之前的文章”OCI镜像规范”),该格式是将镜像文件拆分成元数据和数据blobs两层,其中的元数据就是一颗以文件&#x2F;目录为树节点的Merkle Tree;</li><li>该数据结构的特点有:<ul><li>MT树可以是二叉树也可以为多叉树,这里nydus是后者;</li><li>MT树叶子节点的value是数据集合的单元数据或单元数据的HASH;</li><li>MT树的非叶子节点的value是根据所有子节点的值计算出来的HASH值;</li></ul></li><li>该数据结构的优势有:<ul><li>对比两颗MT的root节点能直接对比出该树的数据是否一样,如这里的nydus可以通过root的HASH值直接判断出下载的镜像是否与原始镜像一样;</li><li>如数据不一样,能够快速分辨出哪一个子节点不同,递归后即可快速找出异常的叶子节点,因此可以仅重新下载该叶子节点的数据即可;</li><li>blobs的HASH列表可以看成一颗调度为2的MT树;</li><li>检索数据块的时间复杂度为<code>Log(N)</code></li></ul></li><li>该数据结构被广泛应用于P2P网络中,用于确保从其它节点接受的数据没有损坏或被人为替换;<img src="/2024/01/13/cloud-native/nydus/MT.png" width="70%" height="50%" style="margin: 0 auto;"></li></ul><h4 id="nydus镜像元数据"><a href="#nydus镜像元数据" class="headerlink" title="nydus镜像元数据"></a>nydus镜像元数据</h4><ul><li>如下图所示,nydus的元数据是以文件&#x2F;目录为节点组件的MT树,所有叶子节点为文件,value由文件内容的HASH决定,非叶子节点为目录,HASH由目录下的子节点HASH确定:<img src="/2024/01/13/cloud-native/nydus/metadata.png" width="80%" style="margin: 0 auto;"></li></ul><h4 id="nydus-blobs镜像数据"><a href="#nydus-blobs镜像数据" class="headerlink" title="nydus blobs镜像数据"></a>nydus blobs镜像数据</h4><ul><li>镜像数据是被分成固定大小的blobs数据块,大小为4MB;</li><li>blobs可以用于多镜像共享;</li><li>传统OCI镜像是以gzip从仓库拉到本地并进行解压的,解压前会有数据校验,但解压后并不会再进行校验,这里可能就存在漏洞,而nydus的数据不需要解压到本地,且对每一次数据访问均会进行校验,因此提供了blobs级的安全校验;</li></ul><h3 id="对比"><a href="#对比" class="headerlink" title="对比"></a>对比</h3><ul><li>如下图,是官方给出的nydus与之前的镜像加速方案的对比图,如Slacker, dragonfly方案:<br><img src="/2024/01/13/cloud-native/nydus/nydus-vs-other.png" alt="nydus-vs-other"></li></ul>]]></content>




<summary type="html">&lt;h2 id=&quot;资料&quot;&gt;&lt;a href=&quot;#资料&quot; class=&quot;headerlink&quot; title=&quot;资料&quot;&gt;&lt;/a&gt;资料&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.aliyun.com/article/979419&quot;&gt;官方技术博客介绍&lt;/</summary>

&lt;li&gt;&lt;a href=&quot;https://developer.aliyun.com/article/979419&quot;&gt;官方技术博客介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s?spm=a2c6h.12873639.article-detail.7.71813892qT8cYh&amp;__biz=MzUxNjE3MTcwMg==&amp;mid=2247485160&amp;idx=1&amp;sn=289581225c168e86c5ed3e6819f2a719&amp;chksm=f9aa3431ceddbd277ae447934fbe3fa7bf773158976c5f2b95dcf516ab87e1a32871692683dd&amp;scene=21#wechat_redirect&quot;&gt;容器技术之容器镜像篇&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mp.weixin.qq.com/s?spm=a2c6h.12873639.article-detail.8.71813892qT8cYh&amp;__biz=MzUxNjE3MTcwMg==&amp;mid=2247484853&amp;idx=1&amp;sn=4ef7232be5e32a479987f073e3c6bd20&amp;chksm=f9aa376cceddbe7ab678e11a1b6baa89a338a7d6dd7fd2de7734fb50a4bc3963d850fdb5f991&amp;scene=21#wechat_redirect&quot;&gt;Dragonfly 发布 Nydus 容器镜像加速服务&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://drive.google.com/file/d/1LRfLUkNxShxxWU7SKjc_50U0N9ZnGIdV/view?pli=1&quot;&gt;Toward Next Generation Container Image&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;特点&quot;&gt;&lt;a href=&quot;#特点&quot; class=&quot;headerlink&quot; title=&quot;特点&quot;&gt;&lt;/a&gt;特点&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;镜像lazy加载,按需下载镜像blob数据,容器启动速度更快;&lt;/li&gt;
&lt;li&gt;blobs级别的镜像数据去重,节省空间;&lt;/li&gt;
&lt;li&gt;提供用户态文件系统Fuse,兼容OCI分发标准,和artifacts标准(lazy加载就是基于该fuse实现);&lt;/li&gt;
&lt;li&gt;支持镜像存储backend,镜像数据可以放registry或对象存储上;&lt;/li&gt;
&lt;li&gt;与Dragonfly P2P系统集成;&lt;/li&gt;&lt;/ul&gt;</summary>



Expand Down
2 changes: 1 addition & 1 deletion css/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -3146,7 +3146,7 @@ header.header {
vertical-align: middle;
}
.links-of-author a::before {
background: #712fd7;
background: #006282;
display: inline-block;
margin-right: 3px;
transform: translateY(-2px);
Expand Down
Loading

0 comments on commit 745f84d

Please sign in to comment.