開發函數計算的正確姿式——運行 Selenium Java

前言

首先介紹下在本文出現的幾個比較重要的概念:html

函數計算(Function Compute): 函數計算是一個事件驅動的服務,經過函數計算,用戶無需管理服務器等運行狀況,只需編寫代碼並上傳。函數計算準備計算資源,並以彈性伸縮的方式運行用戶代碼,而用戶只需根據實際代碼運行所消耗的資源進行付費。函數計算更多信息參考Fun: Fun 是一個用於支持 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日誌服務等資源。它經過一個資源配置文件(template.yml),協助您進行開發、構建、部署操做。Fun 的更多文檔參考前端

備註: 本文介紹的技巧須要 Fun 版本大於等於 2.10.2。java

依賴工具

本項目是在 MacOS 下開發的,涉及到的工具是平臺無關的,對於 Linux 和 Windows 桌面系統應該也一樣適用。在開始本例以前請確保以下工具已經正確的安裝,更新到最新版本,並進行正確的配置。git

Fun 和 Fcli 工具依賴於 docker 來模擬本地環境。github

對於 MacOS 用戶可使用 homebrew 進行安裝:web

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 初始化一下配置。chrome

注意, 若是你已經安裝過了 fun,確保 fun 的版本在 2.10.2 以上。docker

$ 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 extensions
        options.addArguments("--disable-gpu"); // applicable to windows os only
        options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
        options.addArguments("--no-sandbox"); // Bypass OS security model
        options.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-9503582ccb56


RequestId: 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 selenium
  Page title is: 雲端集成開發環境

關於文件尺寸

因爲 chromedriver 和 headless-chromium 壓縮後體積已經很是接近 50MB,留給用戶 Jar 的空間很是少,因此另外製做了一個高壓縮比版本,使用壓縮比更高的 brotli 算法進行壓縮,壓縮後的大小爲 32.7MB。而後在運行時使用 initializer 進行解壓,解壓耗時大約爲 3.7 S。https://github.com/vangie/packed-selenium-java-example

參考閱讀

  1. https://github.com/smithclay/lambdium
  2. https://medium.com/clog/running-selenium-and-headless-chrome-on-aws-lambda-fb350458e4df

加入咱們

團隊介紹

阿里雲函數服務是一個全新的,支持事件驅動編程模式的計算服務。 他幫助用戶聚焦自身業務邏輯,以 Serverless的方式構建應用,快速的實現低成本,可擴展,高可用的系統,而無需考慮服務器等底層基礎設施的管理。 用戶可以快速的建立原型,一樣的架構能隨業務規模平滑伸縮。讓計算變得更高效,更經濟,更彈性,更可靠。不管小型創業公司,仍是大型企業,都受益其中。咱們的團隊正在迅速擴張,求賢若渴。咱們想尋找這樣的隊友: 基本功紮實。既能閱讀論文追蹤業界趨勢,又能快速編碼解決實際問題。 嚴謹的,系統化的思惟能力。既能總體考慮業務機會,系統架構,運維成本等諸多因素,又能掌控設計/開發/測試/發佈的完整流程,預判並控制風險。 好奇心和使命感驅動。樂於探索未知領域,不只是夢想家,也是踐行者。 堅韌、樂觀、自信。能在壓力和困難中看到機會,讓工做充滿樂趣! 若是您對雲計算充滿熱情,想要構建一個有影響力計算平臺和生態體系,請加入咱們,和咱們一塊兒實現夢想!

職位描述

構建新一代 Serverless 計算平臺,包括:

  1. 設計和實現完整可擴展的前端系統,包括身份驗證/權限管理,元數據管理,流量控制,計量計費,日誌監控等等
  2. 設計和實現彈性可靠的後端系統,包括資源調度,負載均衡,容錯處理等等
  3. 豐富易用的 SDK/Tools/CLI/控制檯
  4. 用戶需求驅動,追蹤業界趨勢,利用技術推進業務的成長

職位要求

  1. 算法/數據結構/操做系統等基礎知識紮實,優秀的邏輯思惟能力。
  2. 至少掌握一門編程語言。例如 Java/Go/C/C#/C++。
  3. 有大規模、高可用分佈式系統開發經驗者優先。
  4. 有 Web/Mobile Backends/Microservice 開發經驗者優先。
  5. 良好的溝通能力和團隊合做精神,有必定的組織協調能力。
  6. 本科及以上學歷
  7. 3 年以上工做經驗,經過「阿里巴巴編碼規範」 認證的同窗優先錄取,認證地址:https://edu.aliyun.com/certification/cldt02

簡歷提交

yixian.dw AT alibaba-inc.com

阿里巴巴雲原生技術圈關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的技術圈。」

相關文章
相關標籤/搜索