HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

Serverless 系列(二):运行原理与组件架构

  • 2019-09-04
  • 本文字数:2332 字

    阅读完需:约 8 分钟

Serverless 系列(二):运行原理与组件架构

随着越来越多的开发者开始关注并使用 Serverless 技术,开发者也对 Serverless 提出了更高的要求。上一篇文章中我们已经了解到 Serverless 相关的基本知识以及 Serverless 所带来的一些优势,本文就不再赘述。接下来,我们重点探讨下现阶段,开发者在使用 Serverless 时经常遇到的一些问题,以及腾讯云 Serverless,尤其是云函数为此所做出的一些探索。


在过去一年多的时间里,我和大量的 Serverless 用户做过线上、线下交流,了解他们的业务场景、以及对 Serverless 的看法或者使用上的体验。大部分用户认为 Serverless 会是云计算下一阶段的必然趋势,但不是现在。为什么呢?因为构成 Serverless 架构的云函数虽然有引以为傲的自动扩缩能力,但是糟糕的开发体验、让人畏惧的冷启动、原有业务需要改造等等,均降低了使用者的信心。这也是当前不少用户虽然认可 Serverless 的价值,但是认为很难承载核心业务的原因。针对这些关键问题,腾讯云在今年 6 月份的上海 KubeCon & CloudNativeCon 上发布了 Serverless 2.0,全面升级了产品形态、系统调度以及开发者工具。 为了便于大家理解,我们就从云函数的运行原理作为切入点,一步一步解释问题产生的原因以及云函数的应对方法。


首先,我们先来看下云函数,或者说 FaaS 和 IaaS、PaaS 的区别。如下图所示,FaaS 不仅给用户提供了标准的 Runtime,同时在应用层,也帮用户管理了请求的调度。开发者只用聚焦在核心业务逻辑开发上,按照函数的粒度去编写代码。而底层硬件相关的资源维护,则交给更加专业的云厂商来搞定。因此,对于用户来讲,则可以把更多的精力和时间放在业务上。而 IaaS 和 PasS,则均需要用户去运维云主机或者容器集群、搭建业务所需的运行环境。​​


​​




其次,我们再来看下云函数是怎么构成 Serverless 架构,以及云函数是怎么帮用户做的资源管理和请求调度,在这里也将会回答云函数是怎么解决冷启、降低核心业务迁移复杂度的。如下图所示,开发者在实际使用时,可以借助 WEB IDE 或者本地 IDE 完成代码开发,然后通过在线或者插件、工具的方式把代码以及所用到的相关依赖,一起打包部署到云函数平台,用户可以自行选择部署成函数的形态或者服务的形态。


在代码里,用户需要自己实现业务逻辑,比如访问数据库、对象存储、消息队列、第三方服务接口等。计算逻辑和后端服务共同构成了所谓的 Serverless 应用架构。而终端用户根据平台提供的请求方式,去触发部署在云函数平台上的业务代码,比如发送 http 请求,平台会根据用户的请求量去拉起相应的计算资源去运行用户代码。


​​



这里需要重点解释下,函数形态和服务形态的差异,因为服务的形态可以大大降低复杂业务迁移的成本。


服务形态支持直接部署基于框架开发的核心业务,如 node.js 的 express、koa 等框架,而不用为了应用 Serverless 而拆分成函数。平台会帮用户启动服务进程、端口监听,同时服务形态不会限制业务的实际运行时长。


函数形态和服务形态在收到用户请求的时候,均能实现自动扩缩。函数形态会针对用户的每个请求都分配一个运行实例,因此所有请求的执行体验是一样的。当没有请求的时候,平台是没有实例在运行的,所以可以做到按需请求,但是这也会造成所谓的冷启动,即当用户的首次请求进入平台的时候,平台会临时拉起资源,而这个过程会消耗一定的时间。为了消除冷启,云函数平台会预先初始化一批不同规格的实例放在资源池中,当用户有请求进入时,可以快速从资源池申请一个实例,直接挂载用户的代码运行,从而降低了资源申请时间。同时,针对函数形态,平台会根据历史并发数据进行预测,帮用户预留一定量的实例,这些实例会预先分配到用户的账号下并且加载好了用户的代码,从而不仅直接消除了冷启,也增加了实例复用几率。


​​



而服务形态可以至少帮用户预留一个常驻实例,并且把用户的所有请求都投递到首个实例,根据实例的使用情况,自动的动态扩缩。


函数形态更适合新建项目,可以敏捷迭代,业务按照函数的粒度开发,不仅可以轻松实现云上多产品的联动,也可以享受函数的高并发及性能一致体验。服务形态更适合已有项目的迁移、重度复杂业务、需要长时运行的业务。


