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.mzph.cn/news/674281.shtml

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

相关文章

Python(21)正则表达式中的“元字符”

大家好&#xff01;我是码银&#x1f970; 欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 获取资源&#xff1a;公众号回复“python资料” 在本篇文章中介绍的是正则表达式中一部分具有特殊意义的专用字符&#xff0c;也叫做“元…

时光峰峦文物璀璨,预防性保护筑安全

在璀璨的历史长河中&#xff0c;珍贵文物如同时间的印记&#xff0c;承载着过往的辉煌。《人文山水时光峰峦——多彩贵州历史文化展》便是这样一场文化的盛宴&#xff0c;汇聚了众多首次露面的宝藏。然而&#xff0c;文物的保存对环境要求极为苛刻&#xff0c;温湿度波动都可能…

传输频宽是啥?对网速影响有多大?

频宽&#xff0c;即WIFI频道宽度&#xff0c;又称为WIFI信道宽度&#xff0c;是WiFi Channel width的缩写。从科学的定义来说&#xff0c;Wi-Fi频道宽度&#xff0c;是指Wi-Fi无线信号在频谱上所占用的带宽大小。它决定了Wi-Fi网络的数据传输速率和稳定性&#xff0c;一般有20M…

解密输入输出迷局:蓝桥杯与ACM中C++/C语言常见问题揭秘

关于C中的常见输入输出汇总 带空格的字符串&#xff1a; ​ 对于这种输入方式我们选择使用gets() 函数来进行输入&#xff0c;gets用于从标准输入&#xff08;通常是键盘&#xff09;读取一行文本并将其存储为字符串&#xff0c;直到遇到换行符&#xff08;‘\n’&#xff09…

由繁化简 Q-Automation助力自动化测试管理

Q-Automation是基于ATX的自动化测试管理软件&#xff0c;用于测试电子控制单元&#xff08;ECU&#xff09;。该软件支持诊断协议层测试和诊断功能测试&#xff0c;且只需填写Excel表格&#xff0c;即可实现半自动化测试需求&#xff0c;从而缩短用户的测试周期。此外&#xff…

【Linux】基于UDP协议的“聊天室”

目录 预备知识 基本思路 服务端设计 重要接口详解 服务端核心代码 服务端运行代码 客户端设计 预备知识 UDP协议&#xff08;User Datagram Protocal用户数据报协议&#xff09; 传输层协议无连接不可靠传输面向数据报 基本思路 如下是我们设计的一个简单的“聊天室…

CRNN介绍:用于识别图中文本的深度学习模型

CRNN&#xff1a;用于识别图中文本的深度学习模型 CRNN介绍&#xff1a;用于识别图中文本的深度学习模型CRNN的结构组成部分工作原理 CRNN结构分析卷积层&#xff08;Convolutional Layers&#xff09;递归层&#xff08;Recurrent Layers&#xff09;转录层&#xff08;Transc…

嵌入式学习之Linux入门篇笔记——13,Linux第一个程序HelloWorld

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 1.什么是 gcc&#xff1f; gcc 全称&#xff08;gun compiler…

目标检测 | 卷积神经网络(CNN)详细介绍及其原理详解

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习模型&#xff0c;主要用于图像识别和计算机视觉任务。它的设计灵感来自于生物学中视觉皮层的工作原理。CNN的核心思想是通…

【人工智能】横扫市场的巨星大模型:探秘当今最热门的AI力量

今年&#xff0c;ChatGPT成了大家的明星&#xff0c;简直是个神奇的助手&#xff01;问什么问题&#xff0c;都秒回&#xff0c;写各种文字、甚至代码&#xff0c;简直是工作利器。而国内这半年AI领域热度不减&#xff0c;涌现了一批新公司和产品&#xff0c;大厂也在风头上。A…

FPGA高端项目:解码索尼IMX327 MIPI相机转USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构FPGA逻辑设计工程源码架构SDK软件工程源…

从Unity到Three.js(安装启动)

发现在3D数字孪生或模拟仿真方向&#xff0c;越来越多的公司倾向使用Web端程序&#xff0c;目前一直都是使用的Unity进行的Web程序开发&#xff0c;但是存在不少问题&#xff0c;比如内存释放、shader差异化、UI控件不支持复制或输入中文等。虽然大多数问题都可以找到解决方案&…

通过nginx学习linux进程名的修改

目录 1. 缘起2. 背景知识3. 源码分析3.1 准备工作3.2 设置进程名字 1. 缘起 在运行nginx的时候&#xff0c;用ps查看nginx的进程信息&#xff0c;可能的输出如下&#xff1a; root 42169 3105 0 16:51 ? 00:00:00 nginx: master process ./objs/nginx root …

STM32/C51开发环境搭建(KeilV5安装)

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统&#xff0c;与汇编相比&#xff0c;C语言在功能上、结构性、可读性、可维护性上有明显的优势&#xff0c;因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等…

【SpringBoot】策略和模板模式的思考与实践

一、应用场景 之所以会将策略和模板模式放在一起&#xff0c;是因为这两种模式用的最多最广泛&#xff0c;而且基本都是联合使用的。在开始之前&#xff0c;先复习一下模式的定义&#xff1a; 模板模式&#xff08;Template Pattern&#xff09; 模板模式是在一个抽象类中定…

python+flask人口普查数据的应用研究及实现django

作为一款人口普查数据的应用研究及实现&#xff0c;面向的是大多数学者&#xff0c;软件的界面设计简洁清晰&#xff0c;用户可轻松掌握使用技巧。在调查之后&#xff0c;获得用户以下需求&#xff1a; &#xff08;1&#xff09;用户注册登录后&#xff0c;可进入系统解锁更多…

C#,栅栏油漆算法(Painting Fence Algorithm)的源代码

1 刷油漆问题 给定一个有n根柱子和k种颜色的围栏&#xff0c;找出油漆围栏的方法&#xff0c;使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的&#xff0c;所以返回10^97的模。 计算结果&#xff1a; 2 栅栏油漆算法的源程序 using System; namespace Legalsoft.Tr…

Jetpack Compose之进度条介绍(ProgressIndicator)

JetPack Compose系列&#xff08;12&#xff09;—进度条介绍 Compose自带进度条控件有两个&#xff0c;分别是&#xff1a;CircularProgressIndicator&#xff08;圆形进度条&#xff09;和LinearProgressIndicator&#xff08;线性进度条&#xff09;。 CircularProgressIn…

Codeforces Round 923 (Div. 3)D. Find the Different Ones! 双指针

Problem - D - Codeforces 双指针O(2n)&#xff0c;其实本场B题我写的是O(26n)&#xff0c;结果这道题不敢想哈哈。 题意就是给你一串数字&#xff0c;然后问区间(l , r)内是否有不同的数字&#xff0c;输出任意一组下标即可&#xff0c;没有就输出 -1 -1 所以我们看l 在 l1~…

【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY…