前言
首先介紹下在本文出現的幾個比較重要的概念:
函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,使用者無需管理伺服器等運作情況,隻需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運作使用者代碼,而使用者隻需根據實際代碼運作所消耗的資源進行付費。函數計算更多資訊 參考。
Fun: Fun 是一個用于支援 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日志服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、建構、部署操作。Fun 的更多文檔
備注: 本文介紹的技巧需要 Fun 版本大于等于 2.10.2。
依賴工具
本項目是在 MacOS 下開發的,涉及到的工具是平台無關的,對于 Linux 和 Windows 桌面系統應該也同樣适用。在開始本例之前請確定如下工具已經正确的安裝,更新到最新版本,并進行正确的配置。
Fun 和 Fcli 工具依賴于 docker 來模拟本地環境。
對于 MacOS 使用者可以使用
homebrew進行安裝:
brew cask install docker
brew tap vangie/formula
brew install fun
brew install fcli
Windows 和 Linux 使用者安裝請參考:
- https://github.com/aliyun/fun/blob/master/docs/usage/installation.md
- 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 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參考閱讀
- https://github.com/smithclay/lambdium
- https://medium.com/clog/running-selenium-and-headless-chrome-on-aws-lambda-fb350458e4df
加入我們
團隊介紹
阿裡雲函數服務是一個全新的,支援事件驅動程式設計模式的計算服務。 他幫助使用者聚焦自身業務邏輯,以 Serverless的方式建構應用,快速的實作低成本,可擴充,高可用的系統,而無需考慮伺服器等底層基礎設施的管理。 使用者能夠快速的建立原型,同樣的架構能随業務規模平滑伸縮。讓計算變得更高效,更經濟,更彈性,更可靠。無論小型創業公司,還是大型企業,都受益其中。我們的團隊正在迅速擴張,求賢若渴。我們想尋找這樣的隊友:
基本功紮實。既能閱讀論文追蹤業界趨勢,又能快速編碼解決實際問題。
嚴謹的,系統化的思維能力。既能整體考慮業務機會,系統架構,運維成本等諸多因素,又能掌控設計/開發/測試/釋出的完整流程,預判并控制風險。
好奇心和使命感驅動。樂于探索未知領域,不僅是夢想家,也是踐行者。
堅韌、樂觀、自信。能在壓力和困難中看到機會,讓工作充滿樂趣!
如果您對雲計算充滿熱情,想要建構一個有影響力計算平台和生态體系,請加入我們,和我們一起實作夢想!
職位描述
建構新一代 Serverless 計算平台,包括:
- 設計和實作完整可擴充的前端系統,包括身份驗證/權限管理,中繼資料管理,流量控制,計量計費,日志監控等等
- 設計和實作彈性可靠的後端系統,包括資源排程,負載均衡,容錯處理等等
- 豐富易用的 SDK/Tools/CLI/控制台
- 使用者需求驅動,追蹤業界趨勢,利用技術推動業務的成長
職位要求
- 算法/資料結構/作業系統等基礎知識紮實,優秀的邏輯思維能力。
- 至少掌握一門程式設計語言。例如 Java/Go/C/C#/C++。
- 有大規模、高可用分布式系統開發經驗者優先。
- 有 Web/Mobile Backends/Microservice 開發經驗者優先。
- 良好的溝通能力和團隊合作精神,有一定的組織協調能力。
- 大學及以上學曆
- 3 年以上工作經驗,通過“阿裡巴巴編碼規範” 認證的同學優先錄取,認證位址: https://edu.aliyun.com/certification/cldt02
履歷送出
yixian.dw AT alibaba-inc.com
“ 阿裡巴巴雲原生技術圈 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”