Nydus 镜像扫描加速

Nydus 容器镜像加速服务 - 架构设计与技术文档 Nydus 是一个高性能容器镜像加速服务,由 Rust 语言实现。它通过在 RAFS(Registry Acceleration File System)格式上实现内容寻址文件系统,显著提升容器启动速度、降低存储和网络带宽消耗。核心优势:快速启动:秒级容器启动,毫秒级函数计算代码包加载按需加载:以 chunk 为单位按需下载镜像数据节省资源:chunk 级别数据去重,跨层/跨镜像降低存储、传输和内存成本端到端安全:数据完整性验证,可检测供应链攻击。 阅读详情

38a7fd10de05cefb0845e15ba7cbfc59.gif

文|余硕

上海交通大学22届毕业生

阿里云开发工程师

从事云原生底层系统的开发和探索工作。

本文 6369 字 阅读 16 分钟

821c5a0597eb0eb76250aa676f59c7e9.png

GitLink 编程夏令营是在 CCF 中国计算机学会指导下,由 CCF 开源发展委员会(CCF ODC)举办的面向全国高校学生的暑期编程活动。

这是今年的夏令营活动中,余硕同学参加 Nydus 开源项目的总结,主要介绍了 Nydus 为支持镜像扫描与修复所做的研究与相关工作。

PART. 1

课题背景

Nydus 开源镜像加速框架

Nydus 是 CNCF 孵化项目 Dragonfly 的子项目,它提供了容器镜像,代码包按需加载的能力。Nydus 应用时无需等待全部数据下载完成便可开始服务。

Nydus 在生产环境中已经支撑了每日百万级别的加速镜像容器创建。它在容器启动性能、镜像空间占用、网络带宽效率、端到端数据一致性等方面相比 OCI v1 格式有着巨大优势,并可扩展至其它数据分发场景,比如 NPM 包懒加载等。

目前 Nydus 由蚂蚁集团、阿里云、字节跳动联合开发。Containerd、Podman 社区已经接受了 Nydus 运行时作为其社区子项目,它也是 Kata Containers 以及 Linux v5.19 内核态原生支持的镜像加速方案。

有关 Nydus 镜像加速开源项目的详细介绍,可以参考:Nydus——下一代容器镜像的探索实践。

项目描述

为 Nydus 镜像增加一个扫描和修复的命令行工具,包含以下功能:

  • 提供一个 Nydus 镜像 url 和需要替换的文件列表;

  • 使用工具拉取镜像 Bootstrap;

  • 找到镜像中对应的文件并替换;

  • 打包成新的镜像并上传回 Registry。

概括来说,原有项目目标是为 Nydus 镜像实现一个扫描和修复的命令行工具,其中这些功能是这个工具或者工具组的实现流程。

但此项目具有一定的实验性,其核心是为 Nydus 格式的镜像提供扫描和修复的功能或者指引。如果存在更好的方式,项目最终不一定要按照原有项目描述去实现。因此在接下来的课题完成过程中,我们首先对已有镜像扫描/修复的工具与服务进行了调研,来确定此课题方案的最终形态。

镜像扫描工具及服务

扫描和修复

镜像扫描和修复可以被拆解为两个过程。扫描不更改原有的镜像内容,只需要寻找扫描目标是否存在某种缺陷;镜像修复则需要根据缺陷改动镜像,包括但不限于镜像内容,镜像层级组织等。我们调研发现,当前主流开源镜像扫描引擎包括云厂商镜像安全服务都只涉及镜像扫描的功能, 不会主动添加镜像修复的功能。

我们分析主要的原因有:

  • 直接进行镜像修复可能引入新的安全问题;

  • 镜像扫描的内容存在不同种类,很可能需要为不同种类的镜像安全问题设计不同的修复方式;

  • 镜像修复功能可以通过重新打包镜像替代。

所以,镜像安全服务暂时只是提供扫描结果的安全报告,具体的修复操作由用户自行决定。我们也准备沿用这样的思路:在本课题中,为镜像实现安全扫描的功能,并提供报告作为用户镜像修复的参考依据。

