三分钟学会如何在函数计算中使用 puppeteer
摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网页等,实现 UI 自动化测试和捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题
简介
使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:
- 生成网页截图或者 PDF
- 高级爬虫,可以爬取大量异步渲染内容的网页
- 模拟键盘输入、表单自动提交、登录网页等,实现 UI 自动化测试
- 捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题
接下来,将基于一个脚手架项目开发我们自己 puppeteer 项目。
下载项目
>>> git clone -o starter-kit https://github.com/awesome-fc/puppeteer-fc-starter-kit.git your_project_name
项目结构
├── lib chrome headless 依赖的共享库,打包的时候,拷贝到打包项目的根目录下
├── chrome
│ ├── buildChrome.sh 编译 chrome headless shell 脚本,基于它,可以编译最新的版本
│ └── headless_shell.tar.gz 编译后的 chrome headless 二进制打包文件
├── src
│ ├── index.js 函数调用入口文件,函数 handler 为 index.handler,您的业务代码写在这里
│ └── starter-kit
│ ├── config.js 通过环境变量,获取相关配置属性,如:chrome 执行目录和安装目录等配置
│ ├── local.js 本地测试操作 chrome headless 的 API 是否正确,通过执行命令:npm run local
│ └── setup.js 安装 chrome headless 相关逻辑代码,如:基于 OSS 安装或者本地目录安装
├── package.json
└── package.zip 输出函数计算打包文件,通过命令:npm run package 或 npm run package-nochrome
如何写业务代码
index.js 文件
const setup = require('./starter-kit/setup');exports.handler = async (event, context, callback) => {const browser = await setup.getBrowser(context);exports.run(browser).then((result) => callback(null, result)).catch((err) => callback(err));
};exports.run = async (browser) => {// 实现您自己的业务代码// 下面是一个示例代码,需要替换成您自己的业务代码// 示例实现了对固定网页截图并返回图片的功能const page = await browser.newPage();await page.goto('https://fc.console.aliyun.com');return page.screenshot({clip: {x: 200,y: 60,width: 780,height: 450,},});
};
本地测试
执行命令: npm run local
。测试您操作 chrome headless 的相关 api 是否正确运行。
编译打包
包含 chrome headless
执行命令:npm run package
。命令会将 chrome headless 文件一起打包进项目,放在项目根目录,函数执行的时候,默认将 chrome headless 安装到 /tmp
目录。
不包含 chrome headless
执行命令:npm run package-nochrome
。命令不会将 chrome headless 文件一起打包进项目,你需要额外将 chrome-headless 上传到 OSS,通过环境变量告诉函数如何从 OSS 下载并安装,默认将 chrome headless 安装到 /tmp
目录。为函数计算设置环境变量:
- CHROME_BUCKET(必填): chrome headless 上传到 OSS 的 bucket
- CHROME_REGION(必填): chrome headless 上传到 OSS 的 region
- CHROME_KEY(必填): chrome headless 上传到 OSS 的 key。 默认值: headless_shell.tar.gz
部署
编译打包输出的文件:package.zip,通过函数计算控制台或者 fcli 命令工具上传已打包文件。fcli 上传已打包文件命令:
# 在相应 service 目录下
>>> mkf myFunction -h index.handler -f package.zip -t nodejs8 # 代码在本地的 package.zip 中
为什么要使用函数计算
函数计算是一个相对较新的事物,可能大部分开发人员或架构师对它很陌生。微服务架构是当下很流行的一种系统架构,微服务架构有没有不够完美的地方?答案是肯定的。基于微服务架构,我们需要考虑使用什么微服务框架来架构系统、需要多少台服务器、如何有效减轻运维负担等一些列问题。另外,按照《福布斯》杂志的统计,在商业和企业数据中心的典型服务器仅提供 5%~15% 的平均最大处理能力的输出。这无疑是一种资源的巨大浪费。
有没有办法解决上面的不足?答案也是肯定的,阿里云函数计算就是在这样的背景下应运而生的。如果把云计算理解成一个执行环境,那么,在这个环境里,函数(即业务逻辑的载体)+ 数据(即跟业务相关的输入与输出)就是应用的核心,有了函数、数据、事件这三者,其它任何代码和框架,无非是整个应用的胶水和UI罢了。那么,最理想的情况就是用最少的时间写胶水,将更多的时间投入到核心应用的开发中,甚至,彻底实现整个软件栈的微服务化。函数计算就是这里的胶水。
开发效率
项目开发效率 | 传统微服务方式 | 函数计算方式 |
---|---|---|
采购服务器等基础设施 | 需要 | 不需要 |
管理服务器等基础设施 | 需要 | 不需要 |
开发业务服务模块 | 需要 | 需要 |
部署业务服务模块 | 需要 | 需要,但是很简单,提供了很多工具 |
通过 nginx 搭建反向代理、https 和负载均衡 | 需要 | 不需要,通过阿里云 API 网关或函数 HTTP 触发器可以实现 |
搭建相关日志服务 | 需要 | 不需要,通过日志开关开启日志服务 |
配置安全访问规则 | 需要 | 不需要,自带基础安全访问配置,API 网关提供更多的配置 |
运维负担 | 重 | 轻 |
开发效率 | 低 | 高,通常几天就能完成 |
可靠性
项目可靠性 | 传统微服务方式 | 函数计算方式 |
---|---|---|
峰值压力 | 当峰值压力突增时,计算资源扩容不及时容易导致服务过载 | 弹性伸缩,面对峰值压力 |
错误处理 | 需要自行处理服务器宕机,进程崩溃等问题 | 无需处理服务器等故障,函数计算实现基础设施的容错 |
项目架构 | 基础设施管理比较复杂 | 系统架构经过大量项目的验证和长时间的打磨,相对稳定可靠很多 |
成本
项目成本 | 传统微服务方式 | 函数计算方式 |
---|---|---|
采购服务器等基础设施成本 | 成本高,利用率低 | 无 |
代码开发成本 | 成本高,包含基础架构代码和业务代码 | 成本低,只需关注业务代码开发 |
函数计算成本 | 无 | 成本低,按需付费,每月还有一定免额 |
运维成本 | 成本高,难度大 | 成本低,难度很小,甚至可以不需要专门的运维人员 |
集成阿里云其他产品成本,如 OSS 和RDS 等 | 成本高 | 成本低,提供对阿里云其他产品无缝集成 |
安全
项目安全 | 传统微服务方式 | 函数计算方式 |
---|---|---|
身份认证和访问控制 | 需自行实现 | 除非您显式的允许匿名调用函数,函数计算将对每一个 API 调用进行身份验证。只有获得您的显式授权(借助于阿里云访问控制服务,RAM),您的函数才可以访问其他云服务资源或者被其他用户/云服务调用。借助阿里云 API 网关,您也可以使用 OpenID 等机制对函数调用进行身份验证 |
操作追踪和审计 | 需自行实现 | 需自行实现 |
数据安全 | 需自行实现 | 通过使用访问控制授权和函数计算环境变量等功能,您不必再将访问凭证等敏感信息保存在代码中。所有您借助函数计算服务持久化保存的数据,包括代码、环境变量等等,都被加密存储。系统在运行代码之前,将对代码进行完整性检测 |
运行时安全 | 需自行实现 | 每个函数都在独立的、隔离的环境中被执行。函数计算提供与阿里云弹性计算(ECS)相同的隔离强度。函数计算会周期性的重置运行时环境,并自动更新操作系统以及运行时依赖软件的安全补丁 |
异常响应 | 需自行实现 | 函数计算允许您设置资源使用的上限,确保您的费用消耗可控。同时,函数计算提供函数调用次数,流控次数,错误率等指标。借助云监控,您可以为相关指标设置监控报警,快速响应异常情况 |
总结
函数计算有如下优势:
- 无需采购和管理服务器等基础设施
- 专注业务逻辑的开发
- 提供日志查询、性能监控、报警等功能快速排查故障
- 以事件驱动的方式触发应用响应用户请求
- 毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力
- 按需付费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景
原文链接
本文为云栖社区原创内容,未经允许不得转载。
三分钟学会如何在函数计算中使用 puppeteer相关推荐
- 三分钟学会css3中的flexbox布局
2019独角兽企业重金招聘Python工程师标准>>> 这篇文章里我们将学习CSS里flexbox布局的几个最重要的概念,通过学习flexbox布局,你会发现以往遇到的所有的关于布局 ...
- c语言getsum函数的用法,只会用“Sum函数”求和的你,请花1分钟学会Sum if函数!...
原标题:只会用"Sum函数"求和的你,请花1分钟学会Sum if函数! 60秒get一个HR实用小技巧 说到求和函数,你先想到的是什么? 如果你脱口而出的是"Sum函数& ...
- Juniper 210 密码清不掉_三分钟学会如何找回mysql密码
一.在测试工作中我们肯定会写一些sq查询语句方便我们验证数据是否正确,从而判断当前软件是否存在缺陷,但是查询的过程中肯定需要我们先连接数据库,如果数据库密码忘记我们就无法完成工作,这里就教会大家如何快 ...
- 10分钟上线 - API网关 + 函数计算实现图片处理服务
摘要: 阿里云函数计算服务(FunctionCompute,FC)是一个事件驱动的全托管计算服务.通过函数计算与云端各个服务的广泛集成,开发者只需要编写函数代码,就能够快速地开发出弹性高可用的后端系统 ...
- 入门篇:函数计算中角色和访问策略的讲解
阿里云函数计算是近期推出的一个无服务器的全托管的产品,使用者只需编写核心代码并设置运行的条件,即可在函数计算以弹性.安全地运行.函数计算能自行维护服务器资源,网络资源,以及消息分发和负载均衡等功能. ...
- 三分钟学会PS小清新调色教程-萧蕊冰
今天的PS小教程教你三分钟学会PS小清新调色教程.夏天到了,夏天的阳光很大,拍出的照片都会有一种暖色的感觉,那么我们怎么把一张照片调成日式小清新呢?今天我们就来学一个PS小清新调色教程,让你体验一下日 ...
- 异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题
作者 | 千风 本文分为三个部分:概述中引入了积压问题,并介绍了函数计算异步调用基本链路:并在指标介绍部分详细介绍了指标查看方式,分类解读了不同的指标含义:最后以一个常见的异步请求积压场景为例,介绍如 ...
- WORD如何设置打印? 三分钟学会WORD打印技巧
我们在办公的时候,很多人时常会需要打印各种各样的文件,很多人都只知道,去打印当前页,或者是整个文档,但在Word打印中也有很多不同的技巧,那么Word如何设置打印?今天呢就来给大家分享一下Word打印 ...
- kdj超卖_三分钟学会KDJ三大买卖绝技,简单高效,把握最佳买卖点,不懂KDJ的股民值得一看!...
本文由公众号:越声策略(yslc188)整理,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负. KDJ指标是一种相对较容易理解的技术指标之一,但若想真正的掌握并正确的运用就需要我们对其进 ...
最新文章
- 【python】 OSError:sift not found 问题解决
- sqlite的速度_内存不够用还要速度快,终于找到可以基于 File 的 Cache 了
- c语言oj合法标识符,YTUOJ-C语言合法标识符
- Swift中文教程(一)基础数据类型
- JavaScript DOM扩展——“选择符API和元素遍历”的注意要点
- 用python画熊猫_熊猫read_excel()–用Python读取Excel文件
- DLL文件如何还原打开方式
- Spring In Action 第四版:中文、英文、源码
- HTML5期末大作业:影评网站的设计--豆瓣以及IMDb等影评网站
- Linux-网络命令
- 【报告分享】2021天猫坚果消费趋势报告-CBNData(附下载)
- 关于EasyDarwinGo部署海康威视rtsp转hls视频多摄像头的服务器视频转码
- IC工程师入门必学《Verilog超详细教程》(附下载)
- 百度SRE面经-为三面攒人品
- 黑马程序员_Java基础_前期准备02-1
- 程序员不破此关,难达优秀
- 64位进程调用32位DLL详解
- 如何将jpg等格式的图片转化为yuv
- i3-1115G4 怎么样 相当于什么水平
- android 运行时报错 suppressing toast from package com.*** by user request.的解决。
热门文章
- main方法 如何去掉http debug日志_在MyBatis中如何使用collection标签实现嵌套查询?...
- mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作
- mysql5.7.24 安装步骤_MySQL5.7.24解压版安装步骤
- map insert异常失败_处理dubbo反序列化失败的坑
- k8s 手动恢复redis 集群_高工面试之:redis的几种集群方式你都熟悉吗?
- 安卓线程同步面试_Android面试题
- php mysql练手_ThinkPHP5练手Demo实战
- linux gpio按键驱动程序,Linux GPIO Key 驱动的加载
- 云星空计算机名访问不可以,03.PLM系统访问金蝶云星空(webapi):读取基础资料编码、名称...
- 岳阳鸿蒙数学培优阶梯训练,鸿蒙应用-呼吸训练app部分练习展示(开始)