2021年Q2季度分享1

云函数 serverLess介绍

参考文档: https://cloud.tencent.com/document/product/583

云函数是什么

无服务器执行环境,函数即服务。
函数即服务和传统应用架构不同,函数服务提供的是事件触发式的运行方式,云函数不是始终运行的状态,而是在事件发生时由事件触发运行,并且在一次运行的过程中处理这一次事件。因此在云函数的代码中,仅需考虑针对一个事件的处理流程,而针对大量事件的高并发处理,由平台实现云函数的多实例并发来支持。
开发者仅需要关注函数级的业务开发即可。

计算资源的变迁
云服务器:以云服务器为扩展单位,虚拟化硬件设备。用户和其他租户共享物理机资源,仍可自行配置 CVM 的各项指标,相对部署和迭代更加简单。
容器:以服务为扩展单位,虚拟化操作系统。测试和生产环境完全一致,测试和部署非常轻松。
云函数:以函数为扩展单位,虚拟化运行时环境(Runtime)。是现有计算资源的最小单位,具有完全自动、一键部署、高度可扩展等特点,是轻量级服务部署非常好的选择。

云函数的特性

参考资料 https://cloud.tencent.com/product/scf

RVu9Cn

主要应用场景

  1. 文件处理及通知
  2. 数据 ETL 处理
    一些数据处理系统中,经常需要周期性、计划性处理庞大的数据量。
  3. http应用,api接口
  4. 小程序
  5. 业务流转
  6. 等等

云函数收费计算

内存使用量*函数运行时长。
按需付费,毫秒级计费模式
腾讯云云函数资源使用量支持按1ms时间粒度计费,相较于按100ms粒度计费,可以为您大幅度节约成本。

个人总结的云函数优缺点

优点

  1. 快速部署,开发者只需要关注业务代码。
  2. 收费方式灵活。适合低活跃度应用,空闲时间无需付费。
  3. 开发者无需关注负载均衡、自动伸缩等事项。

缺点

  1. 不适合热启动,高qps的应用。
  2. 不适合需要长时间运行的应用,webSocket等等
  3. 网络问题较多。个人遇到过访问cos出现socket hang up情况,请求自己的vps响应时间过长等情况。
  4. 云函数业务较为新颖,线上服务不是很稳定。个人遇到过 函数启动失败的情况,当时的处理方案是重新复制云函数才行。

云函数开发相关

目前云函数支持的语言

1
2
3
4
5
6
python
nodedjs
php
java
go
CustomRuntime 【实际上是脚本,可以调用各种其他语言代码】

环境变量

1、支持配置部分环境变量,如时区等等

依赖库

  1. 类似node、python 内部集成了部分依赖库可以不进行上传操作
  2. 可以把依赖库放入代码中 一起上传
  3. 可以设定自己的依赖库层 多个云函数使用同一套依赖库

函数触发器

  1. 对象存储 发布事件并调用函数 应用实例【1、收到新图像进行压缩处理 2、收到语音消息做转文字处理等等】
  2. API网关触发 【1、api接口计算返回处理 等等】
  3. 定时触发 【1、定时汇总数据 2、定时消息推送等】
  4. Kafka触发
  5. 还有很多各种云自己的触发规则 如CLB 触发器、CLS 触发器、CMQ Topic 触发器、MPS 触发器等等

云函数使用样例

我个人 使用的应用实例

  1. Twitter监控并翻译转发到qq群
  2. 无服务器下的 短链接业务的实现【存储腾讯云cos 腾讯云函数 腾讯网关api】
  3. 定时推送天气预报服务
  4. 微博监控并转发到QQ群
  5. getReportToQWechat qh360服务报表每周1 3 5 生成。定时获取数据推送到企业微信。
  6. bilibili直播每日签到

Midway Serverless 中的应用

参考文档:https://www.yuque.com/midwayjs/midway_v2/serverless_dev

midway 在Serverless中的应用部署实战

大概10分钟即可完成应用创建及部署

1、创建midway Serverless应用
备注:一定要使用–type=faas标识创建的是faas应用

1
$ npm init midway --type=faas my_midway_app

2、打开项目 编写自己的代码

3、创建api网关 修改f.yml配置 部署环境

参考文档 https://www.yuque.com/midwayjs/midway_v2/deploy_tencent_faq

f.yml配置样例

1
2
3
4
5
6
7
8
9
10
11
12
service:
name: midway-http

provider:
name: tencent
runtime: nodejs10
region: ap-shanghai
serviceId: service-ftg9j8ul

custom:
customDomain:
domainName: auto

4、发布部署

1
npm run deploy