我们也探索讨论了镜像修复的支持,或者 Nydus 特性在镜像修复场景下的增强,比如镜像内包替换后的去重与重组等,或许这些可以是未来 Nydus 中增加的功能特性。

镜像扫描介绍

镜像扫描的原因与内容

容器镜像是当前容器/软件分发的基础,里面包含了容器隔离环境以及软件执行环境的相关内容。因此保障其安全性变得十分重要。镜像扫描即是要扫描镜像中的所有内容,及时发现可能包含的安全漏洞或者隐私泄露。

综合来看,镜像扫描需要关注镜像的安全性与健壮性,扫描的内容主要分为三类:

1. 安全漏洞。包括系统软件包和应用软件库中可能存在的安全漏洞。可以通过比对镜像中这些库/软件包的来源、版本等与 CVE 数据库中报告的漏洞的包的来源、版本来定位可能存在的安全漏洞。

2. 配置。包括镜像运行的环境配置和镜像中相关内容组合可能带来的问题。帮助尽早定位配置错误以及配置错误可能带来的安全风险。

3. 隐私。需要扫描的是用户指定的一些隐私信息。比如用户不小心将密钥等信息存入镜像。如果在扫描配置中进行指定,扫描过程可能发现这些隐私信息,避免隐私泄露以及可能带来的安全问题。

扫描引擎

常见的扫描引擎有 Trivy、Synk 等。Docker 官方使用的是 Synk,但它比较商业化;Trivy 是 CNCF 的项目,开放性较好。

镜像扫描的使用方式

在我们的调研中,镜像扫描主要应用方式有三种:

1. 基础使用。镜像扫描的过程可以直接通过集成了镜像扫描引擎的容器运行时或者镜像扫描引擎命令行触发。比如运行 $ docker scan image-url ,可以扫描镜像,并输出相应的报告。

79728976701baccb6b1f65dea147d265.png

source:https://docs.docker.com/engine/scan/

2. 流程集成。镜像扫描的过程可以集成到镜像中心或者 CI/CD 流程中。比如将镜像扫描集成到数据中心,在每次镜像上传到数据中心时触发镜像扫描,可以保证从数据中心下载的镜像总是经过安全扫描的;集成在 CI/CD 流程中,设置触发条件,可以保证镜像生成,镜像部署等过程所使用的镜像的安全性。

72b291515eca9063af59393c99d90ba7.png

source: https://www.containiq.com/post/container-image-scanning

3. 扫描服务。云厂商提供了镜像安全的服务。它们背后可能是基于前两种使用方式实现,但是还可以有很多种功能的增强。用户想使用镜像扫描的功能也可以直接购买类似的安全服务,并进行灵活的配置。

eec0278b65d418d864d772cc5ba7d557.png

source: https://cloud.google.com/container-analysis/docs/on-demand-scanning-howto

PART. 2
课题解决思路

基本思路

课题首先要解决的基本思路是,如项目描述一般为 Nydus 实现一个专属的镜像扫描工具;还是复用已有的镜像扫描引擎,在 Nydus 侧实现对接支持,从而完成 Nydus 镜像扫描的功能实现。

我们最终选择了结合已有镜像扫描引擎的实现思路。尽管为 Nydus 实现一个专属的镜像扫描工具可以更好的利用 Nydus 的特性,但是从镜像功能生态上考虑,这并不是一个很好的方式。复用或者集成到现有的镜像扫描工具,一方面可以直接使用已实现的镜像扫描引擎中全面的内容扫描能力;另一方面,与上层镜像安全服务的对接也不用再重写相关接口。这样也可以减少一些功能定制,减少用户使用的负担。因此此课题选择了后一种实现的基本思路。

扫描思路:FileSystem vs Image

Trivy 扫描功能实现的框架

1. 控制路径。

0ebe15e37e8e176d8e7c3e4134194c20.png

Trivy 在镜像扫描上由以下路径控制,每触发一次命令,会由一个 Scanner 控制。其中关键的是 artifact 和 driver 。扫描引擎一般可以支持多种格式的扫描,比如 OCI v1 镜像或者镜像 Rootfs,同时一般也支持本地或者远端存储信息等。这些一般可由 ScannerConfig 配置或者自动解析。

artifact 存储着镜像(包括文件系统)元信息,如果已经扫描过其中的内容,还可以存储部分解析后的信息。另外,load 到本地的 CVE 数据等也可通过 Artifact 获取。Driver 里的 Scan 方法表示的则是应用在特定扫描过程中的检查方法。

2. 关键动作。

  • local.Scanner

102f4fd8338de3cce09c9b1647dfe271.png

  • Applier

5e24a3ae58cf5ecc9e4af695c6ba0aa5.png

Trivy 中 Local Scanner 是前文提到的本地进行扫描的控制结构。可以看出 Scanner 里定义的行为是 Apply Layer。也就是将对镜像逐层进行扫描。Applier 保存了 Artifact 信息,是联系具体扫描方法和存储信息的结构体。

3. 解析镜像。

上述两个过程理解了总体 Scan 的过程控制,以及具体针对镜像的扫描方法。与镜像相关的还有一个关键过程是如何针对性的解析扫描镜像信息。这一过程实现在 Artifact 中。

  • Artifact

9345f821fe25ee16860cae0a47bfd287.png

  • Walker-Analyzer

56776c7628c3d25c6846f5871cdd4b77.png

Artifact 中有镜像元信息,还有保存解析镜像信息的 Cache 等。主要要考虑的是当前 Trivy 支持的不同种类镜像而进行不同的设置。

另一关键的是 Analyzer。Analyzer 对应的是镜像分层的操作。对不同种类的镜像操作不同。比如对于 OCI v1 的镜像,可能就是每层镜像拉取的完整数据流进行分析。对于 FileSystem,就是层次遍历文件树。

方案选择

了解了 Trivy 的实现后,我们发现直接把 Nydus 打包成 OCI v1 类似的镜像去扫描并不合适。Nydus 镜像内容中层次组织已经发生了变化,也具有按需加载的特点。若直接拉取,不一定保证拉取信息的完备,想要完备支持镜像的拉取也会丢失 Nydus 的特性。

因此我们最终选择在 FS Artifact 方式下优先拓展 Nydus 的镜像扫描能力。

相关的指令是:

$trivy image nydus-image-url  ✗
$trivy fs /path/to/nydus_imgae_mountpoint  ✓

这样做的好处一是可以利用 Nydus 按需加载的特性。我们发现对于很多软件包的扫描并不需要完整的文件内容的下载,很多时候一些局部信息甚至元信息即可判断。这一特点可以利用上 Nydus 的按需加载,从而加快整个镜像扫描的过程。二是特殊格式的镜像都会有挂载文件系统这一操作。这样的方式可以推广到更多的特殊格式镜像。

本课题最终是以工具形式为 Nydus 集成了加速镜像文件系统挂载的能力,这能够适配主流的镜像扫描框架,未来我们可以考虑为社区镜像扫描方案做更深度的集成,比如 Trivy、Clair、Anchore Engine 等,支持直接指定 Nydus 镜像 Reference 做扫描,优化端到端的用户体验。

方案实现

在 Nydus 侧提供镜像扫描的支持,简单指令过程为:

$ nydusify view localhost:5000/ubuntu:latest-nydus
/path/to/root_path
[比起容器简单,直接拿到文件树]


$ trivy fs /path/to/rootpath

Nydusify 是 Nydus 提供的镜像转换,校验与镜像文件系统挂载工具,使用方式可以参考:https://github.com/dragonflyoss/image-service/blob/master/docs/nydusify.md。

上面实现在 Nydusify 中的核心功能由 FileSystemViewer 结构体控制:

93d852a742464eb8614aa6a57406021b.png

此结构体需要保存的成员变量有此过程的一些输入信息和配置信息。SourceParser 用于解析镜像 url。MountPath 是可以指定的文件系统 Mount 的地址。NydusdConfig 是 Mount 过程 Nydus Daemon 的配置。image-url 是必须提供的输入信息。View() 是调用方法。

