1. 程式人生 > 其它 >亞馬遜雲科技平臺上的無伺服器 WebSocket

亞馬遜雲科技平臺上的無伺服器 WebSocket

宣告:本文轉自 DEV Community 網站,文章翻譯由開發者社群提供;

點選下方連結,檢視英文原文:

 

服務之間或人員之間的實時通訊都很難實現。

好在,身處當今的雲端計算時代,我們可以通過多種選擇來實現可靠的,基於 WebSocket 的通訊。

本文將介紹亞馬遜雲科技環境中的 WebSocket。具體有哪些選擇?各有什麼利弊?分別要部署哪種架構?

一起看看吧。

Amazon API Gateway WebSocket

2018 年 12 月,亞馬遜雲科技釋出了 Amazon API Gateway 的一個新功能:對 WebSocket 的支援。

我還記得當時自己對此感到很興奮。由於我在學習一門新的程式語言時往往會選擇開發一種聊天應用程式(因為我覺得待辦事項清單那類應用程式有些無聊),因此我當時立即就開始閱讀服務文件開始瞭解這項功能了。

閱讀文件後,我的熱情很快消退。

  • 對廣播行為的支援很不理想。據我所知,無法通過單一 API 呼叫以原生方式將訊息傳送給多個連線。需要廣播功能的情況下,缺乏對Topic或Room的原生支援使 Amazon API Gateway WebSocket 成為不太適合的選擇。

  • 需要以某種方式跟蹤每個連線的狀態。在我看來,通常開發者會傾向於使用 Amazon DynamoDB 實現這一點。如果你需要的是一種完全託管的解決方案,那麼肯定會對該功能感到失望。

不過該功能也並非沒什麼好處。

  • 由於你可能已經在使用 Amazon API Gateway,將 WebSocket 加入你的架構,整個過程的複雜性可大幅降低。

  • 藉助 Amazon API Gateway 的直接整合功能,我們可以建立精細有彈性的 WebSocket 後端,完全無需使用 Lambda 函式。

我自己就接受了這樣的挑戰。結果可以看這裡

  • 該功能的活動部件數量相對較少,在我看來,非常易於上手並且學習過程很簡單。

架構

我認為 Amazon API Gateway WebSocket 是池化的絕佳替代品。取決於服務的流量大小,維護 WebSocket 連線可能比定期向 API 發出請求更便宜。

這裡有一個關於該話題的精彩資源

Amazon AppSync GraphQL 訂閱

Amazon AppSync是一種用於建立託管 GraphQL API 的服務。隨著 GraphQL 逐漸進入主流,該服務開始快速普及。

實時功能可通過 GraphQL 訂閱提供。解釋 GraphQL 訂閱到底是什麼,這已經超出了本文的範圍,如果你對該技術還不太熟悉,建議自己做做功課。

  • 依本人拙見,你在實施過程中可能會遇到很多問題這裡有一篇關於該話題的精彩文章

  • 前端方面,你可能在將 Amazon AppSync JavaScript 客戶端與自己的某個 GraphQL 客戶端庫進行整合時遇到問題。截止撰寫本文時,GitHub 上已經出現大量相關問題,這些問題都與我最喜歡的 GraphQL 客戶端:apollo-client進行的整合有關。

  • 這一點可能比較明顯,但我依然有必要提出。據我所知,該功能僅在 GraphQL 上下文中可用。如果能有非 GraphQL 版本的 Amazon AppSync 訂閱那就太好了。但也許這樣的服務已經存在?繼續讀下去吧!

  • 天吶!我們可以用 Amazon AppSync 完成很多工作。如果一切正常,該服務可以為你節約大量時間。依本人拙見,所需的基礎知識都很容易掌握,如果你已經熟悉 GraphQL,那麼很容易就能掌握 AppSync 訂閱的運作。

  • Amazon AppSync 訂閱擴充套件性很好根據亞馬遜雲科技的介紹擴充套件至數百萬個連線通常都應該不會有問題。從個人經驗來說,我能夠毫無問題地將服務推送給大約 50 萬個連線。

架構

Amazon AppSync 提供了豐富的選擇。該服務非常適合絕大部分(甚至全部)需要 GraphQL 訂閱的場景。我建議你能熟悉服務頁面上列出的各種 Amazon AppSync 用例

Amazon IoT Core MQTT

當我第一次聽說 Amazon IoT 服務套件時,最後我想到的是能為 WebSocket 提供豐富且可擴充套件的支援。進一步瞭解後,我驚喜地發現該服務甚至提供了完全託管的 MQTT 主題。 

  • 為了全面理解 WebSocket 功能,首先需要熟悉很多服務中的移動部件。裝置影子是什麼?是否需要某種型別的證書來進行身份驗證?資料端點是什麼?我在試圖搞清該服務的運作前就問過自己這些問題。

  • 也許因為我生活在自己的“社群泡泡”裡吧,但我幾乎沒看到多少有關使用 Amazon IoT Core 中 WebSocket 功能的教程。你也許會發現自己遇到的問題很難找到答案。這是我在學習該服務時參考的部落格文章

  • 通過 Amazon IoT Core MQTT 實現的 WebSocket 是獨立於 API 架構的。你是否使用了自己的 GraphQL 伺服器?或者更願意使用 REST API?無論怎樣都可以與 IoT Core MQTT 整合。記得我曾在上文中提過想要用非 GraphQL 版本的服務來處理 WebSocket 嗎,我所指的就是這個服務。

架構

與物聯網相關的所有事情都不是我的專業領域。不過這並沒有阻止我探索的腳步。

我相信 Amazon IoT Core MQTT 可以用於實時的前端功能切換。在 Amazon Amplify 外掛的幫助下,將前端與服務相整合的過程應該很簡單。這裡介紹了我使用 Amazon IoT Core 構建實時前端功能切換的過程

總結

在亞馬遜雲科技平臺上無伺服器的WebSocket方面,開發者有很多選擇:從GraphQL相關的服務到Amazon IoT Core MQTT主題令人眼前一亮的用法,非常豐富。

希望本文可以讓你有所收穫。我計劃進一步介紹每項服務的基本資訊,同時也鼓勵大家自行探索。

如果你有任何問題,歡迎通過Twitter給我發私信:@wm_matuszewski

感謝你的閱讀。

 

文章作者:Wojciech Matuszewski

Wojciech Matuszewski for AWS Community Builders