containerd中文翻译系列(十五)转运服务

传输服务是一种简单灵活的服务,可用于在源和目的地之间传输人工制品对象。灵活的应用程序接口(API)允许传输接口的每个实施方案决定是否可以在源和目的地之间进行传输。这样,实现者就可以直接添加新功能,而无需对应用程序接口进行版本控制或要求其他实现者处理接口更改。

传输服务建立在 libchan 项目提出的核心理念基础之上:将二进制流和数据通道作为一级对象的应用程序接口更加灵活,可以在不需要不断更新协议和应用程序接口的情况下提供更广泛的用例。为了实现这一目标,传输服务使用了流服务,允许传输对象访问二进制流和对象流,即使在使用 grpc 和 ttrpc 时也是如此。

传输 API

传输 API 包含一个单独的操作,根据不同的操作对象,可以调用不同的操作。

在 Go 语言中,该应用程序接口看起来像:

type Transferrer interface {Transfer(ctx context.Context, source interface{}, destination interface{}, opts ...Opt) error
}

proto API看起来像:

service Transfer {rpc Transfer(TransferRequest) returns (google.protobuf.Empty);
}message TransferRequest {google.protobuf.Any source = 1;google.protobuf.Any destination = 2;TransferOptions options = 3;
}message TransferOptions {string progress_stream = 1;// 进展最小间隔时间
}

转移对象(来源和目的地)

传输操作

目的地描述本地执行版本
注册主机镜像存储“pull”1.7
镜像存储库注册主机“推”1.7
对象流(存档)镜像存储“导入”1.7
镜像存储对象流(存档)“导出”1.7
对象流(图层)装载/快照“解压缩”未实施
安装/快照对象流(层)“diff”未实现
镜像存储镜像存储“标签”1.7
注册主机注册主机镜像注册表映像未实现

本地 containerd 守护进程支持

containerd 有一个内置传输插件,可实现大多数基本传输操作。本地插件的配置方式与其他 containerd 插件相同

[plugins]
[plugins."io.containerd.transfer.v1"]

图表

在这里插入图片描述

数据流

作为操作的一部分,传输服务使用流来发送或接收数据流,以及处理回调(同步或异步)。流协议对于客户 Go 接口来说是不可见的。在通过 RPC 传输时,诸如函数、读取器和写入器等对象类型可以透明地转换为流协议。客户端和服务器接口可以保持不变,而proto的 marshaling 和 unmarshaling 需要了解流协议并访问流管理器。流由客户端使用客户端流管理器创建,并以字符串流标识符的形式通过proto RPC 发送。服务的服务器实现可以使用服务器端流管理器,通过流标识符查找流。

进度

Progress 是服务器发送给客户端的异步回调。它通常在 Go 接口中表示为一个简单的回调函数,由客户端实现并由服务器调用。

在 Go 类型中,progress 使用以下类型:

type ProgressFunc func(Progress)type Progress struct {Event    stringName     stringParents  []stringProgress int64Total    int64
}

通过数据流发送的proto信息类型是:

message Progress {string event = 1;string name = 2;repeated string parents = 3;int64 progress = 4;int64 total = 5;
}

进度可作为传输选项传递,以获取任何传输操作的进度。进度事件可能因传输操作而异。

二进制流

传输对象也可以直接使用io.Readerio.WriteCloser

字节通过流传输时使用两种简单的proto信息类型:

message Data {bytes data = 1;
}message WindowUpdate {int32 update = 1;
}

发送方发送 Data信息,接收方发送 WindowUpdate信息。当客户端发送 io.Reader 时,客户端是发送方,服务器是接收方。当客户端发送 io.WriteCloser时,服务器是发送方,客户端是接收方。

二进制流用于导入(发送 io.Reader)和导出(发送 io.WriteCloser)。

凭证

证书是作为服务器到客户端的同步回调来处理的。当服务器遇到来自注册表的授权请求时,就会进行回调。

在传输对象中使用凭证助手的 Go 接口如下所示:

type CredentialHelper interface {GetCredentials(ctx context.Context, ref, host string) (Credentials, error)
}type Credentials struct {Host     stringUsername stringSecret   stringHeader   string
}

它使用proto信息通过数据流发送