当 nydusify view 被调用时,主要将发生三个步骤:

1. 解析 image-url ;

2. 根据解析信息,拉取文件系统元数据 Bootstrap;

3. 根据 Bootstrap,Nydusd Mount 文件系统到指定路径。

之后 trivy fs 被调用时,可能发生:

1. 层次遍历挂载的文件系统;

2. 打开镜像挂载点中某个文件时,会触发 FUSE 请求到 Nydus Daemon(Nydusd),Nydusd 会从远端镜像中心按需拉取文件的 Chunk 数据,以提供给扫描引擎分析文件内容。

PART. 3
课题展示

Demo 展示

我们实现了这一功能,如 demo 中演示:

2e7da15004f183237033bdb4321442bd.png

性能测试

我们在 Ubuntu、Wordpress、Tensorflow 等镜像上进行了测试。

测试结果如下:

93c0353b68c6c63a6547545a5d051b37.png

以扫描时延作为衡量标准,可以看出 Nydus 的安全扫描时间要显著少于基本 OCI v1 镜像。这其中优化的幅度与镜像文件系统复杂程度,测试网络环境等因素有关。

我们还从实际镜像扫描场景了解到,很多时候出现安全问题时,例如一些 0day 漏洞,我们需要对大批量镜像进行特定的少量文件元数据或数据的侦测。这种情况就更能体现出 Nydus 镜像懒加载的优势,安全扫描速度能够大幅度提高。

当然,Trivy 对 OCI v1 镜像的扫描优化会影响对比结果。我们 Trivy Image 多次对同一镜像进行扫描,可得到下面的结果:

5862e6d9dd54ab61856197c6cc28d752.png

可以看出,多次扫描之后花费的时延下降。如之前提到,扫描信息匹配会存到 local Cache 中。这是会根据 Blob ID 做为 key 来存储的。因此 Trivy 在扫描同一镜像时可以直接去查询 Cache 而不必重复拉取镜像形成优化。我们在未来也想集成类似的优化,这也是之后我们也想在扫描引擎社区推动更好的支持的原因。

PART. 4
课题拓展

描述

除了扫描镜像内容的安全性,Nydus 本身提供了指令工具 nydus-image inspect 对 Nydus 镜像进行检查。 nydus-image inspect 指令通过检索 Nydus 镜像中包含的文件系统元数据信息,可以查看 Nydus 镜像的组织情况。进一步可以判断 Nydus 镜像是否损坏等。

随着 Nydus 的发展,它支持文件系统 Layout 也从 v5 扩展到 v6。RAFS v6 可以兼容 EROFS,由此获得性能上的进一步提升。 nydus-image inspect 在 RAFS v5 时已经设计,扩展到 RAFS v6 之后,一些子命令为了兼容进行了扩展。但是这样的扩展是为 v5/v6 分开写成的,也就是需要执行子命令时还需要对文件系统格式进行一次判断。

此外,还有一些子命令没有做到兼容性扩展。这样的不完全支持存在一定的遗留问题,没有做到功能的完备和统一。这样的代码组织也损失了易读性,不利于后续的维护,不同 RAFS 格式相关功能的迭代升级中也比较容易产生问题。

事实上,Nydus 已经为这两种格式的文件系统元数据实现了统一的 API 接口。

比如对 RafsSuperInodes, RafsSuperBlock 等结构有统一的方法进行信息的获取,对不同的底层实现进行了屏蔽。因此在此基础之上,有必要对 nydus-image inspect 指令的相关功能进行一次重构。

实现

原有的架构中,存在一个 Executor 结构根据子命令判断调用哪一个具体的方法。比如 Executor 收到子命令 stats 时会调用 cmd_stats 函数,执行并完成结果的输出显示。

我们需要重构的是针对每一条子命令所调用的方法,上层的调用逻辑保持不变,具体而言子命令方法有:

  • cmd_stats

  • cmd_list_dir

  • cmd_change_dir

  • cmd_stat_file

  • cmd_list_blobs

  • cmd_list_prefetch

  • cmd_show_chunk

  • cmd_check_inode

