Dragonfly 和 Nydus Mirror 模式集成实践

镜像拉取节省 90% 以上,快手基于 Dragonfly 的超大规模分发实践 快手容器云平台旨在为快手不断增长、不断变化和多样化的业务,提供基于容器化部署的超大规模基础设施服务。为了实现这一目标,快手工程师需要解决弹性、稳定性、效率和无服务器架构等挑战,在这些挑战中,镜像分发的稳定性和效率也是最棘手的问题之一。 阅读详情

109fbf935f39e5da068bd6db495f7fa9.gif

文|戚文博(花名:百蓦)

Dragonfly Maintainer

蚂蚁集团软件工程师

746f3bd5180f70607dde07c969eb655f.jpeg

主要负责「基于 P2P 的文件以及镜像加速系统」。

本文 2175 字 阅读 15 分钟

PART. 1
背景

自 17 年开源以来,Dragonfly 被许多大规模互联网公司选用并投入生产使用,并在 18 年 10 月正式进入 CNCF,成为中国第三个进入 CNCF 沙箱级别的项目。2020 年 4 月,CNCF 技术监督委员会(TOC)投票决定接受 Dragonfly 作为孵化级别的托管项目。Dragonfly 多年生产实践经验打磨的下一代产品,它汲取了上一代 Dragonfly1.x[1] 的优点并针对已知问题做了大量的优化。

 
Nydus 作为 Dragonfly 的子项目优化了 OCIv1 镜像格式,并以此设计了一个用户态文件系统,使容器可以按需下载镜像,不再需要下载完整镜像即可启动容器。在最新版本中 Dragonfly 完成了和子项目 Nydus 的集成,让容器启动即可以按需下载镜像,减少下载量。也可以在传输过程中利用 Dragonfly P2P 的传输方式,降低回源流量并且提升下载速度。

PART. 2
实践

7a181973b86083089bf7b3cc0bef8268.png

注:如果没有可用的 Kubernetes 集群进行测试,推荐使用 Kind[2]。

安装 Dragonfly

基于 Kubernetes cluster 详细安装文档可以参考:

https://d7y.io/docs/next/getting-started/quick-start/kubernetes/。

使用 Kind 安装 Kubernetes 集群

创建 Kind 多节点集群配置文件  kind-config.yaml ,配置如下:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
    extraPortMappings:
      - containerPort: 30950
        hostPort: 65001
  - role: worker

使用配置文件创建 Kind 集群:

kind create cluster --config kind-config.yaml

切换 Kubectl 的 context 到 Kind 集群:

kubectl config use-context kind-kind

Kind 加载 Dragonfly 镜像

下载 Dragonfly latest 镜像:

docker pull dragonflyoss/scheduler:latest
docker pull dragonflyoss/manager:latest
docker pull dragonflyoss/dfdaemon:latest

Kind 集群加载 Dragonfly latest 镜像:

kind load docker-image dragonflyoss/scheduler:latest
kind load docker-image dragonflyoss/manager:latest
kind load docker-image dragonflyoss/dfdaemon:latest

基于 Helm Charts

创建 Dragonfly P2P 集群

创建 Helm Charts 配置文件 charts-config.yaml 并且开启 Peer 的预取功能, 配置如下:

scheduler:
  replicas: 1
  metrics:
    enable: true
  config:
    verbose: true
    pprofPort: 18066


seedPeer:
  replicas: 1
  metrics:
    enable: true
  config:
    verbose: true
    pprofPort: 18066
    download:
      prefetch: true


dfdaemon:
  hostNetwork: true
  config:
    verbose: true
    pprofPort: 18066
    metrics: :8000
    download:
      prefetch: true
    proxy:
      defaultFilter: 'Expires&Signature&ns'
      security:
        insecure: true
      tcpListen:
        listen: 0.0.0.0
        port: 65001
      registryMirror:
        dynamic: true
        url: https://index.docker.io
      proxies:
        - regx: blobs/sha256.*


