歡迎光臨
每天分享高質量文章

“即服務”理念再延伸——以微服務形式實現映象處理

本文針對分散式系統中的映象處理的痛點,提出了兩個潛在的可能的解決方案,一為Google Function與Serverless,二為Imageup微服務,相對而言,可能第二種解決方案更加適合目前的場景。


分散式的思想狀態

當建立分散式系統時,映象處理開始變得不那麼簡單。在最初的系統伸縮中,它可能成為應用程式中真正的痛點,為什麼?
  • 將多個正在執行的節點掛載到同一個永久性儲存中是不可能的——這是很好的理由,如果它不適用於某些供應商/商店,則在寫入期間您將不得不擔心資料損壞。

  • 儲存和為磁碟上的(百萬、十億、萬億量級的)映象提供服務和自治服務並不那麼好玩,並且容易出錯。 您也可能無法像Google一樣快速提供服務。

  • 映象處理(調整大小、裁剪和自動定向)是資源密集型的。 在分散式系統中,您希望節點具有最大的吞吐量。


潛在的解決方案1:Google Function與Serverless

Kubernetes叢集與資料庫服務和Google Function的介面
我想討論這個解決方案,因為映象處理是Serverless的常見用例。 Google Function(AWS Lambda也可以考慮,但我們專註於Google這裡——同樣的想法)是在某些情況下處理此問題的好方法。
總體思路如下:
  1. 建立一個端點以接收完整的映象併傳送至商店。

  2. 一旦上傳到了bucket,建立一個後臺函式[1]來處理映象。

  3. 相應地更新持久化儲存併傳送表示處理完成的其它任何冒煙訊號。

這很好,因為這是核心應用程式的重任,並且具有很大的擴充套件性。但是,有一些缺點——這可能不會影響你:
  • 應用程式必須處理上傳檔案到儲存bucket,這需要您與Google的GCP庫和授權機制對接。當你處理很多上傳時,這可能是一個瓶頸。或者,您可以建立一個新的公共Lambda端點來接受映象,但是您還必須處理應用程式級別的身份驗證(如果需要的話)。

  • 如果您想知道處理過的映象何時準備就緒,您必須建立端點以使用流程中的各種更新訊息。

正如你所看到的,由於所有的移動元件,這可能會變得複雜,特別是如果你的應用程式需要任何級別的使用者身份驗證。這對我們來說並不理想。


潛在的解決方案2:Imageup微服務

Imageup[2]是一個可複製的[3]基於http的微服務,可以在您的網路中秘密執行。 它是用Go編寫的,並且使用了非常快速的Imaging庫。 這允許以同步方式傳送、處理和檢索映象的遠端唯一URL。

Kubernetes叢集中的Imageup
一般的想法是:
  1. 建立一個端點來處理必要的認證和要上傳的檔案。

  2. 將檔案與大小同步地流式傳輸到imageup並接收相應的遠端映象陣列以準備服務。

request ->payload

metadata: 
name: imageup-service
annotations:
cloud.google.com/load-balancer-type: "Internal"
從這裡開始,您將能夠與應用程式中的Imageup進行互動。 對於我們來說,它來自於使用下麵連結的介面模組的node.js應用程式。 有關更多資訊,請檢視下麵的imageup API[4]以及相關資源。
  • Docker倉庫,https://hub.docker.com/r/levinteractive/imageup/

  • Kubernetes實現樣例,https://github.com/LevInteractive/imageup/tree/master/examples/k8s

  • Imageup的Github倉庫,https://github.com/LevInteractive/imageup

  • Imageup的node.js介面,https://github.com/LevInteractive/imageup/blob/master/examples/node/imageup.js

相關連結:
  1. https://cloud.google.com/functions/docs/writing/background

  2. https://github.com/LevInteractive/imageup

  3. https://github.com/LevInteractive/imageup/blob/master/examples/k8s/imageup-deployment.yml#L6

  4. https://github.com/LevInteractive/imageup/blob/master/docs/api.md

原文連結:https://blog.stackahoy.io/image-processing-go-microservice-df423d1b8ddd

Kubernetes快速入門實戰培訓

本次培訓內容包括:容器介紹、容器網路、Kubernetes架構基礎介紹、安裝、設計理念、架構詳解、設計原則、常用物件、監控方案、Kubernetes高階設計和實現、微服務、實踐案例分享等,點選瞭解具體培訓內容
5月18日正式上課,點選閱讀原文連結即可報名。
贊(0)

分享創造快樂