// AuthRequest 作为流的回调发送
message AuthRequest {// host 是注册表主机string host = 1;// 引用是从注册表请求的命名空间和存储库名称string reference = 2;// wwwauthenticate 是注册表返回的 HTTP WWW-Authenticate 头值repeated string wwwauthenticate = 3;
}enum AuthType {NONE = 0;// CREDENTIALS 用于交换访问令牌的用户名/密码// 使用 oauth 或 `Docker 注册令牌服务器`CREDENTIALS = 1;// REFRESH 用于使用 oauth 或 "Docker 注册令牌 "服务器将secret与访问令牌交换。REFRESH = 2;// HEADER 用于将 HTTP 授权头直接设置为注册表的secret。// 其值应为 `<auth-scheme> <authorization-parameters>` 。HEADER = 3;
}message AuthResponse {AuthType authType = 1;string secret = 2;string username = 3;google.protobuf.Timestamp expire_at = 4;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460110.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高斯伪谱C++封装库开源!

Windows x64/86 C无依赖运行高斯伪谱法求解最优控制问题&#xff0c;你只需要ElegantGP! Author: Y. F. Zhang His Github: https://github.com/ZYunfeii 写在前面 这个库在你下载它的那一时刻起不再依赖任何其他代码&#xff0c;直接可用来构建C的最优控制问题并进行求解。…

机器学习--K-近邻算法常见的几种距离算法详解

文章目录 距离度量1 欧式距离(Euclidean Distance)2 曼哈顿距离(Manhattan Distance)3 切比雪夫距离 (Chebyshev Distance)4 闵可夫斯基距离(Minkowski Distance)5 标准化欧氏距离 (Standardized EuclideanDistance)6 余弦距离(Cosine Distance)7 汉明距离(Hamming Distance)【…

一起玩儿物联网人工智能小车(ESP32)——57. SPI总线协议初探(一)

摘要&#xff1a;介绍SPI总线的基本知识 前面已经学习过IIC总线协议&#xff0c;今天开始介绍另一个总线协议——SPI。SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是由Motorola提出的一种高速、全双工、同步的通信总线。并且在芯片的管脚…

防静电地板行业研究:市场需求不断的扩大

防静电地板又叫做耗散静电地板&#xff0c;是一种地板&#xff0c;当它接地或连接到任何较低电位点时&#xff0c;使电荷能够耗散&#xff0c;以电阻在10的5次方到10的9次方欧姆之间为特征。 目前防静电地板产业还没有集中完成规模化&#xff0c;标准化&#xff0c;规范化&…

c++阶梯之类与对象(中)< 续集 >

前文&#xff1a; c阶梯之类与对象&#xff08;上&#xff09;-CSDN博客 c阶梯之类与对象&#xff08;中&#xff09;-CSDN博客 前言&#xff1a; 在上文中&#xff0c;我们学习了类的六个默认成员函数之构造&#xff0c;析构与拷贝构造函数&#xff0c;接下来我们来看看剩下…

堆排序-Python实现

简述 堆排序&#xff08;Heap Sort&#xff09;是一种基于比较的排序算法&#xff0c;它利用堆这种数据结构所设计的一种排序算法。堆排序是一种选择排序&#xff0c;它的最坏&#xff0c;最好&#xff0c;平均时间复杂度均为O(nlogn)&#xff0c;它也是不稳定排序。 堆 堆排…

【数据结构】链表OJ面试题4(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表&#xff0c;判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 记录每天的刷题&#xff0c;继续坚持&#xff01; 2.OJ题目训练 10. 给定一个链表&#xff0c;返回链表开始…

豪掷770亿!华为员工集体“分红大狂欢”:至少14万人受益

豪掷770亿&#xff01;华为员工集体“分红大狂欢”&#xff1a;至少14万人受益 近日&#xff0c;华为宣布了其2023年度分红计划&#xff0c;总金额高达770.85亿元&#xff0c;预计至少将惠及14万员工。这一消息引发了广泛关注和热议&#xff0c;成为业界的一大亮点。作为中国领…

嵌入式学习之Linux入门篇笔记——16,Linux工具之make工具和makefile文件

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 1.什么是 make 工具&#xff1f; 编译辅助工具。解决使用命令…

【漏洞复现】EasyCVR智能边缘网关用户信息泄漏漏洞

Nx01 产品简介 EasyCVR智能边缘网关是一种基于边缘计算和人工智能技术的设备&#xff0c;旨在提供高效的视频监控和智能分析解决方案。它结合了视频监控摄像头、计算能力和网络连接&#xff0c;能够在现场进行视频数据处理和分析&#xff0c;减轻对中心服务器的依赖。 Nx02 漏…

【代理模式】

定义&#xff1a;代理模式是一种结构型设计模式&#xff0c;它允许我们创建一个代理对象&#xff0c;用于控制对另一个对象的访问。 代理对象充当了被代理对象&#xff08;目标对象&#xff09;的代表&#xff0c;与被代理对象实现相同的接口&#xff0c;从而实现对被代理对象…

Vue源码系列讲解——虚拟DOM篇【一】(Vue中的虚拟DOM)

目录 1. 前言 2. 虚拟DOM简介 2.1什么是虚拟DOM&#xff1f; 2.2为什么要有虚拟DOM&#xff1f; 3. Vue中的虚拟DOM 3.1 VNode类 3.2 VNode的类型 3.2.1 注释节点 3.2.2 文本节点 3.2.3 克隆节点 3.2.4 元素节点 3.2.5 组件节点 3.2.6 函数式组件节点 3.2.7 小结 3…