6 月 25 日,在上海召开的 KubeCon 2019 大会上,腾讯云重磅发布了下一代无服务器的发展形态:Serverless2.0。本文将以 Serverless 的概念、发展、形态、应用以及技术实现展开,进一步介绍腾讯云针对 Serverless 2.0 的形态演进以及发展思考。git
注:文章内容整理自腾讯云高级产品经理黄文俊在 KubeCon 2019 上的演讲,演讲主题为《下一代无服务器的发展形态:Serverless2.0 》。web
Serverless 及其发展数据库
Serverless 无服务器概念,是指知足无需购买、管理、运维服务器,用户按需使用、按使用量付费,同时平台或产品能够根据使用量自动弹性扩缩容等这几个特性的产品或服务。小程序
目前,Serverless 又被分为了 BaaS 和 FaaS,Baas 包含了存储、数据库、队列、缓存等各类形态的 Serverless 服务;而 FaaS 一般指的是函数即服务 Function as a Service 产品。后端
在目前云中提供的计算产品形态中,包含了虚拟机、容器与云函数。不管使用虚拟机仍是容器,除了要关注自身业务代码以外,还须要有复杂的运维管理工做,例如管理启动进程、打安全补丁、选择开发框架、控制访问权限等等。而经过使用云函数,用户仅需按规范进行业务代码的编写,就能够对外提供服务。进程的启动时机以及运行所在的服务器运维能够彻底交给平台。但当前的云函数产品,在开发方式上和已有的基于 vm 或容器的开发方式有所不一样。在基于 vm 或容器的开发模式中,经过使用框架处理 http 请求,启动监听,并由外部命令或脚原本启动进程,是当前开发者都熟悉的业务编写模式。微信小程序
而使用云函数,http 请求会被转变为一个个的事件,业务代码能够直接针对事件进行处理,并按要求返回数据便可。这种由事件触发,接收 event 消息,并根据业务逻辑进行数据处理的云函数模型,是当前 serverless 的主要模式。这种模式的函数,咱们称为 event function。api
事件驱动的核心要素,是可以有丰富的事件源,经过打通各类产品和云函数,使得各产品都可以成为云函数的事件源。这种状况下,函数就成为了产品间的粘合剂,经过承载事件或数据从一个产品流转到另一个产品,一个函数流转到另一个函数,在这个过程当中实现数据处理,最终创建业务逻辑。当前的事件触发的 FaaS 形态,在针对业务的削峰填谷、为无状态应用提供弹性的并行处理能力,以及相似 crontab 定时任务这些场景中,提供了极大的优点。可是同时,当前的云函数,具备访问延时高、运行时长受限、没法直接访问、状态持久化等问题,同时因为开发方式的变化,致使已有的业务,也没法直接向 Serverless 架构迁移,没法作到相似从虚拟机到容器的迁移。缓存
Tencent Cloud Serverless 2.0 安全
对于已有的 Serverless 产品,以及在产品推广过程当中的业务上线的痛点、客户声音,咱们从新梳理了 Serverless 产品的发展路线,并将其定义为 Serverless2.0。服务器
event function
在 Serverless 2.0 中,咱们将从客户的实际使用场景出发,进行了产品的梳理。针对事件驱动的函数,定义为 event function。事件函数仍然遵循现有的函数触发模式,并将持续增长与腾讯云其余各产品的对接,持续丰富应用场景,例如与日志服务对接,提供日志记录处理;与数据库对接,由数据修改动做触发函数运行;与云监控告警对接,针对告警事件能够进行自动化代码处理等。
而针对 http 场景,经过提供 http function 和 http service 两种形态,更好的支持网络访问处理的场景。接下来,将对 http function 和 http service 两种模式进行进一步的解读说明。
http function
经过使用 http function,函数能够直接提供外部可访问到的 url 地址,不管是 app 应用,web 应用,仍是微信小程序,均可以经过发起 http 调用,访问 url 来调用函数。而云函数开发中一般的 event 事件结构,优化为 http request、http response 结构,更符合 Web 服务开发的习惯。经过 request 结构,能够获取到 http 请求的相关信息,而经过 response 结构,能够自行构造出所需的 http 响应。
经过这种模式,咱们能够专一于业务逻辑的开发,而将原有基于 vm 或容器中须要考虑的扩缩容、进程启动、并发处理等事情都交给平台来解决。而针对实际业务,一般不只仅是单个函数就能够实现。在 Serverless 架构中,单个 function 一般仅提供独特单一的功能实现,整个应用一般是由多个函数、以及围绕着函数的数据存储、文件存储、消息队列、api 管理等多种资源构成。咱们从面向 Application 角度出发,基于全套 serverless 架构,进行了 serverless 编排框架的设计。经过编排框架,咱们能够将应用相关的资源统一到一块儿,不只包括了函数,一样会包含数据库、文件存储、消息队列、api 管理等多种资源。
不管从应用开发、仍是调试部署,开发部署框架均将为咱们带来难度的下降、效率的提高。
http service
产品形态中提供的 http service,在一样对外提供 url 访问地址,支持应用直接访问的基础上,咱们提供了针对已有代码或框架的支持。基于经常使用框架已经开发完成的业务代码,能够无缝迁移至 http service 中,直接开始以 serverless 模式对外提供服务。而服务中原有提供的高性能通信协议如 websocket,gRPC,一样能够经过 http service 对外提供。
经过使用 http service 形态,用户无需理解容器、镜像,而是仍然同当前 serverless 的使用模式同样,同使用云函数同样,经过提交已经开发完成的代码包,就能够开始对外提供服务。
Serverless 2.0 上下游能力建设
Serverless 2.0,关注的不只仅是计算、开发模式、使用方式,而是要从更全面的角度来支持 Serverless 架构或应用的发展。
经过协助开发者更好的使用产品、提供全流程的开发管理支持、运维监控、调试支持等,进行全方面的发力,才能够真正去推进 serverless 架构或应用的落地。
工具建设
为了协助开发者更好的进行开发、调试、上线、发布,腾讯云 serverless 团队从多个方面入手,提供能够知足多种开发场景的相关工具或能力。
经过提供命令行工具,咱们能够在本地开发环境中实现项目建立、本地调试打包、一键部署上线
而经过 vscode 插件以及正在持续扩展的更多开发 IDE 插件,函数的本地管理、开发调试、上线发布,能够经过开发 IDE 直接可视化操做。将函数的线上线下管理,与代码的编写调试,都整合在一个界面中完成。
为了方便用户进行代码的调整或查看,咱们也经过提供 web ide,能够在控制台上实时的开发调试,达到与本地开发调试的相同体验。
针对已经进行了 git 托管的代码,咱们也增长了 git 对接能力;经过与用户 git 打通,以及依赖包的在线安装,提供了更简单的代码提交部署能力,进一步简化操做过程,方便开发者。
DevOps
在 Serverless 的 DevOps 方面,经过与 coding.net 的合做,咱们提供了 Serverless 的 DevOps 方案。经过打通 coding.net 的 DevOps 平台,从项目建立开始,咱们就能够进入彻底适配 Serverless 的全管理流程中。
不管是项目管理、需求管理、代码管理,仍是 CI 持续集成、test 测试管理、制品库管理、CD 持续部署,Serverless 架构应用均可以适配整个 DevOps 流程,协助用户构建彻底云原生的 Serverless DevOps 过程。而若是已有 DevOps 或 CICD 系统的用户,Serverless 2.0 也能够经过提供通用方案及工具,协助用户完成整合及融入,在已有流程中实现针对 Serverless 应用的适配。因为 serverless 自己的平台调度、按需启动的特性,没法提供和虚拟机或容器相似的登陆到环境、手工操做的能力。所以,在协助用户排障、保障运行的透明性方面,serverless 平台须要作的更多。
运维监控
除了经过对接云的日志服务和监控服务,支持基于日志和监控的多种查询、过滤、告警以外,咱们还在规划更多为用户提高调试能力的工具建设,例如经过调用链追踪,能够跟踪请求的通过的各个产品、服务或函数;经过故障现场捕捉,能够抓取函数运行失败时的现场及事件,便于进一步分析代码故障;而应用性能分析,能够了解到函数内部的代码或模块性能,便于进一步提高应用性能。
多种工具的建设,目标都是指望为客户提供更多的分析排障支持,提高运行的透明性,下降对于 serverless 架构的运维担心。
技术能力
回到产品实现的底层技术上,针对腾讯云 serverless 2.0 中提供的三种形态,目前采用了相同的技术架构,包括了微虚拟机、容器、调度平台等多种基础能力;经过采用相同底层能力,提供了高度的产品可扩展能力。
在 Serverless 平台一般碰到的延迟性能方面,经过应用机器学习,预热,扩展策略等多种技术,极大的下降了冷启动。经过当前平台分析,目前 97%的事件型函数启动延迟均低于 200ms,对业务基本作到了极低感知,知足了各类场景的应用。多可用区、多集群、自动运维、平台监控技术的应用,进一步的在提高总体产品的可靠性及安全性。
应用案例
与 2018 年 9 月,由腾讯云和微信联合推出的小程序云开发解决方案,将 Serverless 几率推向了广大的国内小程序开发者,得到了大量的客户及使用。小程序云开发解决方案,经过整合腾讯云的对象存储,云数据库,云函数,造成了一套能够直接提供给最终开发者的解决方案,带来了一站式的开发体验。
原有小程序开发过程当中,针对后端服务,用户须要自行完成服务器搭建,存储选择,数据库配置、负载均衡配置等各类操做。而经过使用小程序云开发,用户能够直接得到开箱即用的云能力。存储、数据库、以及做为后台服务的函数,直接由小程序端发起调用,而无需自行管理通信链路、业务扩缩、访问安全等问题。经过与小程序开发 IDE 整合,用户能够在 IDE 中同时完成小程序端,以及后端云函数的开发、调试、部署,以及文件存储、数据库的的管理工做,大大减轻了开发及管理工做量。小程序云开发为 Serverless 概念及应用在国内市场中的推广,起到了及其重要的做用。
最后,再次回顾一下核心内容。针对 Serverless 当前的访问延迟、开发模式、业务迁移等痛点,腾讯云 Serverless 2.0 将经过 event function、http function、http service 三种形态来分别依据场景提供解决方案。同时,针对 Serverless 架构,将经过开发工具建设,项目管理支持、DevOps 能力、监控运维、性能提高等全方位能力,来不断知足用户诉求,打造极致的产品和技术体验,全面的支持用户向 Serverless 架构发展。