fx 簡單介紹 [Go Hack 2017]

metrue發表於2017-11-12

fx 是我在 Go Hack的一個小作品,Go Hack 是一個以Go語言為主要程式語言的黑客馬拉松比賽。雖然我和我隊友兩人都是寫JavaScript的前端工程師, 以Golang 零基礎參加這次比賽,不過很開心我們完成了fx,也喜歡上 Golang 這門語言.

前言

讀了那麼多年書,寫了那麼久的程式碼,如果說有什麼概念是深入骨髓的,只能說是”函式“了。雖然在數學上和程式設計上,“函式”這個詞有很大的不一樣的,但是有一點上它們是類似:

接受輸入(可能為空值),然後進行處理,最後輸出處理結果。

我們幾乎可以用這個概念來描述所有的行為. 比如我們可以用下面的函式的來描述我們 fx 的誕生過程:

函式 f = Go Hack (以 Golang 為專案程式語言的黑客馬拉松活動)
輸入 input = [兩個Go語言零基礎的JavaScript工程師,兩臺Macbook,很多很多的功能飲料]
fx = f(input)

fx 是什麼

那麼 fx 是什麼呢,一句話來說就是 : fx 是一個可以把一個函式變成一個服務的工具. 一個簡單的例子來說一下 fx 的功能吧. 比如你寫好了很棒的函式 , 它是這樣的:

func.js

module.exports = (input) => {
    return parseInt(input.a, 10) + parseInt(input.b, 10)
}

它的作用就是計算兩個數的和. 你把這個函式寫在 func.js 這個檔案裡面。 這時候你希望可以將這個函式程式設計一個服務,對外提供一個 url 可以供外界訪問. 但是想到 nginx, web server, api gateway…, 你頭有點大了。 現在你可以簡單的這樣做。

fx up func.js

如果一切沒有什麼問題,你可以得到一個url.

$fx list
Function ID Service URL
743a9b0ee5  0.0.0.0:61098

訪問你的服務試試看

$ curl -X POST 0.0.0.0:61098 -H "Content-Type: application/json" -d '{"a": 1, "b": 1}'

你會得到 2. 這說明你的函式已經變成了一個服務了。

fx 如何工作

                upload function definition
fx client   -------------------------------> fx server
            <-------------------------------
                url of deployed service

fx 有兩個部分組成,fx server 和 fx client . client 很簡單,主要就是把 function 的定義內容通過 Websocket 發給 server 而已,而 server 是一個 Websocket sever,接受到 function 的內容了之後,匹配到正確的 Dockerfile 和對應的構建映象所需的資源, 然後會呼叫 Docker Engine 的 api 去構建相應的服務,最後把生成的服務的 URL 返回給客戶端.

fx 支援哪些程式語言

由於 fx 的一個服務的背後都是一個 Docker Container, 所以 fx 幾乎可以支援所有的程式語言,由於精力有限,目前 fx 支援這些程式語言:

  • Golang
  • JavaScript/Node
  • Ruby
  • Python

Code

https://github.com/metrue/fx

相關文章