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

Docker与Dragonfly详细多机部署 声明 1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进添砖加瓦。 一:部署环境 1:需要至少两台以上的主机节点,一台充当supernode,另一台为dfclient 2:每个主机节点都已部署docker守护程序 3:s 阅读详情

910d1d45917cbdc85d6501d17952ded7.gif

文|唐荦彦

深信服高级开发工程师

主要负责 SASE 云化架构以及基础设施建设

本文  3056  字,阅读  6  分钟

01

你将在本文学到什么?

  • 多 K8S 集群镜像分发方案

  • Dragonfly 的理解

  • Harbor 的预热机制

  • Dragonfly 的使用以及排障

02

K8S 多集群镜像分发问题

在边缘云架构的生产环境下,演进过程中,一开始的镜像分发方案如下:

56530e9aadfe7cadf5fcc134a71288fe.png

每个边缘集群都存在节点的 Harbor 仓库,进行缓存操作,当边缘集群集体崩溃重启过程中,不会引发所有 worker 上中心仓拉取镜像。

带来的问题是:

  • 每套环境一个 Harbor,导致部署、维护的困难。

  • Harbor 的复制策略比较简单,无法单例执行。并且重试非常占用中心仓带宽。

那么面对这种场景存在以下两种方案:

  • Harbor 仓库分级复制策略

  • P2P 镜像分发策略

Harbor 仓库分级复制策略,存在以下问题:

  • 如何进行分级划分

  • 升级过程,如果节点所处的是第三级,如何触发复制策略加速缓存

  • 每个节点增加了安全暴露面

  • 节点的不断增加,后续是否需要 3 级、4 级、5 级,维护管理成本指数增加。

所以在项目中,我的选择是 Dragonfly 的 P2P 镜像分发策略。

03

Dragonfly 是什么

在理解过程中,首先需要搞懂以下几个问题:

1. P2P 是什么?

2. 镜像的分层拉取策略。

什么是 P2P?

此 P2P 不是金融圈里面经常爆雷的,而是 Peer to Peer 网络技术。有几个比较突出的使用:

  • 迅雷;

  • 某夭折的播放器(快 B);

  • 国内一些视频网站白嫖用户网络的 P2P CDN。

   为什么需要 P2P 网络?   

P2P 网络对应的就是传统网络传输 C/S 模式。传统模式下,所有的客户端请求数据下载都需要访问服务器,那么服务器的压力会非常大,当客户端多的情况下,网络带宽也存在问题。

以下来自 WIKI 百科:

对等式网络(英语:peer-to-peer,简称 P2P),又称点对点技术,是去中心化、依靠用户群(peers)交换信息的互联网体系。它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。

镜像分层拉取

Docker 镜像通过分层进行资源共享,通过 copy-on-write 完成文件隔离。在执行 Pull 的时候,可以看到:

c1c792ed5250: Already exists
fcac137f6aa5: Already exists
c31aa26549dd: Already exists
04699d7e44fb: Pull complete

可以分析得出,在 Docker pull 时,先会判断本地是否存在当前层,如果没有则从远端服务器拉取层。

Dragonfly  架构

6669b2b442a448c08ffc69a02ef51e3d.png

组件包括:

Manager: 多 Dragonfly 调度节点进行管理,提供了 UI 管理界面、镜像预热机制。

Scheduler:

  • 基于机器学习的多场景自适应智能 P2P 节点调度,为当前下载节点选择最优父节点;

  • 构建 P2P 下载网络的有向无环图;

  • 根据不同特征值评估节点下载能力, 剔除异常节点;

  • 当下载失败情况,主动通知 Dfdaemon 进行回源下载。

Dfdaemon:(分为 Peer、Seed Peer)

  • 基于 gRPC 提供下载功能, 并提供多源适配能力;

  • 开启 Seed Peer 模式可以作为 P2P 集群中回源下载节点, 也就是整个集群中下载的根节点;

  • 为镜像仓库或者其他 HTTP 下载任务提供代理服务;

  • 下载任务基于 HTTP 或 HTTPS 或其他自定义协议。

