
暂时未有相关通用技术能力~
阿里云技能认证
详细说明对象存储OSS是什么? 对象存储服务(Object Storage Service,简称 OSS),以 HTTP RESTful API 的形式对外提供服务,是阿里云提供的海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面覆盖从热到冷的各种数据,优化存储成本。其数据可靠性不低于 99.9999999999%(12 个 9),服务可用性不低于 99.995% 对象存储OSS能做什么? OSS 具有与平台无关的 RESTful API 接口,可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 阿里云-云存储产品生态 对象存储OSS与传统存储有哪些区别? SAN(块存储) 和 NAS(文件存储)都是面向数据中心内访问的设备,而OSS(对象存储)产生的目的根本就不是在数据中心内使用,而是面向互联网、移动互联网(3G、4G、5G)而产生的,为大量使用的网页、视频、图片、音频、文档访问而设计。 源自:对象存储 OSS 的智能数据分析处理框架 对象存储OSS有哪些功能? 多种存储类型 支持数据冷热分层,提供更具性价比的存储方式 数据冷热分层维度 提供标准型、低频型、归档型以及冷归档型四种存储类型,满足不同场景的数据存储,了解存储类型详情 数据冗余维度 提供同城区域冗余ZRS、本地冗余LRS类型;ZRS,将数据冗余存放在多个可用区,具备机房级容灾能力;LRS,将数据冗余存放在同一可用区的多个设备,抵御硬盘/存储服务器级故障。 数据保护与安全 支持多冗余的可靠架构、完整性校验、权限控制、加密、日志审计、数据合规等,提供更可靠、更安全、更合规的对象存储 数据可靠 多重冗余分布式架构,有效应对各类硬件故障,消除单点隐患,提供最大12个9的数据持久性设计 完整性校验 存储和读取数据时,对网络流量计算CRC64校验和,检测数据包是否损坏,确保数据完整性 完善的权限控制 提供RAM、ACL、BucketPolicy、URL签名等多种访问控制机制,支持Bucket、Object、API级细粒度授权 网络访问安全防护 支持防盗链,支持通过BucketPolicy设置IP黑白名单或限制只能Https访问 数据加密 提供服务端加密、客户端加密的多种数据加密选项 日志审计 支持将OSS访问记录,按小时导出成日志文件,用于分析与审计;支持实时日志查询,结合日志服务,分钟级日志推送,秒级查询与可视化分析 数据合规 OSS支持WORM策略(一次写入,多次读取), 保护周期内,任何人都不能对文件进行修改和删除,满足行业合规要求。同时,阿里云通过国内外多项认证,率先将众多的合规控制点,融入云平台内控管理和产品设计中了解更多详情 企业级数据管理 支持生命周期、回源、更丰富的数据上传与下载方式、事件通知、回调等,提供更简单易用、更便于管理的对象存储 生命周期 可定义数据的生命周期,将符合规则的对象转换存储类型或过期清除 镜像回源 支持配置用户源站,当访问数据不在OSS时,OSS会从源站拉取并写入OSS 文件上传 支持PutObject、PostObject、MultipartUpload、AppendObject方式。其中,Append上传的文件,支持在文件末尾追加内容 文件下载 支持简单下载、断点续传下载,其中断点续传下载,可设置从Object指定的位置开始下载 云监控 对接云监控,支持OSS基础服务指标、性能指标和计量指标的监控 事件通知 支持事件通知,OSS上Object相关操作可触发事件通知,用户可设置触发器,以执行各种操作 实时日志 支持导出访问日志到用户Bucket,也可结合日志服务,对OSS访问记录实时查询、可视化分析,满足企业运维审计、业务分析等需求 数据处理能力 支持图片、文档、视频、CSV等数据的常用处理和分析能力,提供更智能的对象存储 图片处理 支持jpg、png、bmp、gif、webp、tiff等格式的转换,以及缩略图、剪裁、水印、缩放等多种操作 视频截帧 支持截取出视频中的指定位置生成图片,完成视频截帧 文档预览 支持对ppt、xls、doc、pdf 等格式文档进行在线预览 标签识别 支持图片场景标签识别,如交通工具、电子产品、常用物品、饮食等,支持分层标签 人脸识别 支持图片中多张人脸的位置与属性检测,如性别、年龄、情绪、头部姿势、眼睛状态、模糊度等 OSS Select 支持通过SQL选取CSV、JSON文件内容,而无需下载整个文件再分析,可为大数据应用提速 数据生态丰富 支持对接开源生态、阿里云丰富的计算产品、数据管理产品,帮助客户释放数据更大的业务价值 开源生态 中国首家被Hadoop官方社区支持的云存储,可对接丰富的开源生态。用户可通过Logstash、Flume将日志投递到OSS,可在Hadoop、Spark、Hive、Impala、Flink、Presto中访问OSS,通过计算存储分离架构,将温数据、冷 数据存储在OSS。 计算产品对接 OSS无缝对接阿里云日志服务、EMR、DataLakeAnalytics、函数计算、批量计算、MaxCompute,满足用户日志投递、离线处理、交互式查询、Severless触发计算、批量计算等场景需求。 数据管理生态 支持通过阿里云DBS,将各类数据库备份到OSS;通过数据集成,将数据导入到OSS;通过阿里云混合云存储阵列结合云上OSS,可实现本地和云端存储空间的无缝结合。 大规模数据迁移 支持PB级的在线、离线迁移方案,完成中国互联网首个单客户百PB级数据的迁移上云案例,提供更安全、更快速海量数据迁移上云方案 离线数据迁移 闪电立方可将用户线下数据,安全、高效的迁移到OSS,提供端到端的加密机制,支持TB到PB级数据迁移上云 在线数据迁移 用户可使用阿里云在线数据迁移服务、OSSImport工具,将第三方云存储、自建线下存储等各类数据,在线迁移到OSS,支持TB至PB级数据迁移到OSS HDFS数据迁移 通过Hadoop对OSS的支持,用户可以在自建的Hadoop集群或通过阿里云EMR,将HDFS中大规模的数据迁移到OSS 对象存储OSS有哪些技术优势? 对象存储设置之初便是面向网络、海量数据的高可靠、高可用、可弹性扩容的公共服务 设计目标 任意大小数据对象存储 单个对象最大可存48TB Normal (0~5GB)Multipart(0~48.8TB)Appendable(0~5GB) 针对移动场景的调优 断点续传Multipart Part最小可以到100KB Append 满足边写边读 海量存储 可线性扩展万台单集群 弹性扩容 能够自适应业务数据快速增长,避免出现存储空间被打爆,通过业界领先的资源供应链管理、软件分布式弹性设计,实现 百 EB 级空间、百万亿级对象规模 能力 高可靠性 指在硬盘、服务器、网络等故障情况下,以及火灾、地震、洪水等灾害时,可以有效防止数据丢失,通过跨机机柜、机房、区域的数据冗余,实现了99.9999999999%(12 个 9)的高可靠性 同城冗余存储(3AZ),实现 RPO 为 0 的容灾能力。基于遵守 PAXOS 的一致性协议、精妙设计的 AZ 间带宽和时延、以及数据分片的策略,保证了 AZ 故障后的快速切换,零数据丢失。经过蚂蚁主站(支付宝账单、刷脸类业务)、网商银行、淘宝短视频、天猫大屏等的业务打磨,检验了 3AZ 的能力,得到了广泛认可。跨区域复制2.0,实现 RPO 为秒级~分钟级的容灾能力。新版本的复制,在性能优化、用户隔离、依赖解藕方面,做了针对性设计优化,提高了复制的能力。同时,针对云客户在同城两数据中心场景下,实现 OSS 的桶能够跨两数据中心保存数据的需求,开发了 OSS 双集群同城容灾 特性。 高可用性 指在服务器故障时、光纤挖断时,可自动切换实现业务连续性,通过容错设计,实现了 99.995% 的可用性 安全存储 指数据访问的认证、授权、加密、以及行业法规遵从,支持多项合规认证,比如 KMS 加密、WORM 认证等 自动生命管理 支持冷热数据的管理,优化 TCO,提供标准、低频、归档存储,并自动化迁移,优化存储使用成本。 公共服务 多租户隔离QoS 对象存储OSS有哪些产品优势? 稳定可靠 OSS作为阿里巴巴全集团数据存储的核心基础设施,多年支撑双十一业务高峰,历经高可用与高可靠的严苛考验。OSS的多重冗余架构设计,为数据持久存储提供可靠保障。同时,OSS基于高可用架构设计,消除单节故障,确保数据业务的持续性。 安全合规 支持服务端加密、客户端加密、防盗链、IP黑白名单、细粒度权限管控、日志审计、WORM特性,并获得多项合规认证,包括SEC、FINRA等,满足企业数据安全与合规要求。 智能存储 提供多种数据处理能力,如图片处理、视频截帧、文档预览、图片场景识别、人脸识别、SQL就地查询等,并无缝对接Hadoop生态、以及阿里云函数计算、EMR、DataLakeAnalytics、BatchCompute、MaxCompute、DBS等产品,满足企业数据分析与管理的需求。 数据分层 提供标准、低频、归档以及冷归档多种类型,通过生命周期自动化实现数据类型转换与过期管理,覆盖从热到冷多种存储场景。 方便易用 提供RESTFul API、控制台、多种开发语言的SDK、命令行工具、图形化工具等多种使用方式,可以随时随地通过网络管理数据。 弹性扩容 支持按量付费模式,按实际使用量付费,无需提前一次性投入。同时,自动弹性扩展,不限用户存储的容量和文件数目,满足EB级海量存储需求。 对象存储OSS有哪些基本概念? 存储空间(Bucket) 用于存储对象(Object)的容器,同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。可根据实际需求,创建不同存储空间存储不同数据。 对象/文件(Object) 是 OSS 存储数据的基本单元,也被称为 OSS 的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的 Key 来标识。对象元信息是一组键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,支持在元信息中存储一些自定义的信息。对象的生命周期是从上传成功到被删除为止
背景 本文主要对杨传辉(日照)《大规模分布式存储系统原理解析与架构实战》、大话存储、网络资源(具体参考文末链接)及个人理解进行整理,意在构建出存储发展基本轨迹和一些基本常识,让更多像我一样的初入者有个宏观上的认知。 存储发展史 从单机到互联网,存储作为的基础设施,主要发展都是围绕构建 低成本、高性能、可扩展、易用的目标进行演进,时至今日,在形态上存储分为单机存储、集中存储、分布式存储、云存储、云原生存储 各阶段存储的基本形态如下 各阶段基本形态 存储数据分类 & 模型 无论单机存储、分布式存储、云存储都是基于特定应用场景下,对指定数据类型构建对应的存储数据模型 数据分类 数据模型 存储类型 常见三种存储类型:块存储、文件存储、对象存储 块存储 基于Block块的存储模式,两种常见存储方式: DAS(Direct Attch Storage), 直连主机存储方式SAN (Storage Area Netowrk),高速网络链接主机存储方式 文件存储 依附网络提供文件存储服务 对象存储 构建于键值存储,核心是将数据通路(data)和控制通路(meta)分离,并且基于对象存储设备(Object-based Storage Device,OSD)构建存储系统,对外以RSETful API形式服务 单机存储 基本概念 单机存储系统是单机存储引擎(数据结构在机械磁盘、SSD等持久化介质上的实现)的一种封装,对外提供文件、键值、表格或者关系模型的存储服务。 存储引擎 存储引擎是存储系统的发动机,决定了存储系统能够提供的功能和性能, 提供功能包含: 增加(Create)读取(Retrieve),随机读取和顺序扫描更新(Update)删除(Delete) 引擎间差异如下: 引擎 机理 支持 不支持 对应的存储系统 哈希存储引擎 哈希表的持久化实现。基于哈希表结构的键值存储系统,数组+链表的方式实现 增、删、改、随机读取 顺序扫描 键值(Key-Value)存储系统 B树存储引擎 B树的持久化实现 增、删、改、随机读取 & 顺序扫描 关系数据库 LSM(Log-Structured Merge Tree)树存储引擎 与B树类似,区别在于把一棵大树拆分成N棵小树写时,先写入内存中,到一定阈值后,写入磁盘,磁盘中的树定期可以做merge操作,合并成一棵大树,以优化读性能 增、删、改、随机读取 & 顺序扫描 Bigtable; HBase; 集中式存储 基本概念 集中式存储相对与单机存储而言,存储系统中包含了更多组件,除了机头(控制器)、磁盘阵列(JBOD)和交换机等设备外,还有管理设备等辅助设备。 参考:集中式存储的基本逻辑示意图 系统构成 机头,整个存储系统的核心部件,通常由控制器、前后端口组成, 控制器,通常有二,实现互备高可用,控制器中的软件实现对磁盘的管理,将磁盘抽象化为存储资源池,然后划分为LUN提供给服务器使用。前后端口,前端端口用户为服务器提供存储服务,后端端口用于扩充存储系统的容量(连接更多的存储设备) 磁盘柜(Just a Bound Of Disk , JBOD),磁盘挂在服务器外的专用柜里,有独立电源、散热、接口等,内部线缆相连(SCSI),对机头后端端口统一挂载 分布式存储 基本概念 分布式存储系统,是将分散独立的存储设备通过网络互联,系统关联,对外作为一个整体提供存储服务。 系统分类 分布式文件系统分布式键值系统分布式表格系统分布式数据库 设计原则 参考CAP 云存储 基本概念 云存储,是一种云计算领域存储服务方式,底层构建在分布式存储基础之上,上层通过Internet形式提供存储服务,除具备分布式存储基础特性外,更兼具灵活性,通常由云厂商提供 参考产品 引擎 对象存储 文件存储 块存储 AWS Amazon Simple Storage Service (Amazon S3) Amazon Elastic File System (Amazon EFS)Amazon FSx for Windows File ServerAmazon FSx for Lustre Amazon Elastic Block Store (EBS) Aliyun OSS 文件存储NAS文件存储CPFS文件存储HDFS 块存储 云原生存储 基本概念 云原生存储脱胎于云存储,除具备云存储的特性外、须满足具备云原生生态系统中其他所有组件具备相同的动态(公共云/专有云/混合云等场景)构建可扩展应用、S3 API 驱动、K8S友好等 参考示例 Rook CNCF首个云原生存储项目Rook,是将文件、数据块和对象存储系统引入到Kubernetes集群,与其他正在使用存储的应用程序和服务一起无缝运行。通过这种方式,云原生集群可以在公有云和本地部署中自给自足并且具备可移植性。该项目的开发目的是使企业能够通过动态应用编排,为在本地和公有云环境中运行的分布式存储系统实现数据中心现代化。 Rook Architecure Ceph Rook integrates with Kubernetes MinIO MinIO是一款高性能、软件定义的,对象存储套件,帮助客户构建云原生数据基础设施。可与 Kubernetes 集成,允许操作员使用 Kubernetes 界面管理存储,而 Kubernetes 可以处理从存储提供到卷放置的所有事务。 Born cloud native 参考
说明:文章内容来自网络文章的整理和翻译以及ATA文章知识的汇总,知识点及数据具体出处见参考部分 背景 云计算的发展在经历了IaaS(Infrastructure as a Service-基础设施即服务),PaaS(Platform as a Service-平台即服务),SaaS(Software as a Service-软件即服务)几个阶段后,Serverless(无服务器化)趋势越发明显,时至今日,无服务器计算(Serverless Computing)作为云原生计算模型的应用也日臻完善,相关产品也是各云厂商竞相角逐的战场。 Serverless落地情况(Serverless Landscape) 从CNCF Serverless Landscape中看出,Serverless落地产品形态一般分为如下三类: 公有云Severless平台,代表性的有: AWS Lambda Microsoft Azure Functions Google Cloud Functions 阿里云函数计算 私有云Severless框架,代表性的有: Fission (Kubernetes) Funktion (Kubernetes) Kubeless (Kubernetes) Gestalt (DC/OS) IBM OpenWhisk (Docker) Iron Functions (Docker,Swarm, Kubernetes) Serverless平台的包装框架,代表性的有: Serverless(Node,大多数平台) Apex(Go,AWS) Zappa(Python,AWS) Chalice(Python,AWS) Claudia.js(Node,AWS) Gordon (Python,AWS) Serverless发展趋势 截至2018年12月Google Trends 的结果所示,“Serverless”的搜索量在过去三年中增加了近 20 倍。 "RightScale 2018 State of the Cluoud Report" 中指出Serverless是增长最快的扩展云服务,不仅在基本计算、存储和网络服务领域,即使在最流行的扩展服务、关系数据库、推送通知和缓存中仍保持在前三位 相比于2017年Serverless的年增长率达到了75%,已经超过了Container-as-aservice(容器即服务),位列第一 The New Stack 的一份报告中的付费调研也指出,78%的参与者表示他们将在未来几个月内使用或计划使用 Serverless 技术。 Serverless Computing概念 云原生计算基金会CNCF(Cloud Native Computing Foundation, CNCF)Serverless Whitepaper v1.0对无服务器计算作了如下定义: Serverless computing refers to the concept of building and running applications that do not require server management. It describes a finer-grained deployment model where applications, bundled as one or more functions, are uploaded to a platform and then executed, scaled, and billed in response to the exact demand needed at the moment. 无服务器计算(Serverless Computing)是指在构建和运行应用时无需管理服务器等基础设施。它描述了一个更细粒度的部署模型,在该模型中,应用被拆解为一个或多个细粒度的函数被上传到一个平台,然后根据当前所需执行、扩展和计费。 无服务器计算并不意味着我们不再使用服务器来承载和运行代码,也不意味着不再需要运维工程师。而是指无服务器计算的消费者不再需要花费时间和资源在服务器配置、维护、更新、扩展和容量规划上。所有这些任务和功能都由无服务器平台处理,并且完全从开发人员和IT/操作团队中抽象出来。因此,开发人员专注于编写应用程序的业务逻辑。运营工程师能够将他们的重点提升到更关键的业务任务上。 FaaS & BaaS 无服务器计算平台可以提供以下一种或两种服务: FaaS(Functions-as-a-Service-函数即服务),通常提供事件驱动(event-driving)的计算。开发人员使用由事件(event)或HTTP请求触发的函数运行和管理应用程序代码。开发人员将小的代码单元部署到FaaS,FaaS按需执行和扩展,开发人员无需管理服务器或任何其他底层基础设施。 Baas(Backend-as-a-Service后端即服务),是第三方基于API的服务,用于替换应用程序中的核心功能子集。因为这些API是作为一个自动扩缩容和透明操作的服务提供的,所以开发人员认为这是无服务器的 ,如:OSS Pros & Cons 无服务器计算(Serverless Computing)应用利弊大致如下: Pros: 0服务器操作。无服务器通过消除维护服务器资源所涉及的开销,极大地改变了运行软件应用程序的成本模型。 没有配置、更新和管理服务器基础结构。 弹性伸缩:无服务器FaaS或BaaS产品可以立即精确地伸缩以处理每个单独的传入请求。对于开发人员来说,无服务器平台没有“预先计划的容量”的概念,也不需要配置“自动伸缩”触发器或规则。在没有开发人员干预的情况下,自动进行缩放。在完成请求处理后,无服务器FaaS会自动缩小计算资源的规模,以确保永远没有空闲的容量。 低成本。无服务器计算服务对空闲的虚拟机或容器不收费;也就是说当代码没有运行或没有进行有意义的工作时,不收费。 Cons: 作为一种新兴的计算模型、缺乏标准化和生态系统成熟度。 由于运行时更具动态性,与iaas和paas相比,调试可能更具挑战性。 由于按需结构,如果运行时在空闲时删除函数的所有实例,则某些无服务器运行时的“冷启动”方面可能是性能问题。 在更复杂的情况下(例如,触发其他功能的功能),对于相同数量的逻辑,可以有更多的操作表面积。 Serverless处理模型(Serverless Processing Model) CNCF白皮书对于无服务器框架中的函数用法,函数约束、生命周期、调用类型和所需的抽象等定义了规范,以便同一个函数可以一次性编码,并在不同的无服务器框架中使用。 FaaS解决方案概括为具有以下图中所示的几个关键元素: 事件源(Event sources)-触发器或流事件到一个或多个函数实例中 函数实例(Function instances)-单个函数/微服务,可根据需求进行扩展 FaaS控制器(FaaS Controller)-部署、控制和监视函数实例及其源 平台服务(Platform services )-FaaS解决方案使用的通用集群或云服务(有时称为后端即服务-BaaS) CNCF函数相关规范 函数定义(Function Definition) 无服务器函数定义可以包含以下规范和元数据,函数定义是特定于版本的: 唯一ID 名字 描述 标签 版本ID(和/或版本别名) 版本创建时间 上次修改时间(函数定义的) 函数处理程序 运行时语言 代码+依赖项或代码路径和凭据 环境变量 执行角色和密钥 资源(所需的CPU、内存) 执行超时时间 日志失败(死信队列) 网络策略/vpc 数据绑定(Metadata Binding) 元数据详细信息(Metadata details) 版本(Version)-每个函数版本都应该有一个唯一的标识符,此外,可以使用一个或多个别名(例如“最新”、“生产”、“测试版”)标记版本。API网关和事件源将流量/事件路由到特定的函数版本。 环境变量(Environment Variables)-用户可以指定将在运行时提供给函数的环境变量。环境变量也可以从机密和加密内容派生,或者从平台变量派生(例如,kubernetes envvar定义)。环境变量使开发人员能够控制函数行为和参数,而无需修改代码和/或重建函数,从而获得更好的开发人员体验和函数重用。 执行角色(Execution Role)-该函数应在特定的用户或角色标识下运行,该标识授予并审核其对平台资源的访问权限。 资源(Resources)-定义功能所需的或最大的硬件资源,如内存和CPU。 超时(Timeout)-指定函数调用在被平台终止之前可以运行的最长时间。 失败日志(死信队列)(Failure Log (Dead Letter Queue))-队列或流的路径,用于存储失败的函数执行列表,并提供适当的详细信息。 网络策略(Network Policy)-分配给功能的网络域和策略(用于与外部服务/资源通信的功能)。 执行语义(Execution Semantics)-指定应如何执行函数(例如,每个事件至少执行一次、至多执行一次、完全执行一次)。 数据绑定(Data Bindings) 一些无服务器框架允许用户指定函数使用的输入/输出数据资源,这使开发人员能够简化、提高性能(在执行之间保留数据连接,可以预取数据等)和更好的安全性(数据资源凭据是上下文的一部分,而不是代码)。 绑定数据可以是文件、对象、记录、消息等形式,函数规范可以包括一组数据绑定定义,每个定义指定数据资源、其凭证和使用参数。数据绑定可以引用事件数据(例如,db键是从事件“用户名”字段派生的),示例:https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings 函数约束(Function Requirements) 函数和无服务器运行时应该满足的通用需求: 函数必须与不同事件类的基础实现分离 可以从多个事件源调用函数 每个调用方法不需要不同的函数 事件源可以调用多个函数 函数可能需要与底层平台服务进行持久绑定的机制,这可能是跨函数调用。函数可能是短暂的,但如果需要在每次调用(例如在日志记录、连接和装载外部数据源的情况下)上都进行引导,则引导可能会很昂贵。 每个函数可以用不同于同一应用程序中使用的其他函数的代码语言编写。 函数运行时应尽可能减少事件序列化和反序列化开销(例如,使用本机语言结构或有效的编码方案) 函数调用类型(Function Invocation Types) 根据不同的用例,可以从不同的事件源调用函数,例如: 同步请求(Synchronous Request (Req/Rep)),例如http请求、grpc调用 客户机发出请求并等待立即响应。这是一个阻塞呼叫。 异步消息队列请求(pub/sub)(Asynchronous Message Queue Request),例如RabbitMQ, AWS SNS, MQTT, Email, Object (S3) change、计划事件(如cron作业) 消息发布到交换并分发到订阅服务器 没有严格的消息顺序, 可一次处理 消息/记录流(Message/Record Streams):Kafka, AWS Kinesis, AWS DynamoDB Streams, Database CDC 一组有序的消息/记录(必须按顺序处理) 通常,一个流被分割到多个分区/碎片(partitions/shards ),每个碎片有一个worker(碎片使用者) 流可以从消息、数据库更新(日志)或文件(例如csv、json、parquet)生成。 事件可以推送到函数运行时,也可以由函数运行时拉取。 批处理作业(Batch Jobs),例如ETL作业、分布式深度学习、HPC模拟 作业(Jobs)被调度或提交到队列,并在运行时使用多个并行函数实例进行处理,每个实例处理工作集(任务)的一个或多个部分。 当所有并行工作人员成功完成所有计算任务时,作业完成。 函数生命周期(Function LifeCycle) 函数部署管道(Function Deployment Pipeline) 函数生命周期: 编写代码、提供规范和元数据 获取代码和规范,编译并将其转化为一个工件(二进制代码、包或容器镜像) 工件部署到一个集群上,控制器实体负责根据事件流量和/或实例上的负载调整函数实例的数量。 函数操作(Function Operations) 无服务器框架可能允许以下操作和方法定义和控制功能生命周期: 创建(Create)-创建一个新函数,包括其规范和代码 发布(Publish)-创建可部署在群集上的函数的新版本 更新别名/标签(Update Alias/Label [of a version])-更新版本别名 执行/调用(Execute/Invoke)-不通过事件源调用特定版本 事件源关联(Event Source association )-将函数的特定版本连接到事件源 获取(Get)-返回函数元数据和规范 更新(Update)-修改函数的最新版本 删除(Delete)-删除一个函数,可以删除一个特定的版本或函数的所有版本 清单(List)-显示函数及其元数据的列表 状态获取(get stats)-返回有关函数运行时使用情况的统计信息 日志获取(get logs)-返回函数生成的日志 关键步骤说明: Create:在创建函数时,提供其元数据(稍后在函数规范中描述)作为函数创建的一部分,将对其进行编译并可能发布。稍后可以启动、禁用和启用功能。功能部署需要能够支持以下用例: 事件流(Event streaming),在这种情况下,队列中可能总是有事件,但是可能需要通过显式请求暂停/恢复处理。 热启动(Warm startup)-在任何时候具有最少实例数的函数,例如,接收到的“第一个”事件具有热启动,因为该函数已经部署并准备好服务于该事件(而不是在“传入”事件第一次调用时部署该函数的冷启动)。 Publish:用户可以发布一个函数,这将创建一个新版本(最新版本的副本),发布的版本可能会被标记/标记或有别名,请参阅下面的详细信息。 用户可能希望为调试和开发过程直接执行/调用函数(绕过事件源或API网关)。用户可以指定调用参数,如所需版本、同步/异步操作、详细级别等。 用户可能希望获得函数统计信息(例如调用次数、平均运行时间、平均延迟、失败、重试次数等),统计信息可以是当前度量值或一系列值(例如存储在Prometheus或云提供程序设施(如AWS Cloud Watch))。 用户可能希望检索函数日志数据。这可以根据严重性级别和/或时间范围和/或内容进行筛选。日志数据是每个函数的,它包括诸如函数创建和删除、显式错误、警告或调试消息等事件,还可以选择函数的stdout或stderr。每次调用最好有一个日志条目,或者一种将日志条目与特定调用关联的方法(以便更简单地跟踪函数执行流)。 事件源(Event Source) 不同类型的事件源包括: 事件和消息服务,例如: RabbitMQ, MQTT, SES, SNS, Google Pub/Sub 存储服务,例如:S3, DynamoDB, Kinesis, Cognito, Google Cloud Storage, Azure Blob, iguazio V3IO (object/stream/DB) 端点服务,例如:物联网(IoT)、HTTP网关(HTTP Gateway)、移动设备、Alexa、Google Cloud Endpoints 配置存储库,例如:Git, CodeCommit 使用特定于语言的sdk的用户应用程序 定时事件-允许定期调用函数。 事件源到函数的关联(Event Source to Function Association) 函数是由事件源触发的事件调用的。函数和事件源之间有一个n:m映射。每个事件源可以用来调用多个函数,一个函数可以由多个事件源触发。事件源可以映射到函数的特定版本或函数的别名,后者提供了更改函数的方法,并部署了一个新版本,而不需要更改事件关联。事件源也可以定义为使用同一函数的不同版本,定义应为每个函数分配多少流量。 在创建了一个函数之后,或者在以后的某个时间点,需要将事件源关联起来,该事件源应该作为该事件的结果触发函数调用。这需要一组操作和方法,例如: 创建事件源关联 更新事件源关联 列出事件源关联 函数输入(Function Input) 函数输入包括事件数据(event data)和元数据(metadata),并且可以包括一个上下文对象(context object)。 事件数据和元数据(Event data and metadata) 事件详细信息应传递给函数处理程序,不同的事件可能具有不同的元数据,因此函数需要能够确定事件的类型并轻松解析通用和特定于事件的元数据。 将事件类与实现分离是可取的,例如:处理消息流的函数将工作相同,而不管流存储是Kafka还是Kinesis。在这两种情况下,它都将接收消息体和事件元数据,消息可以在不同的框架之间路由。 事件可以包括单个记录(例如,在请求/响应模型中),或者接受多个记录或微批(例如,在流模式中)。 FaaS解决方案使用的常见事件数据和元数据示例: 事件类别 版本 事件ID 事件来源/来源 源识别 内容类型 消息体 时间戳 事件/记录特定元数据的示例: HTTP: 路径、方法、头、查询参数 Message Queue:消息队列:主题,标题 记录流(Record Stream):表、键、op、修改时间、旧字段、新字段 事件源结构示例: AWS Lambda:http://docs.aws.amazon.com/lambda/latest/dg/eventsources.html Microsoft Azure Functions:https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings Google Cloud Functions:https://cloud.google.com/functions/docs/concepts/events-triggers 有些实现将JSON作为向函数传递事件信息的机制来关注。这可能会增加高速函数(例如流处理)或低能耗设备(IOT)的大量序列化/反序列化开销。在这些情况下,将本机语言结构或其他序列化机制视为选项可能是值得的。 函数上下文(Function Context) 当调用函数时,框架可能希望提供对跨多个函数调用的平台资源或常规属性的访问,而不是将所有静态数据放在事件中,或强制函数在每次调用时初始化平台服务。 上下文作为一组输入属性、环境变量或全局变量传递。有些实现使用这三种方法的组合。 上下文示例: 函数名、版本、ARN 存储限制(Memory Limit) 请求ID(Request ID) 云区(Cloud Region) 环境变量(Environment Variables) 安全密钥/令牌(Security keys/tokens) 运行时/bin路径(Runtime/Bin paths) 日志(Log ) 数据绑定(Data binding) 一些实现使用日志对象初始化日志对象(例如,作为AWS中的全局变量或Azure中的部分上下文),用户可以使用集成平台工具跟踪函数执行。除了传统的日志记录之外,未来的实现可能会将计数器/监视和跟踪活动抽象为平台上下文的一部分,以进一步提高功能的可用性。 数据绑定作为函数上下文的一部分,平台根据用户配置启动到外部数据资源的连接,这些连接可以在多个函数调用中重用。 函数输出(Function Output) 当函数退出时,它可以: 向调用者返回一个值(例如,在HTTP请求/响应示例中) 将结果传递到工作流中的下一个执行阶段 将输出写入日志 应该有一种确定的方法来知道函数是否通过返回的错误值或退出代码成功或失败。 函数输出可以是结构化的(如HTTP响应对象)或非结构化的(如某些输出字符串)。 无服务器函数工作流(Serverless Function Workflow) 在无服务器域中,用例(Use Case)属于以下类别之一: 一个事件触发一个函数 事件的和/或组合触发一个函数 一个事件触发顺序或并行执行的多个函数 函数的结果可能是另一个函数的触发器 n个事件(i n和/或)触发m个函数,即事件函数交错的工作流,如事件1触发函数1,完成函数1和事件2以及事件3触发函数2,然后函数2的不同结果触发分支到函数3或函数4。 用户需要一种方法来指定他们的无服务器用例或工作流。例如,一个用例可以是“在照片上传到云存储时在照片上进行人脸识别(发生照片存储事件)。”另一个物联网用例可以是“在接收到运动检测事件时进行运动分析”,然后根据分析功能的结果,或者“触发房屋警报并调用e警察部门“或只是”将运动图像发送给房主。“有关详细信息,请参阅用例部分。 AWS提供“步骤函数”(step function),供用户指定其工作流,但步骤函数不允许指定触发工作流中哪些函数的事件/事件。 下图是涉及事件和函数的用户工作流的示例。使用这种函数图,用户可以轻松地指定事件和函数之间的交互,以及如何在工作流中的函数之间传递信息。 功能图状态包括: Event State(事件状态):此状态允许等待来自事件源的事件,然后触发函数运行或多个函数按顺序、并行或在分支中运行。 Operation/Task State(操作/任务状态):此状态允许按顺序或并行运行一个或多个函数,而不等待任何事件。 Switch/Choice State(切换/选择状态):此状态允许转换到多个其他状态(例如,前一个函数结果触发分支/转换到不同的下一个状态)。 End/Stop State(结束/停止状态):此状态以失败/成功终止工作流。 Pass State(通过状态):此状态在两个状态之间插入事件数据。 Delay/Wait State(延迟/等待状态):此状态导致工作流执行延迟指定的持续时间或直到指定的时间/日期。 状态和相关信息需要保存在一些持久存储中,以便进行故障恢复。在某些用例中,用户可能希望将来自一个状态的信息传递到下一个状态。这些信息可以是函数执行结果的一部分,也可以是与事件触发器关联的输入数据的一部分。需要在每个状态定义一个信息过滤器,以过滤出需要在状态之间传递的信息。 参考 CNCF Serverless Whitepaper v1.0 CNCF Serverless WG An I&O Leader’s Guide to Serverless Computing Guide to Serverless Technologies