开发函数计算的正确姿势——运行 Selenium Java

前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档参考。

备注: 本文介绍的技巧需要 Fun 版本大于等于 2.10.2。

依赖工具

本项目是在 MacOS 下开发的,涉及到的工具是平台无关的,对于 Linux 和 Windows 桌面系统应该也同样适用。在开始本例之前请确保如下工具已经正确的安装,更新到最新版本,并进行正确的配置。

  • Docker
  • Fun
  • Fcli

Fun 和 Fcli 工具依赖于 docker 来模拟本地环境。

对于 MacOS 用户可以使用 homebrew 进行安装:

brew cask install docker
brew tap vangie/formula
brew install fun
brew install fcli

Windows 和 Linux 用户安装请参考:

  1. https://github.com/aliyun/fun/blob/master/docs/usage/installation.md
  2. https://github.com/aliyun/fcli/releases

安装好后,记得先执行 fun config 初始化一下配置。

注意, 如果你已经安装过了 fun,确保 fun 的版本在 2.10.2 以上。

$ fun --version
2.10.1

快速开始

初始化

使用 fun init 命令可以快捷地将本模板项目初始化到本地。

fun init vangie/selenium-java-example

安装依赖

$ fun install
...

本地测试

测试代码 ChromeDemo 的内容为:

public class ChromeDemo implements StreamRequestHandler {public void handleRequest(InputStream inputStream,OutputStream outputStream,Context context) throws IOException {System.setProperty("webdriver.chrome.driver", "/code/chromedriver");ChromeOptions options = new ChromeOptions();options.setBinary("/code/headless-chromium");options.addArguments("--disable-extensions"); // disabling extensionsoptions.addArguments("--disable-gpu"); // applicable to windows os onlyoptions.addArguments("--disable-dev-shm-usage"); // overcome limited resource problemsoptions.addArguments("--no-sandbox"); // Bypass OS security modeloptions.addArguments("--headless");WebDriver driver = new ChromeDriver(options);driver.get("https://ide.fc.aliyun.com");outputStream.write(("Page title is: " + driver.getTitle() + "\n").getBytes());driver.quit();}}

本地运行

$ mvn package && fun local invoke selenium
...
FC Invoke Start RequestId: 68c83b4c-b053-479c-9b0e-9503582ccb56
handle user request is com.aliyun.fc.selenium.ChromeDemo::handleRequest
cache is null!
Starting ChromeDriver 2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881) on port 20652
Only local connections are allowed.
Mar 05, 2019 11:34:27 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Page title is: 云端集成开发环境
FC Invoke End RequestId: 68c83b4c-b053-479c-9b0e-9503582ccb56RequestId: 68c83b4c-b053-479c-9b0e-9503582ccb56          Billed Duration: 5265 ms        Memory Size: 1998 MB    Max Memory Used: 240 MB

部署

$ mvn package && fun deploy

执行

$  fcli function invoke -s chrome -f seleniumPage title is: 云端集成开发环境

关于文件尺寸

由于 chromedriver 和 headless-chromium 压缩后体积已经非常接近 50MB,留给用户 Jar 的空间非常少,所以另外制作了一个高压缩比版本,使用压缩比更高的 brotli 算法进行压缩,压缩后的大小为 32.7MB。然后在运行时使用 initializer 进行解压,解压耗时大约为 3.7 S。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云+X案例展 | 民生类:易趋云全面提升三德科技管理效能

本案例由深圳蓝云投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。湖南三德科技股份有限…

redis 公网 安全_redis漏洞复现

一、漏洞简介什么是redisredis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/po…

实时计算的最佳实践:基于表格存储和Blink的大数据实时计算

表格存储: 数据存储和数据消费All in one 表格存储(Table Store)是阿里云自研的NoSQL多模型数据库,提供PB级结构化数据存储、千万TPS以及毫秒级延迟的服务能力。在实时计算场景里,表格存储强大的写入能力和多模型的存储形态&…

关于JDK8采坑JCE加密限制版本问题

文章目录一、解决方案11. 调研2. 常见的异常3. 安全性机制导致的访问https会报错4. 解决方案5. 操作流程6. 移动jar配置策略二、解决方案22.1. 声明2.2. 编辑策略文件2.3. 修改默认属性一、解决方案1 声明:jdk1.8已经经过线上环境使用 1. 调研 JDK8的加密策略存在…

速围观!云+X 案例评选榜单重磅出炉!

2019年11月,CSDN云计算强势开启“云X”案例征集活动,从先进性、拓展性、效益性等三个基本方向出发,深入展现云技术作用行业的突出优势。时隔2个月,通过广泛征集等方式,经过层层筛选,深入挖掘出跨行业、跨生…

uvm 形式验证_UVM基础

uvm_component与uvm_object1.几乎所有的类都派生于uvm_object,包括uvm_component。uvm_component有两大特性是uvm_object所没有的:一是通过在new的时候指定parent参数来形成一种树形的组织结构;二是有phase的自动执行特点。下图是常用的UVM继…

linux根文件系统 /etc/resolv.conf 文件详解

大家好,今天51开源给大家介绍一个在配置文件,那就是/etc/resolv.conf。很多网友对此文件的用处不太了解。其实并不复杂,它是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。该文件…

Table Store: 海量结构化数据实时备份实战

Table Store: 海量结构化数据实时备份实战 数据备份简介 在信息技术与数据管理领域,备份是指将文件系统或数据库系统中的数据加以复制,一旦发生灾难或者错误操作时,得以方便而及时地恢复系统的有效数据和正常运作。在实际备份过程中&#xf…

云+X案例展 | 电商零售类:云徙助力良品铺子「双11」

本案例由云徙投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。助力品牌制胜双十一的背后…

strtus2改成springboot_ssh框架使用springBoot升级迁移替换Struts2

如果一个十来年的ssh项目想使用springboot的便捷性,但又不想从零开始,那么就让我们开始迁移吧。在pom文件添加springboot 依赖创建application 启动类迁移web.xmlweb.xml文件中定义了filter, struts2等等一堆filter, 这时我们需要做的一件事是在springbo…

同样做前端,为何差距越来越大?

阿里妹导读:前端应用越来越复杂,技术框架不断变化,如何成为一位优秀的前端工程师,应对更大的挑战?今天,阿里前端技术专家会影结合实际工作经验,沉淀了五项重要方法,希望能对你的职业…

云+X案例展 | 民生类:必创科技助力打造智慧城市

本案例由必创科技投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。每当夜幕降临&#xf…

刚刚,阿里宣布开源Flutter应用框架Fish Redux!

3月5日,闲鱼宣布在GitHub上开源Fish Redux,Fish Redux是一个基于 Redux 数据管理的组装式 flutter 应用框架, 特别适用于构建中大型的复杂应用,它最显著的特征是 函数式的编程模型、可预测的状态管理、可插拔的组件体系、最佳的性…

谈谈结构体部分成员排序(重载的利用/sort)

涉及知识点: 1.重载运算符的知识 2.sort函数的使用 3.高精度排序 sort函数的用法? 通过面向百度GOOGLE编程的我,得知,sort的用法 sort函数详解(史上最完整QAQ) - AlvinZH - 博客园 对于数组而言&…

qt最大化和还原实现_研究进展 | 水生所关于细菌异化型硝酸盐还原成铵与反硝化脱氮两种途径抉择的分子调控机制研究取得进展...

在无氧和缺氧条件下,许多细菌可利用硝酸根和亚硝酸根作为电子受体进行无氧呼吸,包括异化型硝酸盐还原成铵(dissimilatory nitrate reduction (DNR) to ammonia,DNRA)和反硝化脱氮(denitrification)两种相互竞争的DNR途径,在氮元素…

rabbitmq 集群 ha负载 Consumer raised exception, processing can restart if the connection factory

文章目录1. 背景2. 现象3. 原因分析4. 解决方案5. 成功案例1. 背景 线上有一个rabbitmq 集群,一台磁盘模式的 两台内存模式的. 使用erlang 做cookie 做同步.haproxy做负载 2. 现象 在连接一会后 程序抛出异常 Consumer raised exception, processing can restart if the con…

2019 年,容器技术生态会发生些什么?

1. Kubernetes 项目被采纳度将持续增长 作为“云原生”(Cloud Native)理念落地的核心,Kubernetes 项目已经成为了构建容器化平台体系的默认选择。但是,不同于一个只能生产资源的集群管理工具,Kubernetes 项目最大的价…

中国科学院院士徐宗本:人工智能的基石是数学

来源:科学网 “人工智能的基石是数学,没有数学基础科学的支持,人工智能很难行稳致远。” 近日,由联合国教科文组织和中国工程院联合主办的联合国教科文组织国际工程科技知识中心2019国际高端研讨会上,中国科学院院士、…

编写一个C程序,实现以下功能:输入n个人的身高,然后从n个人中选出身高差值最小的两个人作为礼仪(如果差值相同的话,选取其中最高的两个人),要求输出两个礼仪的身高。

题目要求 编写一个C程序,实现以下功能: 输入n个人的身高,然后从n个人中选出身高差值最小的两个人作为礼仪 (如果差值相同的话,选取其中最高的两个人),要求输出两个礼仪的身高。(使用…

Jenkins操作手册

文章目录一、企业实战(JenkinsGitLabSonarQube)1. Jenkins下载2. Jenkins运行3. .Jenkins登录4. Jenkins安装推荐插件5. Jenkins创建管理员用户6. Jenkins自定义安装插件7. Jenkins 安全设置8. jenkins安装和第一个Java项目构建9. jenkins发布项目到测试环境10. Jenkins通过Dep…