摘要: 使用 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相关推荐

  1. 三分钟学会css3中的flexbox布局

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章里我们将学习CSS里flexbox布局的几个最重要的概念,通过学习flexbox布局,你会发现以往遇到的所有的关于布局 ...

  2. c语言getsum函数的用法,只会用“Sum函数”求和的你,请花1分钟学会Sum if函数!...

    原标题:只会用"Sum函数"求和的你,请花1分钟学会Sum if函数! 60秒get一个HR实用小技巧 说到求和函数,你先想到的是什么? 如果你脱口而出的是"Sum函数& ...

  3. Juniper 210 密码清不掉_三分钟学会如何找回mysql密码

    一.在测试工作中我们肯定会写一些sq查询语句方便我们验证数据是否正确,从而判断当前软件是否存在缺陷,但是查询的过程中肯定需要我们先连接数据库,如果数据库密码忘记我们就无法完成工作,这里就教会大家如何快 ...

  4. 10分钟上线 - API网关 + 函数计算实现图片处理服务

    摘要: 阿里云函数计算服务(FunctionCompute,FC)是一个事件驱动的全托管计算服务.通过函数计算与云端各个服务的广泛集成,开发者只需要编写函数代码,就能够快速地开发出弹性高可用的后端系统 ...

  5. 入门篇:函数计算中角色和访问策略的讲解

    阿里云函数计算是近期推出的一个无服务器的全托管的产品,使用者只需编写核心代码并设置运行的条件,即可在函数计算以弹性.安全地运行.函数计算能自行维护服务器资源,网络资源,以及消息分发和负载均衡等功能. ...

  6. 三分钟学会PS小清新调色教程-萧蕊冰

    今天的PS小教程教你三分钟学会PS小清新调色教程.夏天到了,夏天的阳光很大,拍出的照片都会有一种暖色的感觉,那么我们怎么把一张照片调成日式小清新呢?今天我们就来学一个PS小清新调色教程,让你体验一下日 ...

  7. 异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题

    作者 | 千风 本文分为三个部分:概述中引入了积压问题,并介绍了函数计算异步调用基本链路:并在指标介绍部分详细介绍了指标查看方式,分类解读了不同的指标含义:最后以一个常见的异步请求积压场景为例,介绍如 ...

  8. WORD如何设置打印? 三分钟学会WORD打印技巧

    我们在办公的时候,很多人时常会需要打印各种各样的文件,很多人都只知道,去打印当前页,或者是整个文档,但在Word打印中也有很多不同的技巧,那么Word如何设置打印?今天呢就来给大家分享一下Word打印 ...

  9. kdj超卖_三分钟学会KDJ三大买卖绝技,简单高效,把握最佳买卖点,不懂KDJ的股民值得一看!...

    本文由公众号:越声策略(yslc188)整理,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负. KDJ指标是一种相对较容易理解的技术指标之一,但若想真正的掌握并正确的运用就需要我们对其进 ...

最新文章

  1. 【python】 OSError:sift not found 问题解决
  2. sqlite的速度_内存不够用还要速度快,终于找到可以基于 File 的 Cache 了
  3. c语言oj合法标识符,YTUOJ-C语言合法标识符
  4. Swift中文教程(一)基础数据类型
  5. JavaScript DOM扩展——“选择符API和元素遍历”的注意要点
  6. 用python画熊猫_熊猫read_excel()–用Python读取Excel文件
  7. DLL文件如何还原打开方式
  8. Spring In Action 第四版:中文、英文、源码
  9. HTML5期末大作业:影评网站的设计--豆瓣以及IMDb等影评网站
  10. Linux-网络命令
  11. 【报告分享】2021天猫坚果消费趋势报告-CBNData(附下载)
  12. 关于EasyDarwinGo部署海康威视rtsp转hls视频多摄像头的服务器视频转码
  13. IC工程师入门必学《Verilog超详细教程》(附下载)
  14. 百度SRE面经-为三面攒人品
  15. 黑马程序员_Java基础_前期准备02-1
  16. 程序员不破此关,难达优秀
  17. 64位进程调用32位DLL详解
  18. 如何将jpg等格式的图片转化为yuv
  19. i3-1115G4 怎么样 相当于什么水平
  20. android 运行时报错 suppressing toast from package com.*** by user request.的解决。

热门文章

  1. main方法 如何去掉http debug日志_在MyBatis中如何使用collection标签实现嵌套查询?...
  2. mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作
  3. mysql5.7.24 安装步骤_MySQL5.7.24解压版安装步骤
  4. map insert异常失败_处理dubbo反序列化失败的坑
  5. k8s 手动恢复redis 集群_高工面试之:redis的几种集群方式你都熟悉吗?
  6. 安卓线程同步面试_Android面试题
  7. php mysql练手_ThinkPHP5练手Demo实战
  8. linux gpio按键驱动程序,Linux GPIO Key 驱动的加载
  9. 云星空计算机名访问不可以,03.PLM系统访问金蝶云星空(webapi):读取基础资料编码、名称...
  10. 岳阳鸿蒙数学培优阶梯训练,鸿蒙应用-呼吸训练app部分练习展示(开始)