这里不再对每一条子命令调用方法的修改进行详细描述。大概做法是使用 RAFS mod 中统一的 API 实现所有原本的功能逻辑。

测试

我们实现了两种测试。两种测试的目的都是为了保持重构前后功能实现的一致。

测试一:交互形式比对输出结果。

这是一种功能测试。针对每条指令每种可能出现的情况,选取代表性镜像进行测试与比对。

测试二:集成冒烟测试。

这是一项冒烟测试。nydus-image inspect 命令还有 request mode 可以将一条子命令的输出序列化成 json 格式的结果。我们将原有代码的结果序列化成 json 格式作为参考输出,再将重构后代码的输出与之一一比对。选取的镜像为 Nydus 仓库中用于冒烟测试的镜像。这一部分的测试也集成在 Nydus 仓库中,在以后的 CI 里也可以保证这项功能的正确性没被破坏。

成果

Prompt Mode

Stats

996258cb166d155e889b657821243ca5.png

ls

ae8b924d89810823ab719a1cc74c3102.png

Cd

9601d1817f5053eb2264f17b7e95de4d.png

Stat File

d83912dc135528f6a4f63c572427fde9.png

Blobs

ce12068db2d46c83352356c9a2bd30e8.png

Prefetch

e751dd85b1f7aec817b7ee888b6a083c.png

Chunk Offset

392f9114acbf3331c0a19b062a199799.png

Icheck Index

8bca001a8150af234ae7eefbf0810df3.png

Request Mode

Stats

79644dc877b22fb2ca70b28ff9ac9243.png

Prefetch

11a9521980c128576565dcb7cf38b71a.png

Blobs

65bdf9e8fd64e6d1fb32842329ccc385.png

PART. 5
收益与展望

收益

我非常荣幸能参加这次项目的开发,也要向项目组织老师赵新、项目指导助理姚胤楠、严松老师以及 Nydus 社区表示衷心的感谢。

通过这次项目的开发,我收获了许多:知识上,我复习并更深入了解了文件系统,学习了容器镜像格式的组织,还首次尝试了 Go 语言开发,也开始了解软件测试;技能上,我锻炼了协调时间,开放讨论,问题定位的能力。

更重要的是,我认为参与这次项目增加了我对容器场景应用的见识,也提升完整解决方案与系统设计的能力。当然,可能最大的收益是收获了一次快乐的体验!体会了开源合作的快乐,也体会到了开源价值产生的快乐。

展望

此次项目主要是为 Nydus 添加了镜像扫描功能的支持,另外重构了 Nydus 的 Inspect 分析工具。如前文所说,后续还要继续探索 Nydus 镜像扫描集成到扫描引擎的方式,镜像扫描和修复的优化也值得探索。关于 Nydus 镜像格式细节,用户态文件系统,EROFS 等,我还有很多需要学习。

希望能一直参与社区,不断丰富自己容器存储方面的知识,同时也能为社区做出更大的贡献。

 了解更多...

Nydus Star 一下✨:
https://github.com/dragonflyoss/image-service

   本周推荐阅读  

b584911140b949a8cab6be36baaee7a5.png

Nydus —— 下一代容器镜像的探索实践

6e3c0fe638bf792087b08c2c720ff98e.png

Nydus 镜像加速插件迁入 Containerd 旗下

cb97d5e019cddff5fffe9a887ef07d12.jpeg

Nydus | 容器镜像基础

e27b47953390c758c06e42eab1e6d006.png

Dragonfly 和 Nydus Mirror 模式集成实践

592c7c5eda79a245a4b7bbb95d327a5d.jpeg

