作者:Ethin

从云计算到函数计算

点击上方图片了解活动概况!

哈喽各位开发者,为了协助咱们客观了解并运用阿里云函数核算(FC),阿里云开发者社区携手云原生运用渠道 Serverless 团队发布 “Serverless 函数核算搜集令”,供给免费资源额度约请你发文评测,7月31日前参与活动,即有时机获得千元好礼 + 千元函数核算资源包!

当即参与:

developer.aliyun.com/topic/serve…

悄悄说…现在投稿还可领取优酷视频季卡一张;下面让咱们跟从笔友 “Ethin”的步伐,看看他眼中的 Serverless 国际吧!

函数核算,你的姓名

云核算,是一种依据互联网的核算方法,经过这种方法,同享的软硬件资源和信息能够按需求供给给核算机各种终端和其他设备,运用服务商供给的电脑基建作核算资源,因而用 “云” 来指代 “网络核算资源” 这是一种十分恰当的比喻。

从云计算到函数计算

美国国家标准和技能研究院的云核算界说中明确了三种服务形式,分别是软件即服务(SaaS)、渠道即服务(PaaS)和根底设施即服务(IaaS)。

阿里云的产品能悉数覆盖这三种服务形式,如果分别举个比如那么应该是:宜搭(SaaS 加速器)、函数核算 FC 和云服务器 ECS。

Serverless 核算服务,其依据 PaaS 又不同于 PaaS,因而更多时候被称作功用即服务(Function-as-a-Service,缩写为 FaaS)。函数核算 FC 是阿里云的事件驱动的全保管 Serverless 核算服务产品,我想函数核算 Function Compute 的姓名便是这样诞生的。

函数核算,直达运用的中心

咱们知道运用的中心是逻辑和存储,而代码首要完成事务逻辑和耐久化。

函数核算 FC 总体上是:FaaS+BaaS

函数指核算函数,包含了事务逻辑部分,这一部分由 FaaS 来完成;而数据耐久化、消息推送和账户系统等,由 BaaS 来完成。

ECS ?FC ?

从云计算到函数计算

Serverless 服务并不是没有服务器了,而是作为一种新的架构让咱们在以往传统运用保护上的作业得到进一步下降。

以常见的首要依据云服务器的 Web 服务为例,大致有这样的流程:

从云计算到函数计算

在服务过程中,服务器或许触及路由规则、鉴权逻辑以及其他各类杂乱的事务代码。一起,开发团队不只要将精力用于开发,还要付出很大的精力在服务器的运维上面。例如要时刻关注以下问题:

  • 服务器功用能否应对或许突然爆发的用户恳求,何时扩容?
  • 服务器上的脚本和事务代码等多少还在健康运转?
  • 外部网络安全威胁到来时怎么保证数据安全?

面临许多问题的确会让人头大,但如果咱们摒弃依据服务器的架构而转用 Serverless 架构之后;服务的过程就变成了这样:

从云计算到函数计算

当客户端和数据库未发生变化的前提下,服务器变成了 Serverless 的架构。作业的分工发生了巨变。

例如,之前需求开发团队保护的路由模块以及鉴权模块都将接入服务商供给的 API 网关系统以及鉴权系统,开发团队无须再保护这两部分的事务代码,只需求持续保护相关规则即可,再也不必忧虑运用的构建;事务代码被拆分成了函数粒度,不同函数表明不同的功用,依据恳求量还能够完成毫秒级扩容;事务逻辑之外的一部分安全问题、资源调度问题全都交由云厂商负责。

从云计算到函数计算

除了开发和保护产品的省心,在详细完本钱钱上也能到达降本增效的作用。相关于传统项目服务的全天候运转来说,函数核算 FC 是依据事件驱动的,只有在用户建议恳求时,函数才会被激活而且履行,运转本钱按量收费,本钱相较于节省计划还有显着的价格优势。

函数核算 FC:解放生产力,更专心于运用的事务自身

运用云服务器,咱们不必操心物理机房的运转保护等操作系统层之下的内容;运用函数核算 FC,咱们不再需求装操作系统、容器配置、运转环境,更不必忧虑环境程序会挂掉。

从云计算到函数计算

可见,选用函数核算 FC 的 Serverless 架构后,用户仅需运维与运用有关的函数,ECS 架构下需求操心的东西现在只剩下了一个:

从云计算到函数计算

函数核算似乎一场全新的技能革命,当咱们运用了函数核算 FC 的 Serverless 架构后:

开发团队不需求再自己保护服务器,也不需求自己操心服务器的各种功用指标和资源利用率,团队的运维能够愈加专心的将监控目光放到监控运用程序自身的衡量。

运用的布置将变得十分容易。咱们只要上传根本的代码,一起不需运用 Puppet、Chef、Ansible 或 Docker 来进行配置管理,大大下降了运维本钱。

