本文介紹了 AppSync,并列出了使用無服務器 GraphQL 開發實時儀表板的主要構建塊。
在這個快節奏的世界中,應用程序需要實時傳播信息。一些示例是跟蹤貨物移動、跟蹤股票價格、分析正在進行的足球比賽的數據等。此外,人們使用各種設備(如臺式機、移動設備和標簽)來訪問這些應用程序。此外,一些應用程序需要此信息和警報是可操作的,即用戶可以更新一個或多個屬性。例如,貨物處理設施可以通過執行到達掃描來更新貨物的狀態。因此,從本質上講,我們正在尋找可以從多個設備訪問的交互式實時儀表板。在本文中,我將討論如何使用 AWS AppSync 構建這種控制面板。我將采用一個常見的用例并為該用例創建一個參考解決方案架構。
為不熟悉這項服務的人快速介紹 AWS AppSync。AppSync 是一種無服務器的 GraphQL 接口,具有強大的可擴展性。GraphQL 是一種數據語言,旨在使應用程序能夠從服務器獲取數據。它具有聲明式、自文檔化的風格。在 GraphQL 操作中,客戶端指定在服務器返回數據時如何構建數據。這使得客戶端可以只查詢它需要的數據,以它需要的格式。
用例
讓我們以互聯網服務提供商為例。他們在廣闊的地理區域開展業務。他們需要一個實時儀表板來顯示所有活動的服務請求。一個區域的管理員可以查看整個區域。他們應該能夠根據他們的位置向服務工程師分配開放工單。服務工程師將從他們的移動設備訪問儀表板,并且應該能夠將工單的狀態更新為“進行中”、“完成” 等管理員應該能夠實時查看狀態更新。需要考慮的另一種情況是,現場工程師的互聯網連接通常很差/沒有。他們應該能夠更新工單的狀態,即使他們處于離線狀態,一旦他們連接上,數據應該自動同步回服務器。
解決方案
該解決方案的主要組件是 AppSync API。AppSync 可以連接到多個源,也可以有自定義解析器。但是,在此示例中,API 使用 DynamoDB 作為其數據存儲。AppSync API 支持三種操作——變更、訂閱和查詢。突變用于插入/更新記錄。訂閱以某種方式補充了變異操作,即只要有變異,訂閱 API 的該應用程序的所有用戶都會收到更新。這里值得一提的是,在 DynamoDB 數據庫中進行簡單的插入或更新不會向訂閱者發送回任何通知。只有通過 AppSync API 的變更才會流向訂閱者。另一方面,Query 是 API 上的簡單 GraphQL 查詢。
現在,讓我們假設有一個系統可以提出服務請求,將請求放到 EventBridge 上。一旦 EventBridge 上有消息,就會觸發Lambda 函數,該函數使用突變操作將消息推送到 AppSync API。AppSync 接收消息并將其保存在后備 DynamoDB 數據存儲中。此時工單狀態為open。
可以使用任何標準 JAVAScript 框架構建此應用程序的 UI。這將托管在 AWS S3 上并使用 CloudFront 分發進行分發。此應用程序的登錄用戶將根據某些參數訂閱 AppSync API。例如,庫克縣的管理員可能會使用以下標準進行訂閱
county: "Cook", status: "Open"
列出縣內所有未開票。然后,管理員可以將未結工單分配給現場工程師。這將導致對 AppSync API 進行另一次變更操作,并且票證的狀態將更改為“已分配”。
現場工程師登錄到應用程序并訂閱了條件
assignedTo: "<login-id>", status: "Assigned"
將能夠看到他需要處理的工單列表。一旦他完成了工單的處理,他就會將工單的狀態更改為“完成”。這將導致另一個更新記錄的突變。每個感興趣并訂閱接收此票證更新的人都將在票證完成后立即收到有效的更新。在這里值得一提的是,AppSync 也可以在離線模式下工作。因此,如果現場工程師由于某種原因離線,他的更新將在客戶端排隊。每當他重新上線時,所有未決的突變都將通過后端。這是基于 AppSync API 上的變更和訂閱的交互式儀表板的工作方式。
接下來,我將稍微討論一下身份驗證和授權。在這種情況下,最好的做法是使用公司的 Active Directory,假設存在一個來處理身份驗證。Cognito 可以設置為與企業 AD 聯合。AppSync 與 Cognito 本地連接。在這種情況下,每當用戶登錄到應用程序時,應用程序將使用相應的用戶 ID 訂閱 AppSync API,并將根據位置、角色、狀態等自動過濾結果。其他授權方法,如自定義 Lambda 授權方、OpenId也可以使用連接、API 密鑰等。
保護 AppSync API 的另一種方法是在 API 之上配置 Web 應用程序框架 (WAF),以保護它免受常見的 Web 攻擊,如跨站點腳本和SQL 注入。WAF 與 AppSync API 原生集成。強烈建議使用所有面向公眾的 AppSync API 配置 WAF。
結論
AWS AppSync 是一種多功能服務,可用于設計不同類型的應用程序。我已經討論了我們可以多么輕松地設置交互式實時儀表板。AppSync 還可用于在客戶端和服務器之間創建網絡套接字握手,以設計實時聊天應用程序。它還可以簡單地用作后端服務 API 或聚合來自 SQL、NoSQL、微服務等多個來源的數據。AWS AppSync 可能很快成為許多數字產品和應用程序不可或缺的一部分。