Nydus容器镜像加速:原理、部署与生产实践指南 在云原生和容器化技术领域,容器镜像的存储与分发效率是影响应用部署速度的关键因素。传统OCI镜像采用全量拉取模式,导致启动延迟高、存储冗余大。Nydus通过引入RAFS镜像格式,实现了块级去重与按需加载的核心原理,将镜像数据切分为内容寻址的块,仅在容器运行时访问文件时才动态拉取对应数据块。这项技术显著提升了容器启动速度,减少了网络带宽消耗和存储空间占用,其价值在于为大规模、高密度部署场景(如Kubernetes弹性伸缩和Serverless冷启动)提供了高效的解决方案。通过集成containerd snaps 阅读详情

相关推荐

Nydus: 优化 AI 场景下的容器镜像加载

Nydus 是一个自定义的文件系统格式(Rafs),专为容器镜像优化设计。它的核心特性是实现镜像文件的按需加载,这对于 AI 场景尤其有用。在 AI 的推理或训练过程中,镜像大小常常从几 GB 到几十 GB 不等,Nydus 可以显著提高这些大型镜像的加载效率。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 626

Nydus:加速容器启动的利器

Nydus 是由 Dragonfly 团队开发的一款高性能容器镜像服务,旨在通过优化容器镜像的加载和分发,显著提升容器的启动速度、降低网络带宽和存储成本,并增强数据完整性。Nydus 实现了基于 RAFS 格式的内容寻址文件系统,是对当前 OCI 镜像规范的重大改进。 Nydus 的核心优势在于其能够实现秒级的容器启动速度,尤其是在处理大型 OCI 镜像时,其性能提升尤为明显。通过 Nydus,

gitblog_00781的博客 1194

Frida实战:SSL Pinning绕过技术全解析

本文详细解析了如何使用Frida工具绕过SSL Pinning技术,包括环境搭建、四种实战绕过方案及常见问题排查指南。通过具体代码示例和实战经验,帮助安全研究人员快速掌握SSL Pinning绕过技术,适用于金融类App的安全测试场景。

weixin_42530732的博客 188

阿里云、蚂蚁开源 Nydus——容器镜像加速服务

近日,Dragonfly 项目引入了一个容器镜像加速服务 nydus。据悉,nydus 是由阿里云和蚂蚁集团的工程师合作开发,并大规模部署在内部的生产环境中。 据Dragonfly 发布的消息,在其的测试中, nydus 能够把常见镜像的启动时间,从数分钟缩短到数秒钟。另外,容器运行时数据一致性校验方面,nydus 镜像不会被解压到本地,同时可以对每一次数据访问进行校验,如果数据被篡改,则可以从远端数据源重新拉取。 nydus 通过优化现有的 OCI 镜像标准格式提供: 容器镜像按需下载,用户不.

寒冰屋的专栏 2699

从安装到跑通第一个例程:Halcon 20.11深度学习版环境搭建全记录

本文详细记录了Halcon 20.11深度学习版环境搭建的全过程,从安装配置到运行第一个例程,特别针对CUDA版本冲突、算子验证和样本数据预处理等常见问题提供解决方案。通过实战案例展示PCB缺陷分类流程,帮助工程师快速掌握工业级图像处理技术,提升深度学习模型在工业质检中的应用效率。

weixin_28739079的博客 221

基于Simulink的前馈解耦SVPWM整流器仿真

本文提出了一种基于Simulink的前馈解耦SVPWM整流器仿真方案,针对传统双闭环控制存在的耦合严重、电压利用率低等问题进行优化。通过前馈补偿dq轴耦合项(ωLiq和ωLid)结合SVPWM调制算法,实现了电流跟踪误差<3%、电压利用率达0.99、THD<3%的性能指标。文章详细阐述了系统架构设计,包括前馈解耦原理推导、SVPWM算法实现步骤,并提供了完整的Simulink建模方法。仿真结果表明,该方案在动态响应速度(25ms)和直流电压纹波(1.1%)方面显著优于传统SPWM控制。同时给出了

MHD0815的博客 162

Nydus —— 下一代容器镜像的探索实践

容器镜像是云原生的基础设施之一,作为容器运行时文件系统视图基础,从它诞生到现在,衍生出了镜像构建、存储、分发到运行时的整个镜像生命周期的各种生态。然而,虽然镜像生态众多,但自它诞生以来,镜像设计本身并没有多少改进。这篇文章要探讨的就是对容器镜像未来发展的一些思考,以及 Nydus 容器镜像的探索和实践。...