使用场景流程说明如下:(当需要下载某一层镜像时)

1. Docker 在请求下载镜像时,通过配置 Docker http proxy 代理,将请求转发到 Peer 节点。

2. Peer 节点进行本地缓存判断,查看是否存在该层镜像;

  • 是,则直接响应。如图:

29d9416ed0248d9609406e38afce0828.png

3. 如果当前 Peer 不存在,将当前请求转发到 Scheduler;

4. Scheduler 将判断 Seed Peer 中是否存在:

  • 是,则将对应的地址返回,通知 Peer 去指定的 Seed Peer 拉取资源,如图:

157bbb28688e9d417d59c10d8bd0e6d7.png

5. 否,则通知 Seed Peer 回源拉取,拉取成功后,Peer 再进行拉取。

92f0ab834f191765b7dbb489037a7ad7.png

最长路径:Docker -> Peer -> Seed Peer -> 源站 -> Seed Peer -> Peer -> Docker。

04

Dragonfly 操作实践(Docker 版)

由于 K8s 版本过于简单,封装了 Docker 手动操作部分,这里讲源码版本如何使用。

源码安装

从上面已经了解到:Docker pull 通过 http proxy 配置即可通过 Peer 拉取镜像,那么操作就简单了。

步骤如下:

1. 配置 Docker;

2. 安装依赖组件:MySQL、Redis、Jaeger(为了研究操作路径以及代码);

3. 配置 Manager、Scheduler、Seed Peer、Peer;

详细步骤如下:

a

配置 Docker

  • 配置 http proxy 

vi /etc/systemd/system/docker.service.d/http-proxy.conf


[Service]
Environment="HTTP_PROXY=http://127.0.0.1:65001"
Environment="HTTPS_PROXY=http://127.0.0.1:65001"
  • 私有仓库的话,配置忽略证书 insecure-registries;

vi /etc/docker/daemon.json


{
  "insecure-registries": ["your.private.registry"]
}

重启 Docker:systemctl restart docker。

b

安装依赖

MySQL: 

docker run -d --name dragonfly-mysql --restart=always -p 3306:3306 \
         --env MARIADB_USER="dragonfly" \
         --env MARIADB_PASSWORD="dragonfly" \
         --env MARIADB_DATABASE="manager" \
         --env MARIADB_ALLOW_EMPTY_ROOT_PASSWORD="yes" \
         mariadb:10.6

Redis:

docker run -d --name dragonfly-redis --restart=always -p 6379:6379 \
        redis:6-alpine \
        --requirepass "dragonfly"

Jaeger:

docker run --rm --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.48

c

配置组件

私有仓库的情况下,需要给 Dragonfly 代理也配置一个私有证书;如果不配置,在拉取过程中,会偶发 pull 失败的情况,报错如下:

http: server gave HTTP response to HTTPS client

生成一个 CA 证书私钥。

openssl genrsa -out ca.key 2048

打开 OpenSSL 配置文件 openssl.conf。设置 basicConstraints 为 true,然后你就能修改这些值。

