Serverless 的运行原理与组件架构
本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题,以及如何解决
过去一年,我们和大量 Serverless 用户进行了线上和线下的交流,了解大家的业务场景、对 Serverless 的看法和使用体验。
大部分用户认为 Serverless 会是云计算下一阶段的必然趋势,但不是现在。 为什么呢?因为构成 Serverless 架构的云函数尽管有引以为傲的自动扩缩能力,但是糟糕的开发体验、让人畏惧的冷启动、原有业务的改造难题等等,均降低了使用者的信心。
因此,尽管不少用户认可 Serverless 的价值,但依然认为其很难承载核心业务。
针对这些关键问题,腾讯云在今年 6 月份发布了 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 本地开发工具、VS Code 插件,与 CODING 联合推出的 Web IDE、DevOps 平台等,均能很大程度上提升开发、部署效率,实现本次开发、本地调试、联动云端调试、本地部署、版本发布等能力。
同时,云函数也完善了配套的监控和告警机制,提供如调用次数、内存使用、并发使用、超时、代码错误等多维度的监控和告警能力。这些基础设施、资源管理、安全、容灾等能力,是云函数平台必备的基础能力,也是开发者关心的核心能力。
Serverless 不仅仅是计算,还需要不断完善周边生态。
随着用户量的增加,Serverless 必然会面临更多的挑战 —— 怎么帮助用户组织管理代码,怎么解决带状态的业务诉求,怎么实现数据库连接数管理,怎么实现应用级部署等等。我们也在不断探索和优化用户的使用体验,计划提供诸如 Serverless DB、性能监控、日志分析、Serverless 框架、函数编排、高性能调用等功能。
后续的专栏文章也将陆续解读更多核心能力,帮助开发者更好地理解和使用 Serverless。
Serverless is more!
传送门:
- GitHub: github.com/serverless
- 官网:serverless.com
欢迎访问:Serverless 中文网,您可以在 最佳实践 里体验更多关于 Serverless 应用的开发!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何获取一张普通图片的深度贴图(Depth Map)
文章里面的东西虽然涉及了人工智能,但是还是选择投在了前端的版块,一来延续上一遍的内容,二来自己对AI这块连入门都算不上,避免被众大佬嗤笑,但是也欢迎大佬们说出里面的纰漏和不严谨的地方,3Q (〃'▽'〃) 上个教程讲了深度贴图的其中一个应用——生成3D效果的图片。这篇文章称热打铁,说下如何获取深度贴图吧。 如果你用过Unity、UE等游戏引擎或者Blender、Maya等三维制作软件,获取一个场景的深度贴图应该不是问题,鄙人没玩过这些,这里只说一下只有一张图片如何获取深度贴图。 假设你用支持拍摄出带深度信息的设备获取了一张文件后缀是heic的图片,可以在mac电脑中用PS打开,然后切换套通道标签,就能看到除RGBA外的另一个通道,这个就是z通道(也有叫景深通道的)。因为ps打开heic文件需要硬件解码,所以得系统支持,windows应该是暂时没有这类驱动。 如果你是windows系统的电脑,可以使用一个叫StereoPhoto Maker的工具来解压出heic文件中的隐藏数据。就是这个工具: 如果你只有一张普通的图片,可以使用ps手动绘制出深度贴图,网上有很多教程,直接去油管搜“3d ...
- 下一篇
病毒与故障:漫谈计算机软件的故障应对
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」。一群同频者,一起成长,一起精进,打破认知的局限性。 近期肆虐的新型冠状病毒,已然成为大众视野的焦点。笔者,最近趁过年之际也看了一些相关新闻和书籍,其中,有一本名为卡尔·齐默《病毒星球》让我印象深刻。当然,本文并不是谈及新型冠状病毒和《病毒星球》,而是将故障和病毒进行类比,聊一聊计算机软件的故障应对机制,而其中关于病毒相关科普性的资料和数据来自于《病毒星球》一书。 一、故障:潜伏于计算机软件的病毒 人鼻病毒作为普通感冒和哮喘的罪魁祸首,是人类广泛存在的老朋友。鼻病毒巧妙地利用鼻涕来自我扩散。人擤鼻涕的时候,病毒会借机跑到手上,通过手再蹭到门把手和其他手碰过的地方。下次其他人碰到这些地方,病毒就会借机沾上他们的手,再进入他们的身体——大多数时候也是借道鼻子。鼻病毒能巧妙地让细胞对它们打开一扇“小门”,继而入侵位于鼻腔内部、咽喉内部或肺脏内部的细胞。在接下来的几个小时里,鼻病毒利用宿主细胞,复制自己的遗传物质和包裹它们的蛋白外壳。随后这些复制产生的病毒会从宿主细胞内破壁而出。此外,我...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启