金融级分布式架构 893

避坑指南:英飞凌TC3XX的MCMCAN初始化常见错误及解决方法

本文针对英飞凌TC3XX系列MCU的MCMCAN模块初始化难题,深入剖析了寄存器配置时序、总线监控模式误用、中断映射错误及Message RAM地址冲突四大常见陷阱。通过实战代码示例和诊断流程,提供了清晰的避坑指南和解决方案,帮助嵌入式开发者高效解决CAN FD通信故障,确保汽车电子与工业控制项目的稳定运行。

weixin_29193259的博客 246

SOFA Weekly|2023 我们一起加油、本周 Contributor & QA

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 813

串口接收完整一帧数据包的3种方法

本文介绍3种使用串口接受一帧完整数据包的方法,串口接收数据是字节接收的,串口每接收1字节数据,产生一个串口中断,我们在中断中将接收到的数据存放到buf中进行保存,但是数据的发送和接收都是按照帧为单位进行传输的,因此我们要在接收数据的同时判断当前接收的数据是否是完整的一帧。 一般串口完整数据帧的定义:帧头(2字节,例如AA、BB) + 数据长度(2字节) + 数据+ CRC16校验(2字节) + 帧尾(2字节) 帧头、帧尾表示一帧数据的开始和结尾,数据长度表示当前数据帧中负载数据大小,CRC16校...

爱吃鱼的猫 6万+

Android 15.0 app进程保活白名单功能实现

在15.0的系统rom产品开发中,在某些重要的app即使进入后台,产品需求要求也不想被系统杀掉进程,需要app长时间保活,就是app进程保活白名单功能的实现, 所以需要在系统杀进程的时候不杀掉白名单的进程,接下来就看怎么样来实现这些功能

安卓兼职framework和app工程师的博客 639

Nydus | 容器镜像基础

Nydus | 容器镜像基础

金融级分布式架构 1018

【即插即用模块】注意力篇 | TGRS 2025 | ASD:自适应频域解耦,动态拆分高低频+空间注意力,频域空间特征双增强!

摘要: FDMF-Net提出了一种频域解耦多模态融合网络,核心组件为振幅谱解耦模块(ASD)。ASD通过自适应频域拆分和频域-空域协同增强,有效分离模态不变与模态特定特征。该模块利用MLP学习动态阈值调整高低频比例,并通过空间注意力分别强化频域特征,在遥感语义分割任务中实现了细节与结构的协同增强。实验表明,ASD模块能减少模态内冗余,提升特征判别性,为多模态数据融合提供了新思路。代码已开源,适用于需要强化细节与结构的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 308

容器镜像基础(nydus)

包括 nydus 的基本概念、架构和容器镜像加速使用方法。

分享观点和经验,欢迎交流。 1663

多跳问答技术解析:从原理到金融领域实践

多跳问答(Multi-hop QA)是自然语言处理中的高级任务,要求系统通过多步推理整合分散信息来回答问题。其核心技术在于理解文档间的复杂关联,相比单跳问答需要更精细的数据集设计和模型架构。在金融、医疗等专业领域,多跳问答能有效处理如'腾讯大股东投资的港股上市公司'这类需要串联多个信息点的问题。典型实现方案包括MR-Search框架的三级检索器设计,分别处理实体召回、关系匹配和数值比较。当前最佳实践表明,结合稠密检索与稀疏检索的混合策略,配合动态路由机制,能在保持较高精度的同时控制计算成本。这类技术在金融风

weixin_42566072的博客 606

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

直播预告 | SOFAChannel#30《Nydus 开源容器镜像加速服务的演进与未来》

