基于函数计算处理数据并分发的实践操作

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
函数计算FC,每月15万CU 3个月
简介: 函数计算作为一个后端数据处理服务跟表格存储结合起来,主要是数据驱动后续的分发行为。函数计算可以对存储到表格存储里的数据进行准实时处理(目前可以定义1秒触发一次、一次传输100条记录),通过触发器函数计算能够监控到表格存储里数据的增、删、改等操作,当批量数据在表格存储被修改后,触发器会通知函数来进行处理。

综述

阿里云的函数计算是2017年4月份发布,并于同年10月份正式商业化,是一款基于Serverless这种架构下实现的一款轻计算高弹性的产品。下面会讲解基于函数计算作为数据处理并分发后的场景。场景描述是这样,函数计算作为一个后端数据处理服务跟表格存储结合起来,主要是数据驱动后续的分发行为。函数计算可以对存储到表格存储里的数据进行准实时处理(目前可以定义1秒触发一次、一次传输100条记录),通过触发器函数计算能够监控到表格存储里数据的增、删、改等操作,当批量数据在表格存储被修改后,触发器会通知函数来进行处理。
常见的场景是,表格里的某个字段的数据被修改后,需要把变化内容通过消息通道或者通过移动推送给手机端。例如您的某个消息被回复,或者您发的帖子被删除或者置顶等操作后即可触发函数计算对数据处理后来通知你。
使用传统的架构处理通常是数据写入到表格存储后,需要写一个定时任务来拉取最新更新的数据然后再进行后续处理,在这里有几个技术问题需要关注:
1、 如何获取表格中最新更新的记录。
2、 定时器设置成多少才不成为应用瓶颈。
3、 如果更新的数据量较大,一次处理多少条数据。
4、 处理后的数据,需要写分发程序来调用其他资源。
5、 如果数据量更新较大,而超过一台服务器处理能力,怎么做负载均衡来分散处理请求。
传统IT架构图:
image
架构图讲解:接入端(手机、WEB端等)的请求把数据写入表格存储,后端云服务器拉取表格存储的数据进行处理,并把处理后的数据分发到例如消息通道,移动推送等。
针对上述提出的技术问题,可以通过函数计算+表格存储+消息通道较为完美的解决上述问题。用表格存储触发器+函数计算的架构如下:
image
通过架构对比,能看出最大的变化在用函数计算替换掉多台云服务器,这样的变动带来的好处有很多:
1、 函数计算和表格存储产品打通,可以通过控制台上简单配置即可完成两个产品的数据打通,详见下面讲解。
2、 函数计算在多并发的时候能弹性伸缩,不需要考虑当大量数据更新后怎么处理弹性问题。表格存储会间隔1秒把批量把更新的数据透传给函数计算,当一秒内处理不完请求,会启动新的执行环境来处理后续的请求。
3、 业务逻辑编写到函数计算里,处理好数据后,通过接口调用直接把数据发送给移动推送、消息通道等产品。
4、 函数计算是按照触发来计费,业务低谷期的费用非常低廉,不需要额外维护一些服务环境。

场景描述

下面根据上述的场景图,来细化每一步操作,按照步骤可以完成整个场景的搭建,整体流程图如下
image
下面章节会根据上述流程,把完整的操作步骤描述出来。

开通产品

在开始步骤之前,需要先开通以下产品,通过阿里云官网首页,找到各个产品详情页,并开通服务,这三个产品都是按量付费产品,开通流程都比较简单。
函数计算产品详情页:https://www.aliyun.com/product/fc
表格存储产品详情页:https://www.aliyun.com/product/ots
消息队列产品详情页:https://www.aliyun.com/product/mns
开通产品后,进入控制台,进行一些设置,开通流程可以参考如下几篇文章:

控制台的配置

表格存储的配置
分别开通上述产品后,需要对产品的联通进行配置,需要打通的产品如,函数计算和表格存储,函数计算和消息通道等,配置都相对简单,下面会使用少量界面图来引导每一步操作。
详细可以参考这篇文档 在表格存储使用函数计算。
打开表格存储的控制台,进入控制台创建实例->管理->创建数据表,在创建数据表的时候,请注意勾选上开启Stream方式,只有开启Stream方式,表格存储才会触发把更新的数据传输给函数计算。
在表格存储的管理界面里,选择触发器管理,如果原先已经写好的函数计算,可以选择,如果没有,可以跳转到函数计算创建页面进行创建,这个地方需要注意,为了保障网络延迟较小,表格存储和函数计算需要在同一个区域,详见下面配置好的页面。
image
注意点:
1、 数据表的区域需要和函数计算在同一个区域
2、 第一次使用函数计算触发器会提示角色授权
3、 一张表下只能创建一个触发器
4、 触发器是按照1秒执行一次,一次传输100条数据,依次处理。
函数计算的配置:
进入函数计算的控制台,开通服务后,选择跟表格存储同一个区域的创建一个新函数,选择一个空白模板,选择python语言,设置好相关信息,这里需要注意的是程序入口函数编写。Python语言的编写需要参考产品文档中的内容,其中入口函数和事件源的详细内容可以参考这篇文章。配置好的界面如下面图所示,
image
其中有几个地方需要注意:
1、 入口函数的编写
2、 运行语言版本
3、 执行所需要内存和超时时间,执行所需要的内存跟程序执行的资源相关,缺省可以使用128MB,超时时间不能小于程序执行时间,最长能设置300秒。
选择在线编辑代码,代码编写页面:
image
代码编写结束后,直接可以执行来调试,其中触发事件是为了让开发者可以在控制台上模板输入来进行调试。
消息通道的配置
消息通道不需要配置,开通即可使用,函数计算往消息通道发送信息的代码可以直接嵌入对应的SDK即可。