最后,再来看下,Serverless 2.0 的组件架构。如下图所示,用户虽然只用关注绿色部分和业务相关的代码实现,但是平台也需要提供强大的开发者工具来保障开发和使用体验。如云函数推出的 Serverless 本地开发工具、VSCode 插件,和 Coding 联合推出的 WEB IDE、DevOps 平台等,均能很大程度上提升开发、部署效率,实现本次开发、本地调试、联动云端调试、本地部署、版本发布等能力。同时云函数也完善了配套的监控和告警机制,提供如调用次数、内存使用、并发使用、超时、代码错误等多维度的监控和告警能力。对于基础设施、资源管理、安全、容灾等能力,是云函数平台必备的基础能力,也是开发者关心的核心能力。​​



Serverless 不仅仅是计算,还需要不断完善周边生态。随着用户量的增加,Serverless 必然会面临更多的挑战,怎么帮助用户组织管理代码,怎么解决带状态的业务诉求,怎么实现数据库连接数管理,怎么实现应用级部署等等。我们也在不断探索和优化用户的使用体验,计划提供诸如 Serverless DB、性能监控、日志分析、Serverless 框架、函数编排、高性能调用等功能。后续的文章也会陆续推出更多的核心能力解读,帮助开发者更好的理解和使用 Serverless。


Serverless is more!


相关文章:


《Serverless 系列(一):基本概念入门》


作者介绍:


黄文俊,腾讯云高级产品经理,负责腾讯云 serverless 产品规划。经历过企业级存储、企业级容器平台等产品的架构与开发,对容器、微服务、无服务器、DevOps 都有浓厚兴趣。对 Serverless 技术感兴趣的读者可关注 ServerlessCloudNative(ID:ServerlessGo)公众号了解最新技术与动态。


2019-09-04 08:3913906

评论

发布
暂无评论
发现更多内容

IPv6过渡技术的推进策略

穿过生命散发芬芳

ipv6 8月月更

加密世界的福音,Galaxy Project上领取专属Zebec OAT

鳄鱼视界

Kubernetes资源编排系列之五: OAM篇

阿里云大数据AI技术

运维 开放应用模型

揭秘百度智能测试在测试分析领域实践

百度Geek说

测试 数据 用例

短视频软件开发:推荐算法没有想象的那么复杂

开源直播系统源码

直播系统 直播系统源码 短视频直播

电商行业:全链路监测广告投放效果,用数据驱动业务增长

HarmonyOS SDK

分析 电商营销

翻译|使用 StatefulSet 运行数据库应用

RadonDB

数据库 Kubernetes RadonDB

每日一R「13」数据结构(四)闭包

Samson

学习笔记 8月月更 ​Rust

【算法实践】| 一步步手把手带你实现寻找最小公倍数

迷彩

算法 算法实践 8月月更 最小公倍数

架构实战营模块五作业

zhihai.tu

云原生(二十四) | Kubernetes篇之Kubernetes 配置

Lansonli

云原生 k8s 8月月更

[JS真好玩] 我帮掘金找到了一个小Bug,可利用该Bug增加专栏粉丝数

HullQin

CSS JavaScript html 前端 8月月更

Go-Excelize API源码阅读(十九)——SetHeaderFooter

Regan Yue

Go 开源 源码解析 8月日更 8月月更

公众版与政企版,这两款云电脑我都要!

天翼云开发者社区

云原生 SIG:关于 Koordinator 混部原理及最佳实践 | 第 43 期

OpenAnolis小助手

开源 云原生 混部 sig 龙蜥大讲堂

详解CAN总线:高速CAN总线和低速CAN总线的特性

不脱发的程序猿

汽车电子 ISO 11898 高速CAN总线 低速CAN总线 CAN总线

Kubernetes MetalLB 作为 Load Balancer上

CTO技术共享

Kubernetes MetalLB 作为 Load Balancer下

CTO技术共享

算法之“杨辉三角”题解

掘金安东尼

算法 前端 8月月更

英伟达首席科学家:深度学习硬件的过去、现在和未来

OneFlow

机器学习 深度学习 硬件

Linux常用命令

楠羽

汽车电子控制系统的构成

不脱发的程序猿

汽车电子 嵌入式软件 汽车电子控制系统

头脑风暴:回文子串

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

面试突击77:Spring 依赖注入有几种?各有什么优缺点?

王磊

Java 常见面试题

开源一夏 | 使用layui框架实战之栅格系统和菜单评分组件运用心得

恒山其若陋兮

开源 8月月更

租金、物业费的催收困境,如何解决?

IT资讯搬运工

Kubernetes薅多云羊毛怎么部署

CTO技术共享

GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

乌龟哥哥

8月月更

呐,HTTP接口安全的八种对策送给你了

知识浅谈

HTTP API 8月月更

详解AUTOSAR:什么是AUTOSAR?(理论篇—1)

不脱发的程序猿

汽车电子 嵌入式开发 AUTOSAR

DDD实战(12-终篇):DDD下微服务的“分分合合”及一个倡议

深清秋

DDD 软件架构 8月月更

Serverless 系列(二):运行原理与组件架构_语言 & 开发_黄文俊_InfoQ精选文章