现在的位置: 首页 > 架构设计 > 正文

Serverless 的运行原理与组件架构

2020年02月12日 架构设计 ⁄ 共 1831字 ⁄ 字号 评论关闭

  ​大多数用户认为无服务器将是下一阶段云计算的必然趋势,但现在不是。为什么?虽然组成无服务器架构的云功能具有引以为傲的自动伸缩能力,但开发体验差、冷启动可怕、原有的业务转型问题等都降低了用户的信心。

  因此,虽然很多用户认识到无服务器的价值,但仍然认为承载核心业务很困难。

  针对这些关键问题,腾讯云今年6月发布了serverless 2.0,全面升级了产品形态、系统调度和开发工具。为了便于您理解,我们将以云功能的工作原理为出发点,说明问题产生的原因以及如何处理云功能。

  首先,让我们看看云函数,或者FAAS和IAAs以及PAAS之间的区别。

  FAAS不仅为用户提供了标准运行时,还帮助用户管理应用层的请求调度。开发人员只需专注于核心业务逻辑的开发,并根据功能的粒度编写代码。与底层硬件相关的资源维护将由更专业的云制造商完成。

  因此,对于用户来说,更多的精力和时间可以投入到业务上。对于IAAs和PAS,需要用户对虚拟机或容器集群进行传输和维护,建立业务所需的操作环境。

  其次,让我们看看云功能如何形成无服务器架构,以及云功能如何帮助用户进行资源管理和请求调度。

  本文还将解决云功能的冷启动、降低核心业务迁移的复杂性等问题。

  开发人员可以使用WebIDE或本地ide完成代码开发,然后通过插件、工具等方式将代码及其相关依赖项打包部署到云功能平台。用户可以选择部署为功能表单或服务表单。

  在代码中,用户需要实现自己的业务逻辑,如访问数据库、对象存储、消息队列、第三方服务接口等,计算逻辑和后端服务构成了所谓的无服务器应用架构。最终用户根据平台提供的请求方式触发部署在云功能平台上的业务代码,如发送HTTP请求。平台将根据用户的请求量,提取相应的计算资源运行用户代码。

  我们需要关注功能表单和服务表单的区别,因为服务表单可以大大降低复杂业务迁移的成本。

  服务表单支持在框架开发的基础上直接部署核心业务,如node.js的express和koa框架,而不需要拆分为无服务器应用的功能。平台将帮助用户启动服务流程和端口监控,服务表单不会限制业务的实际运行时间。

  功能表单和服务表单在接收用户请求时可以自动展开和收缩。

  函数表单为用户的每个请求分配一个运行实例,因此所有请求的执行体验都是相同的。当没有请求时,平台上没有运行实例,所以可以按需请求,但这也会导致所谓的冷启动——也就是说,当用户的第一个请求进入平台时,平台会临时拉上资源,这个过程会消耗一定的时间。为了消除冷启动,云功能平台会对一批不同规格的实例进行预初始化,并放入资源池。当用户有输入请求时,可以从资源池快速申请实例,直接挂载用户代码运行,从而减少资源应用时间。同时,对于功能表单,平台会根据历史并发数据进行预测,帮助用户预留一定数量的实例。这些实例将被预先分配到用户的帐户并加载用户的代码,这不仅直接消除了冷启动,而且增加了实例重用的可能性。

  服务表单可以为用户预留至少一个常驻实例,并将用户的所有请求传递给第一个实例,并根据实例的使用情况自动进行动态伸缩。

  函数形式更适合新项目,可以快速迭代。业务是根据功能的粒度来开发的。它不仅可以在云端轻松实现多个产品的联动,还可以享受到功能的高并发性和一致性的体验。服务模式更适合现有项目的迁移,繁重的复杂业务和需要长期运行的业务。

  最后,我们将讨论无服务器2.0的组件体系结构。

  如下图所示,虽然用户只需关注绿色部分和业务相关代码的实现,但平台还需要提供强大的开发工具,以确保开发和使用体验。例如,云功能、web IDE和Devops平台联合推出的无服务器本地开发工具和vs代码插件,可以大大提高开发和部署效率,实现本次开发、本地调试、联动云调试、本地部署、版本发布等功能。

  同时,云功能还完善了支持的监控报警机制,提供了调用时间、内存使用、并发使用、超时、代码错误等多维监控报警功能,这些功能如基础设施、资源管理、安全、容灾等都是必不可少的云功能平台的基本功能,也是开发人员关注的核心功能。

  无服务器不仅是计算,而且不断改善周围的生态环境。

  随着用户数量的增加,无服务器将不可避免地面临更多的挑战:如何帮助用户组织和管理代码,如何用状态来解决业务需求,如何实现数据库连接号管理,如何实现应用级部署等。我们也在不断探索和优化用户体验。我们计划提供无服务器数据库、性能监控、日志分析、无服务器框架、功能编排、高性能调用等功能。

抱歉!评论已关闭.