0%

我们能用云函数做什么?

前言

本文以Firebase为例,因为腾讯云的云函数正在内测,还没申请到。:)

现如今云计算时代渐渐出现了越来越多的新型模式,从

IaaS: Infrastructure-as-a-Service(基础设施即服务)

PaaS: Platform-as-a-Service(平台即服务)

SaaS: Software-as-a-Service(软件即服务)

到CaaS:Containers as a Service(容器云)

再到的微服务架构,都在试着将各种软、硬件资源或抽象的事物做为一种服务提供给开发者使用,让开发者不再担心基础设施、资源需求、中间件等等,在减轻心智负担的同时更好地专注于业务。

FaaS是Functions as a Service(函数即服务)的简称,它往往和无服务架构(Serverless Architecture)一同被提起。

正文

腾讯云的SCF

无服务器云函数(Serverless Cloud Function)是腾讯云提供的无服务器(serverless)执行环境,您无需购买和管理服务器,而只需使用平台支持的语言编写核心代码并设置代码运行的条件,代码即可在腾讯云基础设施上弹性、安全地运行。腾讯云完全管理底层计算资源,包括服务器 CPU、内存、网络和其他配置/资源维护、代码部署、弹性伸缩、负载均衡等。代码按需运行,空闲时不收费。使用无服务器云函数将帮您免除所有运维性操作,使您更加专注于核心业务的开发,实现快速上线和迭代,把握业务发展的黄金时期。

Firebase

云函数使开发人员能够访问Firebase和Google Cloud的一些事件,以及可扩展的计算来运行代码以响应处理这些事件。 Firebase以独特的方式使用云函数来满足其独特需求,典型运用的领域:

  1. 当发生了一些新奇有趣的事情通知用户
  2. 执行实时的数据库清理和维护
  3. 在云上执行密集的任务,而不是在本地的应用程序上
  4. 与第三方的服务和API集成

下面就进行一一说明。

一、当发生了一些新奇有趣的事情通知用户

开发人员可以使用云函数来保持与用户之间的联系和获取最新的有关应用程序的相关信息。

比如,在一些社交网站或应用上(如微博)。 在这样的程序中,由实时数据库触发的写入功能以存储新的关注者可以创建Firebase的云消息通知,让用户知道他们的粉丝数又增加了。

下面是它的工作原理图:

  1. 该函数在对实时的数据库路径写入了相关信息,存储粉丝
  2. 该函数通过向FCM(Google的推送服务)发送消息
  3. FCM向用户的设备发送通知消息

YingJoy

其它通知的用例

  1. 向订阅/取消订阅的用户发送确认电子邮件
  2. 用户完成注册后发送欢迎邮件
  3. 当用户创建新帐户时发送短信确认

等等

二、实时进行数据库的清理和维护

使用云函数数据库处理事件,可以根据用户行为修改实时数据库,保持系统的更新和清洁。 例如,在基于实时数据库的聊天室应用程序中,您可以监视写入的事件,并从用户的消息中擦除一些带有敏感词或不恰当的文本。 下面是它的工作原理图:

  1. 函数的数据库事件处理程序监听特定路径上的写入事件,并检索所有聊天消息的事件。
  2. 该函数处理文本以检测和擦除敏感词或不恰当的语言。
  3. 该函数将更新的文本重新写回数据库。

YingJoy

其他实时数据库清理和维护用例

  1. 从实时数据库中清除已删除用户的账户信息
  2. 限制数据库中的子节点数
  3. 跟踪实时数据库列表中的元素数量
  4. 将文本转换为表情符号
  5. 管理数据库记录的计算元数据

三、在云上执行密集的任务,而不是在本地的应用程序上

开发人员可以利用云端功能将云资源密集型工作(要耗费繁重的CPU资源或网络资源)将运行的实际情况传送到在用户设备上。 例如,您可以编写一个函数来监听图像上传到Storage(谷歌的一个存储图像的程序)中,将图片的映像下载到运行该功能的实例,修改它并将其上传回页面中。 修改包括调整图片大小,裁剪或转换图像。利用ImageMagick命令行工具,与云功能一起使用,使其工作变得更加简单容易。

