六塊 ESP32-S3 砌成迷你高可用 server:負載平衡同故障切換點玩
3C 產品

六塊 ESP32-S3 砌成迷你高可用 server:負載平衡同故障切換點玩

圖片:via XDA Developers — https://www.xda-developers.com/you-too-can-make-this-web-server-that-runs-off-six-esp32s-working-together/
TechLab 編輯部(譯)·

四塊板真正接客,另外兩塊負責監察,連 OTA rollback 都包埋

六塊板,其實得四塊接客

XDA 呢單新聞個講法幾搶眼,不過「六塊 ESP32 一齊做 server」只講中一半。原作者 Kyril Novotarskyi 用咗四塊有 Ethernet 嘅 ESP32-S3 做 serving blades,真正接收網站流量;另外兩塊駁住顯示屏,負責睇心跳、流量同重啟紀錄。成套嘢最值得拆解嘅地方係,佢將平時藏喺雲端平台入面嘅高可用機制,縮細到一排放得上枱面嘅開發板。

LILYGO T-ETH-Lite ESP32-S3 開發板連 Ethernet 接口

圖片:LILYGO

負載平衡器會由節點自己選出嚟

四塊主力板用 LILYGO T-ETH-Lite ESP32-S3,官方資料列出雙核心 240MHz、16MB flash、8MB PSRAM,同埋 W5500 Ethernet controller。每塊板都識做網站 server 同 Layer 4 TCP splicer,節點再經加密 ESP-NOW 心跳互相報到。系統會揀編號最低、網絡正常又真係交到內容嗰塊做 leader,唔使長期指定一塊硬件做負載平衡器。

Leader 接管一組共用 vMAC 同 LAN IP,router 只會將去 80、443 port 嘅流量指去呢個身份。新連線入到嚟,leader 會轉交畀當刻連線最少嘅 blade,TLS 就由後面嗰塊板處理。Leader 一斷電,下一塊板會寫入同一個 vMAC,再用 gratuitous ARP 通知 switch 更新轉送位置;上游 router 見到嘅 IP 同 MAC 冇變,所以唔使重新學一套地址。作者話拔走任何單一節點,包括 leader,網站都可喺四秒內恢復,但呢個係佢自己部機量到,未有獨立測試。

有心跳都可以係「假健康」

呢個項目幾有料嘅位,係作者撞過節點仍然發心跳、TCP stack 卻已經卡死嘅情況。於是每塊 blade 而家每七秒會連一次自己嘅公開入口,連續兩次失敗就退出選舉,六次失敗會主動 crash 再重啟;負載平衡器亦會按實際有冇資料回傳,獨立判斷後端可唔可以接客。呢套雙重檢查示範咗一件好實際嘅事:process 仲行緊、網線仲着燈,唔代表服務真係用得。

OTA 更新出事,識得退返上一版

更新 firmware 同樣有故障保護。部署會先逐塊更新 follower,最後先郁 leader;新版本要喺五分鐘內通過連續服務 90 秒嘅測試,過唔到 bootloader 就會退返舊版本。呢個做法用到 ESP-IDF 本身嘅 OTA rollback 機制:新 image 首次啟動會處於等候驗證狀態,app 確認正常先正式保留,否則下次啟動會揀返上一個可用 partition。對要長期擺喺角落運作嘅 IoT 裝置,呢部分其實實用過個迷你網站本身。

效能數字要識得睇

按作者喺自己硬件量到嘅結果,一次新 P-256 TLS handshake 約花 650ms,系統大約去到每秒 2.9 至 3 個新訪客就開始接近上限;沿用已建立連線時,回應約 40 至 60ms,整個 fleet 約做到每秒 40 至 50 個 request,去到 100 RPS 以上,樽頸就會落喺單一 splicer 嘅網絡路徑。連屏幕同風扇計,作者報稱整架約食 22W。全部都係單一作者測試,網站內容亦係預先壓縮、直接放喺 flash 嘅靜態頁,唔應套落一般 web app。

要拎呢套架構取代雲端主機,完全唔實際。Switch、router、USB charger、家居寬頻同公網 IP 仍然各自可以拖冧成套機,容量、憑證管理同對外安全更新亦麻煩得多。不過用嚟學負載平衡、leader election、健康檢查同安全部署就幾正,因為每次拔線、更新失敗或者節點卡死,結果都可以直接喺燈同屏幕睇到。

想跟住砌,開源指南已經有齊

項目以 MIT License 放上 GitHub,firmware、測試工具、接線文件、OpenSCAD 機箱同完整 build guide 都有。最基本要兩塊或以上 T-ETH-Lite、Ethernet switch、USB-C 供電、可做 port forwarding 嘅 router、固定公網 IP、domain 同 ESP-IDF 6.0.2;屏幕、LED 燈條、風扇同 10 吋 rack 全部可以唔裝。學生、ESP32 玩家或者想補分散式系統基本功嘅 developer,跟呢份指南砌一個細規模版本,價值會高過單純將網站搬去平價開發板。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook