fx 簡單介紹 [Go Hack 2017]
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
相關文章
- 簡單介紹Go 語言單例模式Go單例模式
- 簡單介紹Go語言常用的打log方式Go
- 簡單介紹Go 字串比較的實現示例Go字串
- SVG簡單介紹SVG
- HTML簡單介紹HTML
- ActiveMQ簡單介紹MQ
- HTML 簡單介紹HTML
- JavaScript 簡單介紹JavaScript
- CSS 簡單介紹CSS
- SCSS 簡單介紹CSS
- UICollectionView 簡單介紹UIView
- css簡單介紹CSS
- RPC簡單介紹RPC
- Webpack 的簡單介紹Web
- spark簡單介紹(一)Spark
- Flutter key簡單介紹Flutter
- Python簡單介紹Python
- <svg>元素簡單介紹SVG
- Git_簡單介紹Git
- JSON簡單介紹JSON
- 簡單介紹克隆 JavaScriptJavaScript
- 簡單介紹 ldd 命令
- javascript物件簡單介紹JavaScript物件
- CSS OOCSS簡單介紹CSS
- CSS SMACSS簡單介紹CSSMac
- CSS BEM簡單介紹CSS
- javascript this指向簡單介紹JavaScript
- javascript加密簡單介紹JavaScript加密
- nodejs簡單介紹NodeJS
- Promise的簡單介紹Promise
- CFRunloopObserverRef 的簡單介紹OOPServer
- SQL JOIN 簡單介紹SQL
- oracle lob 簡單介紹Oracle
- Oracle鎖簡單介紹Oracle
- ORACLE 鎖簡單介紹Oracle
- Go 單元測試基本介紹Go
- 簡單易懂的 Go 泛型使用和實現原理介紹Go泛型
- 簡單介紹Go 語言常見的一些坑Go