Fission

Fission 1.4 更新重點聚光燈

你知道 Fission 能夠部署 Tensorflow ML 模型了嗎 ?

ta-ching chen

2 minute read

Introduction

在近兩個月的時間裡,針對來自不同用戶的反饋及問題回報 (包含前陣子的通靈故事 Localhost 迷航記), 我們在 1.4.0 與 1.4.1 做出許多值得一提的改變,讓 Fission 能更加適應跑在不同生產環境上。就讓我們來看看多了什麼改變吧!

Highlight

新的實驗環境: Tensorflow Serving

Tensorflow 作為被廣泛接納的機器學習框架,許多公司會利用它來訓練自家模型。但常會發生:

  1. 工程師懂得寫跟訓練模型,卻沒有相關部署知識
  2. 需要花額外時間撰寫 RESTful API server 來服務請求

因此「如何將機器學習模型快速部署到生產環境上」,一直是許多人心中的痛。

有鑑於此 Tensorflow 官方推出 (Tensorflow) Serving 試圖降低模型產出到部署之間的難度。 只要將模型放到對應資料夾內,Serving 偵測到模型後便會啟動對應 API server 服務,甚至版本異動時亦會將請求流量逐步轉移至新的模型。

然而,實際營運上考慮的因素絕不單單只有「將模型利用 API server 來服務預測請求」這麼簡單。

更多數情況我們會問的是:

如何大規模部署機器學習模型? (How to deploy ML models at scale?)

這個問題就牽涉到「底層架構」與「服務水平伸縮」等等議題。

Localhost 迷航記

當 localhost 不再是 localhost 時

ta-ching chen

2 minute read

Introduction

故事背景稍微介紹一下,使用者反映 Fission基於 Kubernetes 之上的 FaaS (Function-as-a-Service) 框架 在週末突發性的無法正常運作。作為一個興趣使然的工程師,遇到使用者反應問題當然要 (義不容辭) 協助排解。 經過各種遠端通靈一種在不知曉確切運作環境或對於問題毫無頭緒下,仍然嘗試除錯的技術 ,發現問題發生在當要初始化使用者的 function 時出現。

function-pod

Fig. 1 Fission function pod specialization process

整個初始化流程如 Fig. 1,首先 executor 會送出 specialize 請求給 fetcher,讓它取得 function code 後放至 share volume 內。 再由 fetcher 呼叫 env runtime,讓其載入 function code 後服務 HTTP 請求。

"logger":"fetcher"
"msg":"error connecting to function environment pod for specialization request, retrying"
"error":"dial tcp 10.58.152.224:8888: i/o timeout"

從日誌上來看錯誤是 i/o timeout。奇妙的地方在於本來是呼叫 localhost,卻顯示 10.58.152.224 超時 ?!

而用戶反應問題是在公司開始導入 proxy 後發生的,到這邊可能性有兩個:

  1. Proxy 設定出現異常,導致 Pod 內部的本地端 HTTP call 被攔截送往其他地方
  2. DNS 解析出現錯誤

原本想說會不會跟 docker 的 NO_PROXY 設定相關,但該設定主要跟 pull image 相關且測試後也驗證不是這個原因。

事已至此,剩下 DNS 解析出錯的可能性,也只能開始往最瞎的方向開始思考:

是不是在 namespace 底下有個名為 localhost 的服務存在?

Fission x Istio 迸出新滋味

Fission x Istio 整合教學

ta-ching chen

3 minute read

系列文章

前言

Fission 是基於 Kubernetes 之上的 Serverless 框架,而 Istio 是前陣子由 Google、IBM、Lyft 共同推出用來管理、連結微服務的開放平台,透過將兩者整合在一起便能夠提供使用者更多強大的功能。

這陣子花了些時間做實驗跟開發將 Fission 跟 Istio 做初步的整合。雖就目前的狀況來說還有許多地方尚待改進,但相信過陣子就能夠將兩者更好的結合在一起了。

若對 Fission 以及 Istio 整合有興趣的人,下面是完整的安裝教學。

安裝

測試環境

  • Google Kubernetes Engine: 1.9.2-gke.1 cluster
  • Fission: 0.6.0
  • Istio: 0.6.0

建立 Kubernetes v1.9+ alpha cluster

可用的區域 (ZONE) 可看這裡

$ export ZONE=<zone name>
$ gcloud container clusters create istio-demo-1 \
    --machine-type=n1-standard-2 \
    --num-nodes=1 \
    --no-enable-legacy-authorization \
    --zone=$ZONE \
    --cluster-version=1.9.2-gke.1

Fission - Serverless Framework on Kubernetes

介紹 Fission 概念及架構之投影片 for Golang Taiwan

ta-ching chen

1 minute read

Fission 介紹投影片

  • 第一次參與聚會當講者非常緊張(苦笑),若介紹有不清楚或有疑惑歡迎留言或寄信詢問 :)