manager:
  replicas: 1
  metrics:
    enable: true
  config:
    verbose: true
    pprofPort: 18066

使用配置文件部署 Dragonfly Helm Charts:

$ helm repo add dragonfly https://dragonflyoss.github.io/helm-charts/
$ helm install --wait --create-namespace --namespace dragonfly-system dragonfly dragonfly/dragonfly -f charts-config.yaml
NAME: dragonfly
LAST DEPLOYED: Wed Oct 19 04:23:22 2022
NAMESPACE: dragonfly-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the scheduler address by running these commands:
  export SCHEDULER_POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=scheduler" -o jsonpath={.items[0].metadata.name})
  export SCHEDULER_CONTAINER_PORT=$(kubectl get pod --namespace dragonfly-system $SCHEDULER_POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  kubectl --namespace dragonfly-system port-forward $SCHEDULER_POD_NAME 8002:$SCHEDULER_CONTAINER_PORT
  echo "Visit http://127.0.0.1:8002 to use your scheduler"


2. Get the dfdaemon port by running these commands:
  export DFDAEMON_POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=dfdaemon" -o jsonpath={.items[0].metadata.name})
  export DFDAEMON_CONTAINER_PORT=$(kubectl get pod --namespace dragonfly-system $DFDAEMON_POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  You can use $DFDAEMON_CONTAINER_PORT as a proxy port in Node.


3. Configure runtime to use dragonfly:
  https://d7y.io/docs/getting-started/quick-start/kubernetes/

检查 Dragonfly 是否部署成功:

$ kubectl get po -n dragonfly-system
NAME                                 READY   STATUS    RESTARTS       AGE
dragonfly-dfdaemon-rhnr6             1/1     Running   4 (101s ago)   3m27s
dragonfly-dfdaemon-s6sv5             1/1     Running   5 (111s ago)   3m27s
dragonfly-manager-67f97d7986-8dgn8   1/1     Running   0              3m27s
dragonfly-mysql-0                    1/1     Running   0              3m27s
dragonfly-redis-master-0             1/1     Running   0              3m27s
dragonfly-redis-replicas-0           1/1     Running   1 (115s ago)   3m27s
dragonfly-redis-replicas-1           1/1     Running   0              95s
dragonfly-redis-replicas-2           1/1     Running   0              70s
dragonfly-scheduler-0                1/1     Running   0              3m27s
dragonfly-seed-peer-0                1/1     Running   2 (95s ago)    3m27s

创建 Peer Service 配置文件 peer-service-config.yaml 配置如下:

apiVersion: v1
kind: Service
metadata:
  name: peer
  namespace: dragonfly-system
spec:
  type: NodePort
  ports:
    - name: http
      nodePort: 30950
      port: 65001
  selector:
    app: dragonfly
    component: dfdaemon
    release: dragonfly

使用配置文件部署 Peer Service:

kubectl apply -f peer-service-config.yaml

Containerd 集成 Nydus

生产环境 Containerd 集成 Nydus 详细文档可以参考:

https://github.com/dragonflyoss/image-service/blob/master/docs/containerd-env-setup.md#nydus-setup-for-containerd-environment。

下面例子使用 Systemd 管理 nydus-snapshotter 服务。

下载安装 Nydus 工具

下载 containerd-nydus-grpc 二进制文件, 下载地址为:

https://github.com/containerd/nydus-snapshotter/releases/latest 。

NYDUS_SNAPSHOTTER_VERSION=0.3.0
wget https://github.com/containerd/nydus-snapshotter/releases/download/v$NYDUS_SNAPSHOTTER_VERSION/nydus-snapshotter-v$NYDUS_SNAPSHOTTER_VERSION-x86_64.tgz
tar zxvf nydus-snapshotter-v$NYDUS_SNAPSHOTTER_VERSION-x86_64.tgz

安装 containerd-nydus-grpc 工具:

sudo cp nydus-snapshotter/containerd-nydus-grpc /usr/local/bin/

下载 nydus-image、nydusd 以及 nydusify 二进制文件, 下载地址为

https://github.com/dragonflyoss/image-service/releases/latest :

NYDUS_VERSION=2.1.0
wget https://github.com/dragonflyoss/image-service/releases/download/v$NYDUS_VERSION/nydus-static-v$NYDUS_VERSION-linux-amd64.tgz
tar zxvf nydus-static-v$NYDUS_VERSION-linux-amd64.tgz

安装 nydus-image、nydusd 以及 nydusify 工具:

sudo cp nydus-static/nydus-image nydus-static/nydusd nydus-static/nydusify /usr/local/bin/

Containerd 集成

Nydus Snapshotter 插件

配置 Containerd 使用 nydus-snapshotter 插件, 详细文档参考:

https://github.com/dragonflyoss/image-service/blob/master/docs/containerd-env-setup.md#configure-and-start-containerd。

首先修改 Containerd 配置在 /etc/containerd/config.toml 添加下面内容:

[proxy_plugins]
  [proxy_plugins.nydus]
    type = "snapshot"
    address = "/run/containerd-nydus/containerd-nydus-grpc.sock"


[plugins.cri]
  [plugins.cri.containerd]
    snapshotter = "nydus"
    disable_snapshot_annotations = false

重启 Containerd 服务:

sudo systemctl restart containerd

验证 Containerd 是否使用 nydus-snapshotter 插件:

$ ctr -a /run/containerd/containerd.sock plugin ls | grep nydus
io.containerd.snapshotter.v1          nydus                    -              ok

Systemd 启动

Nydus Snapshotter 服务

Nydusd 的 Mirror 模式配置详细文档可以参考:

https://github.com/dragonflyoss/image-service/blob/master/docs/nydusd.md#enable-mirrors-for-storage-backend。

创建 Nydusd 配置文件 nydusd-config.json,配置如下:

{
  "device": {
    "backend": {
      "type": "registry",
      "config": {
        "mirrors": [
          {
            "host": "http://127.0.0.1:65001",
            "auth_through": false,
            "headers": {
              "X-Dragonfly-Registry": "https://index.docker.io"
            }
          }
        ],
        "scheme": "https",
        "skip_verify": false,
        "timeout": 10,
        "connect_timeout": 10,
        "retry_limit": 2
      }
    },
    "cache": {
      "type": "blobcache",
      "config": {
        "work_dir": "/var/lib/nydus/cache/"
      }
    }
  },
  "mode": "direct",
  "digest_validate": false,
  "iostats_files": false,
  "enable_xattr": true,
  "fs_prefetch": {
    "enable": true,
    "threads_count": 10,
    "merging_size": 131072,
    "bandwidth_rate": 1048576
  }
}

复制配置文件至

 /etc/nydus/config.json 文件:

sudo mkdir /etc/nydus && cp nydusd-config.json /etc/nydus/config.json

创建 Nydus Snapshotter Systemd 配置文件 nydus-snapshotter.service , 配置如下:

[Unit]
Description=nydus snapshotter
After=network.target
Before=containerd.service


[Service]
Type=simple
Environment=HOME=/root
ExecStart=/usr/local/bin/containerd-nydus-grpc --config-path /etc/nydus/config.json
Restart=always
RestartSec=1
KillMode=process
OOMScoreAdjust=-999
StandardOutput=journal
StandardError=journal


[Install]
WantedBy=multi-user.target

复制配置文件至

 /etc/systemd/system/ 目录:

sudo cp nydus-snapshotter.service /etc/systemd/system/

Systemd 启动 Nydus Snapshotter 服务:

$ sudo systemctl enable nydus-snapshotter
$ sudo systemctl start nydus-snapshotter
$ sudo systemctl status nydus-snapshotter
● nydus-snapshotter.service - nydus snapshotter
     Loaded: loaded (/etc/systemd/system/nydus-snapshotter.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-10-19 08:01:00 UTC; 2s ago
   Main PID: 2853636 (containerd-nydu)
      Tasks: 9 (limit: 37574)
     Memory: 4.6M
        CPU: 20ms
     CGroup: /system.slice/nydus-snapshotter.service
             └─2853636 /usr/local/bin/containerd-nydus-grpc --config-path /etc/nydus/config.json


Oct 19 08:01:00 kvm-gaius-0 systemd[1]: Started nydus snapshotter.
Oct 19 08:01:00 kvm-gaius-0 containerd-nydus-grpc[2853636]: time="2022-10-19T08:01:00.493700269Z" level=info msg="gc goroutine start..."
Oct 19 08:01:00 kvm-gaius-0 containerd-nydus-grpc[2853636]: time="2022-10-19T08:01:00.493947264Z" level=info msg="found 0 daemons running"

转换 Nydus 格式镜像

转换 python:latest 镜像为 Nydus 格式镜像, 可以直接使用已经转换好的 

dragonflyoss/python-nydus:latest 镜像, 跳过该步骤。转换工具可以使用Nydusify[3] 也可以使用 acceld[4]。

登陆 Dockerhub

转换 Nydus 镜像, 

DOCKERHUB_REPO_NAME 环境变量设置为用户个人的镜像仓库:

DOCKERHUB_REPO_NAME=dragonflyoss
sudo nydusify convert --nydus-image /usr/local/bin/nydus-image --source python:latest --target $DOCKERHUB_REPO_NAME/python-nydus:latest

Nerdctl 运行 Nydus 镜像

使用 Nerdctl 运行 python-nydus:latest , 过程中即通过 Nydus 和 Dragonfly 下载镜像:

sudo nerdctl --snapshotter nydus run --rm -it $DOCKERHUB_REPO_NAME/python-nydus:latest

搜索日志验证 Nydus 基于 Mirror 模式通过 Dragonfly 分发流量:

$ grep mirrors /var/lib/containerd-nydus/logs/**/*log
[2022-10-19 10:16:13.276548 +00:00] INFO [storage/src/backend/connection.rs:271] backend config: ConnectionConfig { proxy: ProxyConfig { url: "", ping_url: "", fallback: false, check_interval: 5, use_http: false }, mirrors: [MirrorConfig { host: "http://127.0.0.1:65001", headers: {"X-Dragonfly-Registry": "https://index.docker.io"}, auth_through: false }], skip_verify: false, timeout: 10, connect_timeout: 10, retry_limit: 2 }

PART. 3

性能测试

测试 Nydus Mirror 模式与 Dragonfly P2P 集成后的单机镜像下载的性能。测试是在同一台机器上面做不同场景的测试。由于机器本身网络环境、配置等影响,实际下载时间不具有参考价值,但是不同场景下载时间所提升的比率是有重要意义的。

0a8abd220c4407f1e9f5e87e805b5491.png

●OCIv1: 使用 Containerd 直接拉取镜像并且启动成功的数据。

●Nydus Cold Boot: 使用 Containerd 通过 Nydus 拉取镜像,没有命中任何缓存并且启动成功的数据。

●Nydus & Dragonfly Cold Boot: 使用 Containerd 通过 Nydus 拉取镜像,并且基于 Nydus Mirror 模式流量转发至 Dragonfly P2P,在没有命中任何缓存并且启动成功的数据。

●Hit Dragonfly Remote Peer Cache: 使用 Containerd 通过 Nydus 拉取镜像,并且基于 Nydus Mirror 模式流量转发至 Dragonfly P2P,在命中 Dragonfly 的远端 Peer 缓存的情况下并且成功启动的数据。

●Hit Dragonfly Local Peer Cache: 使用 Containerd 通过 Nydus 拉取镜像,并且基于 Nydus Mirror 模式流量转发至 Dragonfly P2P,在命中 Dragonfly 的本地 Peer 缓存的情况下并且成功启动的数据。

●Hit Nydus Cache: 使用 Containerd 通过 Nydus 拉取镜像,并且基于 Nydus Mirror 模式流量转发至 Dragonfly P2P,在命中 Nydus 的本地缓存的情况下并且成功启动的数据。

测试结果表明 Nydus Mirror 模式和 Dragonfly P2P 集成。使用 Nydus 下载镜像对比OCIv1的模式,能够有效减少镜像下载时间。Nydus 冷启动和 Nydus & Dragonfly 冷启动数据基本接近。

其他命中 Dragonfly Cache 的结果均好于只使用 Nydus 的情况。最重要的是如果很大规模集群使用 Nydus 拉取镜像,会将每个镜像层的下载分解按需产生很多 Range 请求。增加镜像仓库源站 QPS 。

而 Dragonfly 可以基于 P2P 技术有效减少回源镜像仓库的请求数量和下载流量。最优的情况,Dragonfly 可以保证大规模集群中每个下载任务只回源一次。

|相关链接|

[1]Dragonfly1.x:

https://github.com/dragonflyoss/Dragonfly

[2]Kind:

https://kind.sigs.k8s.io/

[3]Nydusify:

https://github.com/dragonflyoss/image-service/blob/master/docs/nydusify.md

[4]Acceld:

https://github.com/goharbor/acceleration-service

|社区相关网址|

Dragonfly 社区官网网站:

https://d7y.io/

Github 仓库:

https://github.com/dragonflyoss/Dragonfly2

Slack Channel: 

#dragonflyonCNCF Slack

Discussion Group:

dragonfly-discuss@googlegroups.com

Twitter:@dragonfly_oss

Nydus 社区官方网站:

https://nydus.dev/

Github 库:

https://github.com/dragonflyoss/image-service

Slack Channel:  #nydus

 点击原文,了解更多…

Dragonfly Star 一下✨:
https://github.com/dragonflyoss/Dragonfly2

   本周推荐阅读  

08d9b3e3dbdd073482539ce05acbf354.png

Dragonfly 基于 P2P 的文件和镜像分发系统

1ca75116a4458f85d8876e7815f05159.png

Dragonfly 中 P2P 传输协议优化

9c0c976a565ae16f0b4aefd751664b04.png

Nydus | 容器镜像基础

380734e4731b05eb8fb0d589b3d40ed4.png

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

784656d28d915fcdbe640a252677e570.jpeg

杰理的蓝牙芯片的key是什么?以及该如何添加key?杰理key文件原理 很多的工程师,在开发杰理蓝牙芯片的第一步就会有一个很深的疑惑,关于key的 1、什么是key文件? 2、Key文件是如何产生的? 3、为什么需要他key文件? 4、如何添加key文件? 5、以及实际开发中的一些报错该如何处理? 阅读详情

相关推荐

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

为Dragonfly配置私有仓库

为Dragonfly配置私有仓库 环境 OS: Centos 7 Docker version Client: Version: 18.06.1-ce API version: 1.38 Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:23:03 2018 OS/Arch:

gbh18682030862的博客 625

【胡学长 带你学 Global Mapper 】如何将影像地图转换为国家2000坐标系

多部门联合开展工作坐标数据不匹配怎么办?Hi,我是胡学长!今天教大家如何利用Global Mapper将谷歌影像数据转换为国家2000坐标系影像数据 。

一起来交流学习吧 1万+

Dragonfly 社区技术分享|Nydus 远端转换缓存实现

在 2023 年的开源活动中,于强同学参加并负责了 Nydus 开源存储构建与分发支持课题的相关工作。大家好!我是来自西北工业大学的于强,在开源之夏 2023 中报名参与了 Nydus 项目,并在导师的帮助下顺利完成了题目。通过此次活动,不仅对容器和镜像的底层技术有了更进一步的了解,也体验了如何开始参与一个开源项目。Nydus GitHub:https://github.com/dragonfly...

金融级分布式架构 815

[WeChatMsg]导出csv格式微信聊天记录的手把手教程

手把手教大家如何导出自己的聊天记录得到csv文件,即使是电脑小白也可以轻松学会o(* ̄▽ ̄*)ブ

weixin_51094633的博客 1万+

绝缘检测是什么? 绝缘检测原理 绝缘检测检测的是什么?那个量?电压?电流?电阻?

绝缘电阻是电气设备和电气线路最基本的绝缘指标。对于低压电气装置的交接试验,常温下电动机、配电设备和配电线路的绝缘电阻不应低于0.5MΩ(对于运行中的设备和线路,绝缘电阻不应低于1MΩ/kV)。 绝缘电阻的正确测量方法 现代生活日新月异,人们一刻也离不开电。在用电过程中就存在着用电安全问题,在电器设备中,例如电机、电缆、家用电器等。 影响因素 环境温湿度 一般材料的绝缘电阻值随环境温湿度的升高而减小。相对而言,表面电阻(率)对环境湿度比较敏感,而体电阻(率)则对温度较为敏感。 湿度增加,表面泄漏增大,导体电导

dianqicyuyan的博客 2万+

Dragonfly 社区技术分享|Nydus Registry 鉴权与 Mount 改进

在 2023 年的开源活动中,李锐同学参加了 Nydus 容器开源生态集成课题的相关工作。大家好!我是来自国防科大的李锐,在开源之夏 2023 中报名参与了 Nydus 项目,在导师的指导下完成了社区的两个改进性题目,体验了如何从零开始参与一个开源项目。Nydus GitHub:https://github.com/dragonflyoss/nydus01容器运行时与镜像1.1OCI 容器运行时...

金融级分布式架构 470

源码编译部署篇(二)源码编译milvus成功后如何启动standalone并调试成功!

由于Milvus官方文档只提及如何使用docker安装部署Milvus,关于源码安装方式篇幅较少,因此,我整理撰写了如何通过源码编译方式成功安装Milvus,详见此篇。之所以选择这种复杂的安装方式,可以调试源码进而熟悉Milvus如何搭建整个框架支持AI上层应用功能。根据上篇步骤部署虽然可以成功,然而,我却不能成功启动Milvus服务,这个问题困扰了一两天,现在终于得以解决并能成功调试Milvus源码。接下来,分为三个部分介绍如何启动和成功调试。

qq_43893755的博客 3368

2023 GLCC 报名开启啦|Dragonfly & Nydus 项目一览

2023GLCC 报名开启—— GitLink 编程夏令营 ——Dragonfly & Nydus 项目一览活动介绍GitLink 编程夏令营(GLCC),是在 CCF 中国计算机学会指导下,由 CCF 开源发展委员会(CCF ODC)举办的面向全国高校学生的暑期编程活动。活动将覆盖近千所高校,并联合各大开源基金会、开源企业、开源社区、开源专家,旨在鼓励青年学生通过参加真实的开源软件开发...

金融级分布式架构 695

从零开始:Ubuntu 24.04 LTS + Win11双系统安装教程

本文将简单直白介绍如何从零开始在同一台电脑上安装 Ubuntu 24.04 LTS 和 Windows 11,你可以在需要进行专业开发或运维工作时,轻松切换到 Ubuntu,享受其带来的高效与自由;而在日常学习生活和娱乐休闲时,依然可以无缝使用熟悉的 Windows 环境。

萑澈的博客 8116

YOLOV12融合MSDA多尺度空洞注意力:突破尺度限制的科研实践指南

MSDA通过多尺度空洞注意力的设计,为YOLOV12突破尺度检测瓶颈提供了有效方案。从原理理解到代码实现,再到集成调优,每一步都是科研中“解决实际问题”的具体实践。如果你在实验中发现某类尺度目标的检测仍有不足,可以尝试结合数据增强(如随机缩放、多尺度训练)来强化模型对尺度变化的鲁棒性。科研的价值在于不断解决真实难题,希望这份指南能真正帮你在目标检测的尺度感知领域找到新的突破点,祝你在科研探索中持续收获新的见解与成果。

FJN110的博客 242

docker安装部署dragonfly2镜像加速服务

​ Dragonfly 作为龙蜥社区的镜像加速标准解决方案,是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。​ 现阶段 Dragonfly 基于 Dragonfly1.x 演进而来,在保持 Dragonfly1.x 原有核心能力的基础上,Dragonfly 在系统架构设计、产品能力、使用场景等几大方向上进行了全面升级。

ll535299的博客 2596

LDRA Testbed(TBrun)软件单元测试_实例讲解(对多次调用的函数打桩)

在之前的文章《LDRA Testbed(TBrun)软件单元测试_操作指南》中,已经讲解了如何使用TBrun进行软件单元测试的基本操作步骤。本篇文章将结合实例进一步讲解被测函数中包含多次调用其他函数时,如何对其打桩来实现测试目的(详细的操作流程本文不再重述,若有不清楚的,可以结合之前的操作指南一起来看)。本文以一个被测函数作为示例,讲解了如何使用Testbed(TBrun)对涉及到多次调用其他函数的被测函数进行单元测试。本文的示例可能比较简单,但是思路、方法和流程都是通用的,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1462

解决模型仓库带宽瓶颈问题!TorchServe 使用 Dragonfly 加速分发模型

Dragonfly GitHub:https://github.com/dragonflyoss/Dragonfly2本文主要解决在TorchServe模型拉取时,存在的中心化的模型仓库带宽瓶颈问题。当在 TorchServe 下载模型的时候,文件相对较大且会有并发下载模型的场景。这样很容易导致存储带宽被打满,从而引起下载过慢的情况,影响推理服务的使用。这种方式比较好的解决方案是使用 Drag...

金融级分布式架构 717

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

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

阿里巴巴Dragonfly多机部署实战指南

阿里巴巴Dragonfly多机部署实战指南 前言 Dragonfly是阿里巴巴开源的一款基于P2P技术的智能镜像分发系统,特别适合大规模容器化场景下的镜像分发。本文将详细介绍如何在实际生产环境中部署Dragonfly的多机集群,帮助读者构建高效的镜像分发网络。 部署架构概述 在多机部署场景下,Dragonfly采用典型的客户端-服务器架构: SuperNode:作为中心调度节点,负责协调P2P网...

gitblog_00622的博客 699

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

如何使用 Harbor 和 Dragonfly 优化 Kubernetes 集群镜像拉取速度

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !本篇文章则分享在大规模的 Kubernetes 集群中,通过 Harbor 与 Dragonfly 来优化镜像的拉取速度。Dragonfly(蜻蜓)简介项目地址:https://github.com/dragonflyoss/Dragonfly2官方文档: https://d7y.io/zh/docs/ ...

easylife206的专栏 1299

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Dragonfly 发布 2.3 版本,新增持久化缓存、资源搜索及 Vortex 协议等新特性

Dragonfly 发布 2.3.0 版本,新增多个功能特性并进行安全增强。同时,子项目 Nydus 也增加多个功能特性。本篇博客将介绍最重要的变更。有关功能增强及漏洞修复的完整列表,请查看 d7y.io 官网。

2401_85046472的博客 1039

技术解读|Triton Server 基于 Dragonfly 加速分发模型

Dragonfly GitHub:https://github.com/dragonflyoss/Dragonfly2本文主要解决在Triton Server模型拉取时,存在的中心化的模型仓库带宽瓶颈问题。当在 Triton Server 下载模型的时候,文件相对较大且会有并发下载模型的场景。这样很容易导致存储带宽被打满,从而引起下载过慢的情况,影响推理服务的使用。Triton Server ...

金融级分布式架构 926

从崩溃到自愈:Nydus故障转移与热升级的无缝容器体验

你是否曾因容器运行时崩溃导致业务中断而焦头烂额?是否在深夜被紧急升级任务惊醒,担心服务不可用窗口过长?DragonflyOSS Nydus通过创新的故障转移(Failover)与热升级(Hot Upgrade)机制,彻底改变了容器运行时的可靠性与可维护性。本文将深入剖析这两种核心能力的技术实现,展示如何在保障业务连续性的前提下,实现零感知的故障恢复与版本迭代。 读完本文你将获得: - 理解Nyd...

gitblog_01034的博客 558

Dragonfly服务端部署指南:如何搭建高性能supernode集群

Dragonfly是一个开源的P2P文件分发系统,通过其核心组件supernode(超级节点)集群实现高效的文件下载加速。本文将详细介绍如何搭建高性能的Dragonfly supernode集群,帮助您快速部署企业级的文件分发系统。🚀 ## 📋 准备工作与环境要求 在开始部署Dragonfly服务端之前,需要确保系统满足以下要求: **Docker部署方式**: - Git版本:1.9.

gitblog_00943的博客 573

dragonfly k8s 部署

在dragonfly客户端执行 (填写旧redis地址)修改nodeport。

Sunnyang123的博客 394

Dragonfly 开源项目教程

Dragonfly 开源项目教程 Dragonfly项目地址:https://gitcode.com/gh_mirrors/dragonfly6/Dragonfly 项目介绍 Dragonfly 是由阿里巴巴开发的一个开源分布式文件分发系统,旨在解决大规模文件分发和镜像分发的问题。它通过 P2P 技术优化文件传输,提高分发效率,减少带宽消耗。Dragonfly 支持 Docker 镜像和普通文件...

gitblog_00512的博客 777

龙翼(Dragonfly):高效、安全的云原生文件分发与镜像加速器

龙翼(Dragonfly):高效、安全的云原生文件分发与镜像加速器 Dragonfly2Dragonfly2 是一个开源的 CDN 加速和负载均衡器,用于加速内容分发和降低网络延迟,支持云原生应用程序。 * CDN 加速、负载均衡器、云原生应用程序加速 * 有什么特点:高性能和可扩展性、支持多种网络协议和云平台、易于集成和部署项目地址:https://gitcode.com/gh_mirro...

gitblog_00071的博客 872

Dragonfly多机部署实战指南:构建高效P2P镜像分发网络

Dragonfly多机部署实战指南:构建高效P2P镜像分发网络 前言 在现代容器化环境中,镜像分发效率直接影响着应用的部署速度。传统中心化的镜像分发方式在面对大规模集群时常常成为性能瓶颈。Dragonfly作为一款开源的P2P文件分发系统,通过智能的P2P网络技术显著提升了镜像分发效率。本文将详细介绍如何在多机环境中部署Dragonfly系统,构建高效的镜像分发网络。 核心概念解析 在开始部署前,...

gitblog_00302的博客 572

Dragonfly快速入门:5分钟完成P2P文件分发系统安装与配置的完整指南

Dragonfly是一个基于P2P技术的智能文件分发系统,专门用于解决大规模文件分发和容器镜像加速的难题。通过智能调度和节点间协作,Dragonfly能够显著提升下载速度,同时降低源站带宽压力。本指南将带您在5分钟内完成Dragonfly的完整安装与配置,让您快速体验这款强大的文件分发工具。 ## 🚀 Dragonfly核心优势 Dragonfly采用P2P文件分发架构,相比传统下载方式具有

gitblog_00927的博客 497

Docker 环境基于 Dragonfly 的 Kubernetes 多集群镜像分发实践

文|唐荦彦深信服高级开发工程师主要负责 SASE 云化架构以及基础设施建设本文 3056 字,阅读 6 分钟01你将在本文学到什么?多 K8S 集群镜像分发方案Dragonfly 的理解Harbor 的预热机制Dragonfly 的使用以及排障02K8S 多集群镜像分发问题在边缘云架构的生产环境下,演进过程中,一开始的镜像分发方案如下:每个边缘集群都存在节点的 Harbor 仓库,进行缓存...

金融级分布式架构 1050
上一篇: 已来到 “后云原生时代” 的我们,如何规模化运维?
下一篇: 已来到 “后云原生时代” 的我们,如何规模化运维?
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值