Nydus 在生产环境已经支撑了每日百万级别的加速镜像容器创建,在启动性能,镜像空间优化,网络带宽效率,端到端数据一致性等方面相比 OCIv1 格式有着巨大优势,并可扩展至例如 NPM 包懒加载等数据分发场景。目前 Nydus 由蚂蚁集团、阿里云、字节跳动联合开发,Containerd、Podman 社区接受了 Nydus 运行时作为其社区子项目,也是 Kata Containers 以及 Lin...

金融级分布式架构 262

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Nydus Acceld 去 Containerd 服务化

丁亚东同学为大家带来他在 GitLink 编程夏令营中参加Nydus加速镜像的统一转换框架所做的相关工作分享。大家好!我是来自大连理工大学的 2023 级研究生丁亚东,GitHub ID 是 @Desiki-high。硕士期间主要研究方向是边缘计算,并且十分热爱云原生技术。Nydus GitHub:https://github.com/dragonflyoss/nydus01课题背景1.1O...

金融级分布式架构 572

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

直播倒计时 2 天|SOFAChannel#30 Nydus 开源容器镜像加速服务的演进与未来

Nydus 在生产环境已经支撑了每日百万级别的加速镜像容器创建,在启动性能,镜像空间优化,网络带宽效率,端到端数据一致性等方面相比 OCIv1 格式有着巨大优势,并可扩展至例如 NPM 包懒加载等数据分发场景。目前 Nydus 由蚂蚁集团、阿里云、字节跳动联合开发,Containerd、Podman 社区接受了 Nydus 运行时作为其社区子项目,也是 Kata Containers 以及 Lin...

金融级分布式架构 266

直播倒计时 1 天 | SOFAChannel#34《Dragonfly & Nydus 在 AI 场景下的加速实践》

SOFAChannel#34直播倒计时1天!直播预约1.视频号SOFAGirl直播⬇️点击一键预约⬇️2.添加SOFAGirl 微信加入 SOFAChannel 技术交流群3. 钉钉搜索:22880028764钉钉群同步直播,讲师在线答疑4.扫描????下方二维码或“阅读原文”预约 B 站直播将有机会获得Dragonfly 精美贴纸~????明晚 7 点,不见不散一起期待这次分享吧????Dr...

金融级分布式架构 191

3步实现Harbor镜像70%瘦身:从存储危机到传输加速的实战指南

你是否正面临Docker镜像体积庞大导致的存储成本飙升?还在为跨地域镜像传输耗时过长而影响部署效率?本文将系统讲解Harbor容器镜像仓库的三大压缩技术——分层存储优化、Nydus镜像格式集成和垃圾回收机制,通过具体配置案例和源码解析,帮助你在30分钟内完成环境优化,实现70%的存储节省和传输提速。 ## 镜像膨胀的行业痛点与Harbor解决方案 根据CNCF 2024年调查报告,容器镜像平均...

gitblog_00579的博客 431

直播倒计时 2 天 | SOFAChannel#34《Dragonfly & Nydus 在 AI 场景下的加速实践》

????????????SOFAChannel#34直播倒计时2天!直播预约1.视频号SOFAGirl直播⬇️点击一键预约⬇️2.添加SOFAGirl 微信加入 SOFAChannel 技术交流群3. 钉钉搜索:22880028764钉钉群同步直播,讲师在线答疑4.扫描????下方二维码或“阅读原文”预约 B 站直播将有机会获得Dragonfly 精美贴纸~????本周三晚 19:00欢迎加入直播、参与讨...

金融级分布式架构 159

直播预告 | SOFAChannel#34《Dragonfly & Nydus 在 AI 场景下的加速实践》

Dragonfly 项目简介Dragonfly 是一款基于 P2P 的镜像加速和文件分发系统。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在 AI 数据分发、文件分发、日志分发和镜像分发等领域被大规模使用。在解决大规模文件分发场景下有着无可比拟的优势。自 2017 年开源以来,Dragonfly 被许多大规模互联网公司选用并投入生产使用,并在 2018 年 10 月正式进入 CN...

金融级分布式架构 204
上一篇: Dragonfly 和 Nydus Mirror 模式集成实践
下一篇: SOFA Weekly|2023 我们一起加油、本周 Contributor & QA
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值