综上所述,相关于传统项目,函数核算 FC 具有以下优势:

  • 用户无需采购和管理服务器等根底设施,运维本钱低,安全性更高。(涵盖了云服务器的优势)。
  • 用户只需专心事务逻辑的开发,运用函数核算支撑的开发言语规划、优化、测试、审核以及上传自己的运用代码。结合作业流,代码提交主动布置,直接运转!
  • 函数核算 FC 以事件驱动的方法触发运用响运用户恳求。与阿里云对象存储 OSS、API 网关、日志服务和表格存储等服务无缝对接,协助快速构建运用。
  • 简化运维作业,供给日志查询、功用监控和报警等功用快速排查故障。
  • 不必忧虑功用问题,架构更富有弹性,毫秒级别弹性伸缩,快速完成底层扩容以应对峰值压力。
  • 运用本钱低,按需付费,支撑百毫秒级别收费。只需为实际运用的核算资源付费,适合有显着波峰波谷的用户拜访场景。

函数核算 FC 似乎是真正完成 “像云相同” 的云核算愿景,它很好的诠释了:最大程度利用资源、减少空闲资源浪费的环保理念以及下降学习本钱和运用本钱的现实需求。

如此妙哉的函数核算该怎么体验呢?

函数核算 FC 供给运转环境、开发者东西和函数触发器等功用。一起,函数核算 FC 供给有免费履行次数 : 100万 (次)和免费资源运用量 : 40万 (GB-秒)。关于小范围的上线运用,咱们只用担负公网流量费用和其他资源付费即可。

从云计算到函数计算

最常用的函数核算创立方法是控制台进入服务及函数子页面,依次创立服务和函数。一个服务能够由多个函数组成,一个函数只能隶属于一个服务。

当然,阿里云供给了一键式的在函数核算控制台-运用页面,咱们能够经过模板和库房导入来创立:

目前公测中的模板中心包含了各类来自官方或社区的合计 56 个运用或框架模板,覆盖现已相当全面了。在官方文档的指导下能够完成零根底创立 FC 运用。

从云计算到函数计算

由繁到简,从长到短

实践:依据 Node.js + Serverless 的 Web 短网址跳转

首要功用:

完成长衔接与短链接的映射。

简要描述:

用户能够为指定 URL 创立对应短链

用户拜访短链,主动跳转到相应 URL

如上文所说,用函数核算 FC 构建运用总体上要是 FaaS+BaaS。下面的实践项目触及到 BaaS 数据库的运用,便利起见运用云开发渠道搭建运用。

运用架构图如下:

从云计算到函数计算

资源预备:

需求注册开通云开发渠道并激活以下服务;

  • API 网关/API Gateway
  • 函数核算/Function Compute
  • 对象存储/Object Storage Service
  • 日志服务/Log Service
  • MongoDB Serverless 实例

数据库部分:

  • 购买 MongoDB Serverless 版。
  • 新建调集,新建调集其实就相当于新建一个表。创立调集:links、logs。
  • 经过程序代码衔接 Serverless 实例,运用方法拜见官方文档:help.aliyun.com/document_de…

逻辑代码部分示例: (Attention: 该项目还运用了 Express 框架,以便于简化路由处理)

import storage from '../storage'
export default async (req, res): Promise<any> => {
  // params from request body or querystring
  const params = req.body ?? req.query
  const { url = '', slug = '' } = params as { url?: string, slug?: string }
  // url is required
  if (url === '') {
    return res.status(400).send({ message: 'Missing required parameter: url.' })
  }
  // url format check
  if (!/^https?://.{3,}/.test(url)) {
    return res.status(400).send({ message: 'Illegal format: url.' })
  }
  // custom slug length check
  if (slug.length !== 0 && (slug.length < 2 || slug.length > 10)) {
    return res.status(400).send({ message: 'Illegal length: slug, (>= 2 && <= 10).' })
  }
  const getForwarded = (name: string): string => req.headers[`x-forwarded-${name}`]?.toString() ?? ''
  try {
    // request origin url
    const origin = `${getForwarded('proto')}://${getForwarded('host')}/`
    // if slug customized
    if (slug !== '') {
      const existUrl = await storage.getUrlBySlug(slug)
      // url & slug are the same.
      if (existUrl === url) {
        return res.send({ slug, link: origin + slug })
      }
      // slug already exists
      if (existUrl != null) {
        return res.status(400).send({ message: 'Slug already exists.' })
      }
    }
    // target url exists
    const existSlug = await storage.getSlugByUrl(url)
    // url exists & no custom slug
    if (existSlug != null && slug === '') {
      return res.send({ slug: existSlug, link: origin + existSlug })
    }
    // create if not exists
    const newSlug = await storage.addLink(url, slug)
    // response
    res.send({ slug: newSlug, link: origin + newSlug })
  } catch (e) {
    return res.status(500).send({ message: e.message })
  }
}

从云计算到函数计算

完成前端静态页面后便可绑定域名上线测试。

(Attention:需求绑定已备案域名)

结语

Serverless 作为云原生玩家的首选微服务已逐步得到大众认同并快速发展起来,等待未来会有更多依据 Serverless 的运用。

戳此处,当即检查作者原文!