[ req ]
#default_bits = 2048
#default_md = sha256
#default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
extensions               = v3_ca
req_extensions           = v3_ca
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (eg, fully qualified host name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
[ v3_ca ]
basicConstraints         = CA:TRUE

生成 CA 证书。

openssl req -new -key ca.key -nodes -out ca.csr -config openssl.conf
openssl x509 -req -days 36500 -extfile openssl.conf \
    -extensions v3_ca -in ca.csr -signkey ca.key -out ca.crt

⚠️注意:配置只说明需要改的地方。

   配置 Peer   

jaeger: "http://127.0.0.1:14268/api/traces"
console: true  # 打开可从窗口查看日志
scheduler:  # 配置调度器
  .....  省略
  netAddrs:
    - type: tcp
      addr: 127.0.0.1:8002




proxy:
  security:
    insecure: true
  tcpListen:
    listen: 0.0.0.0
    port: 65001
  proxies:
    - regx: blobs/sha256.*
  hijackHTTPS:
    # CA certificate's path used to hijack https requests
    cert: ca.crt   
    key: ca.key
    hosts:
      - regx: your.private.registry
        insecure: true

   配置 Seed Peer   

jaeger: "http://127.0.0.1:14268/api/traces"
console: true  # 打开可从窗口查看日志
scheduler:
    enable: true
    netAddrs:
      - type: tcp
        addr: 127.0.0.1:65003
        # scheduler list refresh interval
        refreshInterval: 10s
    seedPeer:
      # Dfdaemon enabled seed peer mode.
      enable: true
      # Seed peer type includes super, strong and weak.
      type: super
      # Seed peer cluster id.
      clusterID: 1    # 全局唯一

   配置 Scheduler   

jaeger: "http://127.0.0.1:14268/api/traces"
console: true  # 打开可从窗口查看日志
# Manager configuration.
manager:
  # 配置manager 地址
  addr: "127.0.0.1:65003"
  # schedulerClusterID cluster id to which scheduler instance belongs.
  schedulerClusterID: "1"
database:  ##!!!!!! 必须和manager同一个redis
  # Redis configuration.
  redis:
    addrs:
      - "127.0.0.1:6379"
    # Redis username.
    username: ''
    # Redis password.
    password: dragonfly
    # Redis brokerDB name.
    brokerDB: 1
    # Redis backendDB name.
    backendDB: 2
server:
  # # Advertise ip.
  advertiseIP: 127.0.0.1
  # # Listen ip.
  # listenIP: 0.0.0.0
  # Port is the ip and port scheduler server listens on.
  port: 8002

   配置 Manager   

server:
  # GRPC server configure.
  grpc:
    advertiseIP: 127.0.0.1
    port:
      start: 65003
      end: 65003
  # REST server configure
  rest:
    # REST server address
    addr: :8888
# Database info used for server.
database:
  # Database type, supported types include mysql, mariadb and postgres.
  type: mysql
  # Mysql configure.
  mysql:
    user: dragonfly
    password: dragonfly
    host: 127.0.0.1
    port: 3306
    dbname: manager
    migrate: true
  redis:
    # Redis addresses.
    addrs:
      - "127.0.0.1:6379"
    password: dragonfly
    # Redis DB name.
    db: 0
    # Redis brokerDB name.
    brokerDB: 1
    # Redis backendDB name.
    backendDB: 2
    
job:
  preheat:
   registryTimeout: 1m
   tls:   ##!!!!!预热必须将harbor仓库的证书放在这
    caCert: "/etc/docker/certs.d/your.private.registry/ca.crt"
    
jaeger: "http://127.0.0.1:14268/api/traces"
console: true  # 打开可从窗口查看日志

d

Harbor 预热机制

预热,顾名思义,需要使用的时候,它已经是可以使用的状态了。如,电热毯在我们上床前,它已经是热的了。对于我们 Harbor 的使用场景,则是在 K8S 需要使用镜像的时候,Harbor 已经以前将镜像分发到了对应集群内了。

   如何使用预热   

Dragonfly 的使用逻辑如下:

Harbor 配置策略 -> 通知 Manager -> 查询现有活动的 Scheduler 集群 -> 创建任务 -> Scheduler 调用 Seed Peer 拉取镜像。

Harbor 配置如下:

  • 配置分发实例

ec051755412b03b5f61f42e10c543a4d.png

  • 为对应的项目配置 P2P 策略

489c00e3d35dfd3022a650f75cda2cc1.png

基于事件,在有新的镜像时,会通知 Manager。

其他问题

我们怎么判断当前的镜像层已经缓存到了本地?

  • Dfdaemon 将缓存默认存放在 /var/lib/Dragonfly 目录下,名称为 task 名称;

  • 通过查看源码,task 名称的来源为:func taskIDV1(url string, meta *commonv1.UrlMeta, ignoreRange bool) 。即对每一层算法计算出来的。

  • 快速:直接查看对应的日志即可。

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

64c65da86e12e9fc2d2f2fd6d12215b4.png

扫描二维码查看 Dragonfly GitHub 页面

推荐阅读

4aedb4fedfd00c5fb3cf5cb21f4c2075.png

议题征集中|KCD 2023 杭州站

4cd45414243e6cc74aac0c38209d4704.png

Dragonfly 在 Kubernetes 多集群环境下分发文件和镜像

8527db7ebc89a30a8c2b60140d52e748.png

Dragonfly 发布 v2.1.0 版本!

d9acd8a56b803dd54cdea00567ffbdd8.png

Dragonfly 中 P2P 传输协议优化

bab3dc6e95e7eceb83b698c10c5449bb.jpeg

Dragonfly实战:如何用P2P技术解决K8s集群镜像拉取慢的痛点(附避坑指南) 本文详细介绍了如何利用Dragonfly的P2P技术解决Kubernetes集群中镜像拉取慢的问题。通过部署SuperNode和dfclient组件,实现高效的镜像分发,节省带宽成本并提升部署速度。文章包含实战部署指南、私有仓库认证方案及性能优化技巧,帮助运维团队快速落地P2P镜像分发方案。 阅读详情

相关推荐

使用DragonFly进行智能镜像分发

Dragonfly 是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高文件传输的效率和速率,最大限度地利用网络带宽,尤其是在分发大量数据时,例如应用分发、缓存分发、日志分发和镜像分发。 在阿里巴巴,Dragonfly 每个月会被调用 20 亿次,分发的数据量高达 3.4PB。Dragonfly 已成为阿里巴巴基础设施中的重要一环。 尽管容器技术大部分时候简化了运维工作,但是它也带来了一些挑战:例如镜像分发的效率问题,尤其是必须在多个主机上复制镜像分发时。 Dragonfly 在这种场景下能够完美支持

gg7894125的博客 1039

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

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

ll535299的博客 2596

Dragonfly 2.0云原生镜像分发加速:架构原理与K8s部署实战

容器镜像分发是云原生基础设施中的关键环节,尤其在Kubernetes集群规模较大、发布集中时,镜像仓库的带宽与QPS往往成为瓶颈,导致大量Pod卡在拉取阶段。P2P网络技术通过节点间互助共享,能够有效缓解中心仓库压力,将大规模分发效率提升一个数量级。Dragonfly 2.0作为云原生制品分发基础设施,将Manager、Scheduler、Dfdaemon等组件解耦,实现去中心化调度,支持OCI制品与普通文件加速,兼容Docker和containerd。其细粒度的Piece划分、负载感知调度与安全传输机制,

weixin_42116058的博客 234

全世界最快的内存数据库Dragonfly

Dragonfly是一种针对现代应用程序负荷需求而构建的内存数据库,完全兼容Redis和Memcached的 API,迁移时无需修改任何代码。相比于这些传统的内存数据库,Dragonfly提供了其25倍的吞吐量,高缓存命中率和低尾延迟,同时Dragonfly还能轻松进行垂直扩展

weixin_40381772的博客 6495

Dragonfly P2P镜像分发实战:从单机到多机部署全解析

本文详细解析了Dragonfly P2P镜像分发工具从单机到多机集群的完整部署流程。通过实战演示,阐述了如何利用其P2P技术解决大规模Docker镜像分发时的效率瓶颈,显著减轻镜像仓库压力并节省网络带宽。文章涵盖了SuperNode与Dfclient的配置、与私有仓库集成、性能调优及生产环境注意事项,为构建高效容器镜像分发网络提供全面指导。

weixin_28836989的博客 340

Dragonfly实战:如何用P2P技术加速你的Docker镜像拉取(含Harbor集成指南)

本文详细介绍了如何利用Dragonfly的P2P技术加速Docker镜像拉取,并提供了与Harbor深度集成的企业级解决方案。通过实际性能对比数据,展示了Dragonfly在大规模集群中显著提升镜像分发效率的优势,包括带宽节省和发布效率提升。文章还包含SuperNode部署、HTTPS安全认证、跨机房优化等实战内容,适合企业IT架构师和DevOps工程师参考。

weixin_30335575的博客 430

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

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

easylife206的专栏 1299

dragonfly 加 harbor 实现镜像预热

会话超时时间 和 令牌过期时间都是 默认 30分钟,加上限速 1M/s,因此当一个镜像 layer 超过 2G 的时候会预热失败(不通过 harbor 的方式预热),这个问题看 dragonfly issue。【项目】-选择设置了 P2P 预热并且想要预热的项目点进去-【P2P预热】-【新建策略】-选中策略-【其他操作】-【执行】-【确定】【项目】-选择触发了 P2P 预热的项目点进去-【P2P预热】-【新建策略】-选中策略。【项目】-选择一个项目点进去-【P2P预热】-【新建策略】

weixin_40548182的博客 973

P2P镜像分发:Harbor+Dragonfly优化k8s集群镜像拉取速度(二)

Dragonfly(蜻蜓)是一款开源的基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。是由CNCF(云原生计算基金会)作为孵化级项目(阿里)。

渡江客涂鸦板 1464

Error: dependent ‘..\..\..\..\Qt\5.15.2\msvc2019\include\QtWidgets\QMainWindow‘ does not exist.

核心问题:修改 Build 目录为源码子目录后,MSVC 编译报错,本质是变量设置异常,导致 qmake 生成多余回溯路径;临时解决:在 .pro 文件添加;最优解决:将上述配置写入 Qt 的 msvc 对应 qmake.conf 全局文件,一劳永逸;禁止 qmake 计算路径时向上回溯,避免生成异常路径。

mumufan05的专栏 878

ECU-TEST 快速入门

ECU-TEST 是由位于德国德累斯顿的TraceTronic公司开发的一款用于嵌入式系统测试验证软件工具。自从2003年首次发布ECU-TEST ,该软件成为了汽车ECU开发的标准工具 ,同时也逐步成为了重型机械和工业自动化开发的标准工具 。该软件是起源自于一个控制单元的系统化测试的项目研究,从而为从德累斯顿工业大学脱离出来的TraceTronic公司奠定了基础。ECU-TEST旨在完成测试案例的规范化、评估、求解和归档。得益于该软件包含大量的自动化测试方法使得测试案例的所有必要功能如创建、求解和评估

wangying202的博客 1万+

Dragonfly与Harbor集成:企业级镜像加速终极指南 [特殊字符]

Dragonfly作为业界领先的P2P文件分发系统,与Harbor企业级镜像仓库的无缝集成,为企业用户提供了前所未有的镜像分发加速体验。通过智能P2P网络技术,Dragonfly能够显著降低镜像拉取时间,同时减轻Harbor服务器的带宽压力。 ## 为什么需要Dragonfly与Harbor集成? 🤔 在Kubernetes集群和容器化环境中,镜像分发是日常运维的关键环节。随着业务规模的扩大

gitblog_00918的博客 1116

TI MSPM0G3507 循迹小车强制寻黑线代码一

一个基于MSPM0微控制器的循迹小车控制系统。系统通过8路循迹传感器检测黑线位置偏差,使用PID算法计算电机控制量。主程序初始化中断、PWM等外设,在按键触发后进入循迹模式。传感器数据处理函数根据检测到的黑线位置返回偏差值(-7到7),PID控制器根据偏差调整左右电机速度。系统还包含限幅处理、中断服务等模块,实现稳定的自动循迹功能。代码结构清晰,展示了嵌入式系统中传感器数据处理、电机控制和PID算法的典型实现方式。

雾削木的优快云博客 1855

UI-TARS-1.5-7B-GGUF性能调优指南:从加载速度到推理吞吐的7个提速技巧

**UI-TARS-1.5-7B-GGUF** 仓库提供了多模态 GUI 智能体模型 UI-TARS-1.5-7B 的 GGUF 量化版本,配合 llama.cpp 即可在本地运行这个"能看懂屏幕并操作图形界面"的 AI。但很多新手反馈:模型加载慢、显存/内存吃紧、推理吞吐低。本文从**加载速度、内存占用到推理吞吐**,给出 7 个立即可用的调优技巧,帮你把 7B 模型跑得又快又稳 ⚡ ## 先

gitblog_00707的博客 240

AI辅助专利撰写实战:30分钟高效产出发明专利初稿

在技术创新的浪潮中,专利撰写常常是开发者将创意转化为知识产权保护壁垒的关键一步,但这个过程往往耗时费力,需要兼顾技术深度与法律文书规范。近期,借助AI辅助工具来提升专利撰写效率已成为一个热门探索方向。本文将围绕如何利用AI工具,在30分钟内高效完成一篇具备授权潜力的发明专利初稿,进行一场从0到1的实战演练。无论你是独立开发者、初创团队的技术负责人,还是希望保护自己研究成果的学生,这套方法都能帮助你快速梳理技术方案,形成结构严谨、逻辑清晰的专利申请文档。 1. 背景与核心概念:AI辅助专利撰写的价值与边界 在

weixin_34253126的博客 494

强化学习赋能宇树机器狗:Isaac Gym与MuJoCo仿真训练全解析

本文详细解析了如何利用Isaac Gym和MuJoCo两大仿真平台为宇树机器狗构建强化学习训练管道。内容涵盖环境配置、模型导入、PPO算法框架设计、奖励函数构建以及从仿真到实机的策略迁移技巧,为开发者提供了一套完整的宇树狗仿真训练实践方案。

zeta9的博客 620

Dragonfly在Kubernetes中的终极部署指南:10个简单步骤实现镜像加速

想要在Kubernetes集群中实现极速的容器镜像分发吗?Dragonfly作为阿里巴巴开源的高性能P2P文件分发系统,正是解决大规模容器部署中镜像拉取瓶颈的终极方案。本指南将带您完成Dragonfly在Kubernetes环境中的完整部署,让您的容器镜像分发速度提升10倍!🚀 ## 🎯 为什么选择Dragonfly? 在Kubernetes集群中,当多个节点同时拉取相同的容器镜像时,传统

gitblog_00827的博客 571

【100%通过率】2023华为od机试C卷【螺旋数组矩阵】C++ 实现

给出数字个数n和行数m(1 < n,m < 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成个一m行矩阵。疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。输入一行,两个整数,空格隔开,依次表示n、m。4.数字不够时,使用单个*号占位。3.填充数字时优先填充外部。1:模拟整个过程打印即可。1.每行数字的个数一样多。小明对这个矩阵有些要求。2.列的数量尽可能少。

MISAYAONE的博客 1248

在 Harbor 私有镜像仓库中集成 Dragonfly:基于 dfdaemon 透明代理的 P2P 镜像分发实战

本文基于 Dragonfly(1.x 归档版本)官方文档 `docs/ecosystem/Harbor-with-Dragonfly.md`,完整讲解如何在一套三节点内网拓扑中,把 Dragonfly 接入 Harbor 私有镜像仓库,使多台客户端机器上的 Docker 通过 P2P 方式拉取镜像层。读完后你将掌握:Supernode 与 dfclient(dfdaemon)的容器化部署、`dfd

gitblog_00908的博客 164

【二.图像处理核心技术】【5.形态学操作:腐蚀/膨胀/开闭运算】

想象一下,你拍了一张布满雪花点的老照片,或者扫描了字迹断裂的文档,这时候形态学操作就是你的像素整形师!它们能让模糊的边界变清晰,把断裂的笔画连起来,甚至从X光片里揪出癌细胞。今天我们要聊的,是计算机视觉界的"广场舞双雄"——腐蚀和膨胀。这俩操作就像给像素点们请了个健身教练,要么集体减肥(腐蚀),要么组团增肌(膨胀)。下次当你用美颜相机时,不妨会心一笑——这看似魔法的背后,正是形态学在默默耕耘。腐蚀的规则很简单:如果一个像素点周围的邻居不全白,它就"狗带"(变黑)。:先用砂纸打磨(腐蚀),再喷漆填补(膨胀)

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 426

Python爬虫实战:绕过Cloudflare反爬的最新技术与完整代码详解

在互联网数据采集领域,越来越多的网站开始部署CDN和安全防护服务,其中 Cloudflare 是最为广泛使用的防护方案之一。它不仅为网站提供DDoS防护,还能通过JS挑战、验证码和行为分析来识别并拦截爬虫。这给爬虫工程师带来了极大挑战——如何在不违反网站服务条款的情况下,实现有效的数据采集?本文将分享Python领域绕过Cloudflare反爬的最新技术方法,结合最新流行库与自动化浏览器,帮助你攻克这一难题。绕过Cloudflare反爬不是一蹴而就,需结合多技术、多策略,持续迭代。

2201_76125261的博客 2628

CNCF Dragonfly 毕业啦!基于P2P的镜像和文件分发系统快速入门,在线体验

Dragonfly专注于解决基于Kubernetes的云原生环境下大规模镜像与文件分发难题。该项目利用点对点(P2P)技术,提供高效、稳定且安全的数据分发与加速能力,旨在成为云原生架构中的标准解决方案,支持文件、容器镜像、OCI制品、AI模型权重、缓存、日志及依赖项的大规模分发。

藏云阁技术社区 1669

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Dragonfly 开源项目教程

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

gitblog_00512的博客 777

廖雪峰Python教程[完整版]

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Dragonfly:革命性云原生P2P文件分发系统完整指南

在当今云原生时代,大规模文件分发已成为企业数字化转型的关键挑战。Dragonfly作为一款革命性的云原生P2P文件分发系统,通过智能对等网络技术彻底改变了传统的文件传输方式,为开发者提供了高效、可靠的解决方案。🚀 ## 什么是Dragonfly? Dragonfly是一款开源的智能P2P文件分发和镜像加速系统,专门为云原生环境设计。它通过建立对等网络,让多个节点可以同时从多个源下载文件,大幅

gitblog_07903的博客 630

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Dragonfly 2.0:用P2P技术解决Kubernetes大规模镜像分发与带宽瓶颈

在云原生架构中,容器镜像分发是影响发布效率和系统稳定性的关键环节。当Kubernetes集群规模扩大,大量节点同时拉取镜像会使源站带宽拥塞、拉取超时,成为集群扩容和CI/CD流水线的瓶颈。P2P分发技术通过将文件拆分为数据分片,让已下载节点互相提供数据,从而分散源站压力并提升分发效率。作为CNCF开源项目,Dragonfly 2.0基于该原理,结合智能调度、分片校验与懒加载,为大规模容器环境提供了高性能的镜像加速方案,广泛应用于弹性扩缩容、持续集成、边缘节点及多云数据同步等场景。围绕Dragonfly 2.

weixin_29305313的博客 79
上一篇: SOFA Weekly|SOFAServerless 社区会议预告、Layotto 社区会议回顾与预告、C 位大咖说...
下一篇: Dragonfly 完成 CNCF 安全审计!
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值