简介: 容器在可移植性和交付敏捷性上实现了颠覆式创新。围绕容器的生态沉淀很是丰富且成熟,被普遍接受使用,应用容器化正在快速成为开发和部署的事实标准。然而容器自己并无减轻运维、扩缩容、闲置成本、和云服务集成等难题。html
做者 | changshuaigit
Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容、运维、容量规划、云产品打通集成等责任,使得开发者能够专一业务逻辑、提升交付速度 (Time-to-market) ,持续优化成本。Function-as-a-Service (FaaS) 做为云上最先也是应用最普遍的 Serverless 计算形态,在几年的时间内吸引了大批开发者,逐渐创建了 Serverless 优先的选型逻辑。然而从传统应用迁移到 FaaS 在开发者体验上还面临诸多挑战:github
另外一方面,容器在可移植性和交付敏捷性上实现了颠覆式创新。围绕容器的生态沉淀很是丰富且成熟,被普遍接受使用,应用容器化正在快速成为开发和部署的事实标准。然而容器自己并无减轻运维、扩缩容、闲置成本、和云服务集成等难题。docker
阿里云 FaaS 函数计算支持容器镜像做为函数交付物,将容器优秀的开发、部署、生态(上线前)结合函数计算自身免运维、零闲置成本、云服务集成等特性(上线后),全面升级开发者体验:编程
音视频处理有流量波动较大、对计算资源弹性要求高、监听视频上传事件以及依赖工做流和队列等服务的特性,使得 FaaS 成为自建音视频业务上云的首选。然而这类场景中最经常使用的软件 ffmpeg 每每须要定制编译知足不一样的需求。编译的二进制依赖编译环境中的共享对象(*.so)和 glibc 等库,与 FaaS 运行环境不兼容没法运行。从新编译不只带来了额外工做,不一样的依赖和版本也给业务稳定性带来了挑战。缓存
以下图示例,使用已有 Dockerfile 将转码逻辑以及相关依赖保持现有的安装方式和彻底隔离的容器沙箱运行环境,极大下降迁移成本,稳定性风险和 FaaS 的开发部署学习成本。安全
AI/ML 推理预测服务一样能够享受 FaaS 免运维、自动伸缩、低成本的好处。然而社区流行的框架如 TensorFlow 都默认以容器镜像的方式分享和复用。不只官方提供了完整的版本覆盖,基于官方镜像的社区生态也很是活跃。架构
在离线模型训练阶段以容器镜像部署在 ECS 或 ACK/ASK GPU 集群。在服务推理/预测(serving inference/prediction)阶段,CPU 每每是性价比更高的选择。Serving 的特色是请求量驱动,既须要能快速响应突发(burst)流量,又要在波谷周期释放资源,甚至是缩容至0节省成本。而这些需求自然就是函数计算所擅长的。并发
在没有容器镜像支持以前,想要将一个 TensoflowFlow serving 的示例部署在函数计算上并不容易。TensorFlow 自己的库大小远超过代码包 50MB 的限制,将依赖打包进 NAS 能够绕过这个问题,然而却增大了上手和迁移的难度。不规范的依赖和版本管理也为变动引入稳定性风险。而使用容器镜像以及函数计算 HTTP server 的编程模型,简单的几行 Dockerfile 就能够在 FC 跑起来 Tensorflow Serving 的示例:框架
函数计算支持容器镜像帮助 AI/ML 场景平滑地混合部署容器和函数,统一 CICD 工具、流程和最佳实践。函数计算免运维、高并发、百毫秒级别的实例扩容和 100% 资源利用率进一步优化了服务质量和成本。
传统 Web 单体 (monolithic) 应用现代化有三个主要的诉求:责任拆分、减轻运维压力(资源规划、系统升级、安全补丁等运维负担)以及成本优化。虽然采用职责单一的函数是一种最佳实践,可是进行职责拆分每每须要更长时间的设计和重构。借助函数计算的镜像支持能力,单体应用能够很容易的迁移至 FaaS 服务以知足免运维,弹性水平扩展和100%成本效率的诉求。
传统 Web 应用因为历史缘由或者业务复杂度,运行环境(容器镜像)和业务逻辑每每高度耦合且解耦代价较高。为了 Serverless 化改造有时不得不升级操做系统及依赖库版本,在 FaaS 厂商提供的环境中从新编译。迁移至 Serverless 架构有时间成本和稳定性风险。函数计算对容器镜像的支持帮助传统容器化 Web 应用无改造,更快地享受 Serverless 的价值,将时间和精力专一于业务逻辑创新和迭代而非重复枯燥的环境、依赖版本管理、升级维护和容量规划和伸缩。
企业上云的节奏在不断加快,然而因为业务特性,私有云和公共云混合的运行方式将是将来至关长一段时间内做为常态。企业甚至须要多云厂商来保证迁移、容灾、资源刚性交付的需求。容器镜像是云上、云下的软件交付物统一的默认选择。
函数计算自定义 runtime 选择 HTTP server 标准的交互方式,函数代码编程方式不与厂商绑定,减轻企业对云厂商锁定(vendor-lockin)的顾虑,在云上能够运行的函数,在云下甚至其余云厂商一样能够做为独立的 HTTP Web 应用单独部署,服务请求。容器打包的函数能够运行在其余云服务的容器服务或 IaaS 自建服务,实现多云的容灾、弹性资源保障。
registry-vpc.cn-hangzhou.aliyuncs.com/fc-demo/helloworld:v1beta1
, 以得到最优的镜像拉取延时和稳定性;容器镜像的支持标准化了构建步骤和函数交付产物,让复用 CI/CD 工具成为可能。函数计算与阿里云云效 DevOps 服务集成,推出了 CI/CD 流水线。
以下图所示,当有新的代码被 push 进入代码仓库(Github/Gitlab) master 分支, 构建流水线任务被开启,按照代码中指定的 Dockerfile, 容器镜像会被构建并推送至阿里云容器镜像服务。流水线的最后一个步骤会部署发布新版本的函数,完成一次自动化的发布。
除了云效 DevOps 完整自动化的持续集成交付体验,阿里云容器镜像服务和自建开源 CICD 流水线也一样能够用下图展现的方式自动化函数发布。函数计算发布方式的标准化使得企业能够用统一的工具持续交付多个不一样的服务,下降开发运维人员对部署工具的学习成本,自动化部署提升成功率和交付速度 (time-to-market)。
函数计算在 2019 年已经推出了自定义运行时 Custom runtime,那么此次发布的自定义容器(custom-container)和已有的运行时有和异同呢?
两个 runtime 有不一样的适用场景和取舍:
随着容器逐渐成为应用交付部署的标准方式,FaaS 会和容器生态作更紧密的融合,帮助容器化的应用以更低的成本 Serverless 化,包括周边配套生态例如声明式的部署方式的融合,同 K8s 类似的应用抽象,云原生可观测性软件集成。基于容器镜像拉取加速,让函数计算能兼顾可移植和快速启动的性能。
容器技术和 Serverless 的初心都是要帮助用户更快地交付(time-to-market)和持续优化成本,消除资源闲置产生的浪费,增长企业竞争力。
最终云原生的两大技术领域:Serverless 和容器技术的联系将会变得更加紧密,开发部署运维差别不断缩小,让开发者几乎不须要修改业务逻辑即能为不一样的工做负载选择合适的技术方案,用开放、标准、统一的云原生技术持续创新,为客户创造更多价值。