下面是它的工作原理图:

  1. 当图像上传到Storage的时候,该函数会被触发
  2. 该函数下载该图像的并创建它的缩略图
  3. 该函数将此缩略图的位置写入数据库,这样客户端程序就可以使用它
  4. 该函数将缩略图上传到新的存储位置

YingJoy

其他在云上执行密集的任务,而不是在本地的应用程序上用例

1.定期删除未使用的帐户

2.自动和上传的图像

3.向用户发送批量电子邮件

4.定期汇总数据

5.处理待处理的工作队列

四、与第三方的服务和API集成

云函数可以通过调用和公开服务或API来使你的应用程序可以更好地与其他服务配合工作。 例如,用于开发团队的应用程序可以将GitHub提交到开发团队的聊天室。

下面是它的工作原理图:

  1. 当有人提交给GitHub,通过GitHub的webhook API触发HTTPS功能。

  2. 该函数将提供一个Team Slack API 来发送提交的通知。

  3. 然后把消息发送给团队的聊天室中
    YingJoy
    其他与第三方的服务和API集成用例

    1. 使用Google的Cloud Vision API分析和标记上传的图像。
    2. 使用Google翻译邮件
    3. 使用LinkedIn或Instagram身份验证服务
    4. 向实时数据库写入webhook的发送请求
    5. 实时数据库元素的全库搜索
    6. 创建自动回复电话和短信
    7. 使用Google助手创建聊天机器人

再回头看腾讯云提供的SCF

这里仅仅讨论它的应用场景

Ⅰ、实时文件处理

视频应用、社交应用等场景下,用户上传的图片、音视频的总量大频率高,对移动应用的实时性和并发能力都有较高的要求。例如:使用多个云函数对上传的视频短片进行转码,分别对应不同的清晰度(1080p、720p 等),以满足不同场景下用户的需求,适应移动网络带宽较小且不稳定的特性。

  1. 先由客户端上传视频至云对象存储COS
  2. 然后通过自动触发云函数对视频进行处理(不同清晰度的转码)
  3. 然后将转码后的视频重新上传至云对象存储COS
  4. 最后再发送给用户

其中视频文件始终在COS上

Ⅱ、数据ELT处理

一些数据处理系统中,常常需要周期性/计划性地处理庞大的数据量。例如:证券公司每12小时统计一次该时段的交易情况并整理出该时段交易量 top 5,每天处理一遍秒杀网站的交易流日志获取因售罄而导致的错误从而分析商品热度和趋势等。

此时,腾讯云无服务器云函数 SCF 近乎无限扩容的能力可以使您轻松地进行大容量数据的计算。在下图所示的例子中,SCF 可以对源数据并发执行多个 mapper 函数,在短时间内完成工作,相比传统的工作方式,更能避免资源的闲置浪费而节省资金。

类似于上面的在云上执行密集的任务,而不是在本地的应用程序上

  1. 将存储在云对象存储COS的文件通过Map云函数进行文件映射
  2. 将映射出来的许多小文件分别通过云函数处理
  3. 然后将处理后的文件存储至云数据库中(使得Map更加持久化)
  4. 然后通过Reduce函数将文件整合
  5. 最后会重新把这个新得到的存储到COS中

Ⅲ、移动及Web应用后端

无服务器云函数和其他腾讯云云服务紧密结合,开发者能够构建可弹性扩展并在多个数据中心高可用运行的移动或 Web 应用程序 – 轻松创建丰富的无服务器后端,无需在可扩展性、备份冗余方面执行任何管理工作。

  1. 用户授权登陆(OAuth)利用云函数进行验证(上面的与第三方服务或API集成)
  2. 浏览商品,商品信息存储在云对象存储COS
  3. 云函数处理用户的下单(历史数据或刚刚下的单)来对用户进行产品推荐

其中:
1.使用 COS 托管静态网站,构建商品明细模块;

2.使用 无服务器云函数 构建登录模块,可以直接复用 OAuth 的授权登录逻辑;

3.使用 无服务器云函数 构建订单模块,在用户调用下单相关接口时触发增删订单等函数;

4.同时使用 无服务器云函数 支持个性化模块,根据用户的订单信息生成个性化数据并返回给客户端。