编写业务代码

完成上述配置后,进入编写业务代码,业务代码的编写都在函数计算里,其中逻辑会包含两段逻辑,第一段逻辑是接收表格存储推送过来的数据,第二段逻辑是把处理好的数据回写到表格存储中或者调用消息通道,并填写主题内容,详解图解:
image
第一段逻辑,接收表格存储的数据,可以参考详细文档。
示例代码稍后提供
第二块代码是把数据回写到表格存储中
示例代码稍后提供
第二段逻辑,把数据通知消息通道,
示例代码稍后提供
以上代码需要注意的事项如:
1、 函数计算的python运行环境缺省带了表格存储产品的SDK,所以不需要额外再安装。
2、 注意Python的书写格式,编辑器目前还无法校验语法错误。

调试程序

编写好业务代码,一般都需要进行调试,在函数计算里提供了事件源模拟器,详解下图:
imageimage
其中触发事件是主要为了让开发进行输入值的调试,例如期望程序拿到什么样的值,这个地方就可以模拟来是。在调试表格存储代码的时候,需要注意,表格存储触发器发送过来的数据是二进制的方式,为了方便调试,触发事件源可以用json串来模拟,正式使用的时候,把

records = cbor.loads(event) 注释去掉,records = json.loads(event)注释掉即可。

事件源的示例json串如下:

{
    "Version": "Sync-v1",
    "Records": [
        {
            "Type": "PutRow",
            "Info": {
                "Timestamp": 1506416585740836
            },
            "PrimaryKey": [
                {
                    "ColumnName": "pk_0",
                    "Value": 1506416585881590900
                },
                {
                    "ColumnName": "pk_1",
                    "Value": "2017-09-26 17:03:05.8815909 +0800 CST"
                },
                {
                    "ColumnName": "pk_2",
                    "Value": 1506416585741000
                }
            ],
            "Columns": [
                {
                    "Type": "Put",
                    "ColumnName": "attr_0",
                    "Value": "hello_table_store",
                    "Timestamp": 1506416585741
                },
                {
                    "Type": "Put",
                    "ColumnName": "attr_1",
                    "Value": 1506416585881590900,
                    "Timestamp": 1506416585741
                }
            ]
        }
    ]
}

结果汇总

设置好内容后,可以在控制台上执行看看,执行结果会显示很多内容,执行摘要里会带内存使用情况,执行时间,实际使用内存等等。同时会把执行过程中的日志也打印出来。
image
通过模拟器测试结果后,可以真实的跑一次应用看看,往表格存储里写入一些新记录,看看有没有触发后续的处理。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
1月前
|
运维 Kubernetes 前端开发
拥抱Knative, 合思加速Serverless化演进实践
合思信息基于阿里云容器服务Knative, 实现Serverless化演进的最佳实践。
拥抱Knative, 合思加速Serverless化演进实践
|
2月前
|
弹性计算 关系型数据库 Serverless
函数计算驱动多媒体文件处理:高效、稳定与成本优化实践
本次测评的解决方案《告别资源瓶颈,函数计算驱动多媒体文件处理》展示了如何利用阿里云函数计算高效处理多媒体文件。文档结构清晰、内容详实,适合新客户参考。方案提供了一键部署与手动部署两种方式,前者简便快捷,后者灵活性高但步骤较多。通过部署,用户可体验到基于函数计算的文件处理服务,显著提升处理效率和系统稳定性。此外,测评还对比了应用内处理文件与函数计算处理文件的不同,突出了函数计算在资源管理和成本控制方面的优势。
22705 19
|
2月前
|
运维 Kubernetes Serverless
Serverless Argo Workflows荣获信通院标杆实践案例,引领大规模离线任务处理新方法
阿里云容器服务Serverless Argo Workflows大规模离线计算工作流平台荣获2024信通院Serveless实践标杆案例。本文介绍其应用场景、平台特性以及领域实践。
|
2月前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
49 0
|
3月前
|
弹性计算 Dubbo Serverless
Serverless 应用引擎操作报错合集之遇到400错误,该如何处理
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
监控 Serverless 应用服务中间件
Serverless 应用引擎操作报错合集之删除通配符域名时遇到了报错,该如何处理
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
SQL canal Serverless
Serverless 应用引擎使用问题之每次记录的数据很少,如何不使用外链数据库储存数据
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
并行计算 Serverless 应用服务中间件
函数计算操作报错合集之部署Stable Diffusion启动失败,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
2月前
|
关系型数据库 Serverless API
神秘的 ADB Serverless 模式,究竟是怎样实现数据共享的?答案等你来揭晓!
【8月更文挑战第27天】在数字化时代,数据共享至关重要。阿里云AnalyticDB for MySQL的Serverless模式提供了一种高效便捷的解决方案。它采用多租户架构,确保数据安全隔离的同时支持资源共享;具备自动弹性伸缩能力,优化资源利用;支持多样化的数据导入导出方式及丰富的API,便于集成到各类应用中,实现数据价值最大化。无论是初创企业还是大型组织,均可从中获益。
44 0

相关产品

  • 函数计算