經驗分享:我們如何使用AWS構建無伺服器架構 - hypertrack
我們的客戶使用HyperTrack無需伺服器即可訪問實時位置。他們將我們用作實時位置的託管服務。他們不需要構建和管理伺服器來攝取,處理,儲存,提供和管理與其應用使用者的實時位置相關的任何內容。
而我們自己則是使用AWS為我們的平臺提供無伺服器架構。用於從我們的SDK中提取資料流,準確處理它們,使位置可用於實時定位功能,以及在我們的資料湖中儲存資料以進行分析和機器學習; 我們透過無伺服器架構利用Amazon Web Services。
在這篇部落格中,我們將向您介紹並分享我們的經驗。
動機
HyperTrack是一個自助式平臺,用於雲中的實時定位。來自世界各地的數萬名開發人員都在該平臺上。開發人員在他們的應用中新增我們的SDK以開始跟蹤。首先,他們使用此資料在測試環境中構建功能。測試結束後,該應用程式將推廣給他們的使用者。HyperTrack客戶按使用付費,保持完全控制其使用量上升或下降,並期望它正常工作。
反過來,我們需要構建一個可以自動擴充套件和縮小的系統,而無需任何工程干預。我們無法預測,手動配置或取消配置服務,也無法深入瞭解客戶在22個時區的推廣週期。此外,這些服務需要具有低延遲響應,實時處理,高可用性平臺和可靠的基礎架構。
無伺服器贏得勝利!我們使用的AWS元件旨在自動擴充套件,無需任何操作或管理工作。
定位服務詳解
看看這個平臺是怎麼執行的:讓我們看一下身份驗證,攝取和處理部分:
1.客戶應用程式中的HyperTrack SDK透過HTTP post請求向HyperTrack提取管道傳送位置和相關上下文(活動,許可權,電池等)。
2. API閘道器端點接收位置事件,檢查授權標頭並將資料記錄放在我們的主Kinesis流上
3. Kinesis可靠地快取資料,將我們的端點與處理資源分離,並使其可用於實時處理
4. Kinesis,DynamoDB流或其他lambda 呼叫各種形狀和大小的Lambda函式來處理精確位置,過濾噪聲並轉換上游介面和應用程式的資料
5. DynamoDB僅儲存實時位置,將有用位置存檔到S3以供將來使用,並丟棄其餘部分
現在,讓我們回顧一下如何利用儲存和存檔的資料將其公開給我們的開發人員:
6.位置,上下文和裝置資料轉換為JSON格式,並透過公共REST API公開。使用基本訪問身份驗證控制對這些端點的訪問
7. AWS SNS驗證訂閱並處理Webhook排程
8. AppSync為各種Web和本機前端應用程式提供GraphQL端點,以便透過查詢和訂閱進行使用。
效果
我們對該平臺進行了壓力測試,然後自豪地向全世界宣佈。一切都好。
與不同時區的客戶一起抱怨抱怨API延遲和降低效能已經成為過去。成本控制良好,按使用付費的價格非常適合我們。在無伺服器平臺上託管的新版本的前幾個峰值得到了優雅的處理,並沒有在口袋中燒掉一個洞。所需的行政和監督也是最低限度的。
然後一個晴朗的早晨,API流量突然達到頂峰....
好訊息是:API延遲、正常執行時間和實時效能都很正常。無伺服器架構已經自動擴充套件,以處理比前一天高2-3個數量級的流量。但是,您不希望CFO看到這一點。
在最初幾天內,數百萬臺裝置註冊了HyperTrack伺服器。由於整合導致了錯誤:裝置註冊發生在應用程式啟動時,而不是在啟動跟蹤的時候。我們的平臺與位置時間序列類似地處理這些事件,並轟炸了我們的實時資料管道,雖然無意中,但它對我們的無伺服器架構進行了令人敬畏的壓力測試。
基礎架構即程式碼和持續整合與部署
無伺服器模式的好處是驚人的,我們發現自己很快就在我們的平臺上使用它。現在我們執行數百個Lambda函式,在幾乎同樣多的DynamoDB表中儲存資料,並利用其他幾十個亞馬遜服務來使我們的平臺在我們的環境中工作。
管理大量資源並將它們相互連線起來的複雜性只能透過強大的自動化來管理。將所有基礎架構定義為程式碼對於實現自動化至關重要。幸運的是,我們都非常信任自動化,並從一開始就使用IaC構建HyperTrack。
我們從Terraform開始使用配置檔案定義所有資源。選擇Terraform是因為開源性質和強大的社群支援。它幫助我們之前的一些人在其他專案中使用它。Terraform非常適合定義共享和靜態基礎架構。另一方面,必須單獨定義每個資源太冗長(參見HashiCorp教程)並妨礙快速迭代產品功能。透過這種學習,我們轉向無伺服器框架,用於非共享基礎架構部件。
Serverless是另一種開源工具,具有很強的採用率,專注於簡單的開發人員體驗。採用該框架減少了自定義自動化指令碼和樣板程式碼的數量。平臺工程師能夠更快地移動並更輕鬆地維護程式碼庫。
無伺服器服務通常需要了解Terraform部署的共享資源。為了支援這一點,我們將資源從Terraform寫入AWS Systems Manager(SSM)並從Serverless讀取SSM。與Serverless中此部落格中描述的模式類似。
對於Terraform基礎架構,開發人員正在執行Jenkins作業來部署更改。在應用基礎架構變更之前,我們執行“terraform計劃”以瞭解在不進行任何實際更改的情況下新增和刪除哪些資源。此過程可降低共享和關鍵基礎架構被破壞或受到其他影響的風險,但需要額外的工程監督。
對於所有其他服務,我們使用CircleCI持續構建,測試和部署。這是另一種無需伺服器即可實現CI / CD實現全自動化而無需維護自己的基礎架構的方法。此外,我們已經看到了允許平臺工程師更快地迭代的巨大成功。
相關文章
- 為什麼我們要使用無伺服器架構伺服器架構
- 我的架構經驗系列文章-前端架構架構前端
- 使用Azure Functions和AWS Lambda處理資料的無伺服器架構Function伺服器架構
- AWS助理架構師認證考經架構
- [譯] 使用 Go 和 AWS Lambda 構建無服務 APIGoAPI
- 虛擬桌面架構師七條經驗分享架構
- 華夏航空全面採用AWS構建雲基礎架構架構
- AWS 高可用AWS架構方案架構
- 【經驗分享】win10 cmake 構建 Tengine 工程Win10
- 在AWS無伺服器架構上實施應用程式介面伺服器架構
- AWS 使用經驗
- 如何構建微服務架構微服務架構
- HBase 與 Cassandra 架構對比分析的經驗分享架構
- MySQL 企業常用架構與調優經驗分享MySql架構
- 我們是如何使用 Electron 構建 Linux 桌面應用程式的Linux
- 如何在AWS上構建Apache DolphinSchedulerApache
- UNIX 安全構架經驗(轉)
- 單體架構、微服務和無伺服器架構架構微服務伺服器
- 實戰經驗分享:使用 PyO3 來構建你的 Python 模組Python
- 我們如何在Adyen做出架構決策 - Adyen架構
- 波音公司架構師分享MDM專案成功經驗FJ架構
- TypeScript 重構 Axios 經驗分享TypeScriptiOS
- 無伺服器架構 - CodeCraft伺服器架構Raft
- 大大提高我們的構建體驗5個 Vue 技巧Vue
- 【知識分享】 伺服器的架構伺服器架構
- 學習如何用 VIPER 構建iOS架構iOS架構
- 使用Kafka Streams構建事件源系統的經驗Kafka事件
- 使用OpenStack構建Packet平臺的經驗總結
- AWS架構圖繪製軟體免費下載,怎麼畫AWS架構圖架構
- Judo:使用無程式碼構建原生應用體驗
- 讓我們構建一個Swift.ArraySwift
- AWS副總裁Peter:解密基礎架構底層運維和構建之道解密架構運維
- 如何使用Linux構建高效FTP伺服器LinuxFTP伺服器
- Serverless無伺服器架構詳解Server伺服器架構
- 我理解的阿里無線前端“架構”阿里前端架構
- 如何構建零信任的雲資料架構架構
- AWS助理架構師樣題解析架構
- 從0到1搞懂分散式架構:Uber大型支付系統構建經驗總結分散式架構