2 回答

TA貢獻1801條經驗 獲得超16個贊
上傳文件的用戶可以容忍錯誤,然后重試。但是當上傳的文件只存在于它上傳到的機器上時存在危險,并且在上傳到云存儲之前出現問題。在這種情況下,文件將丟失,這對用戶來說將是一個無賴。
這是通過良好的架構解決的。這是一個先進先出的隊列模式。
這種模式的一個最受歡迎的 Go 實現是go-workers,它可能由Redis數據庫支持。
假設在任何給定時間有n個服務器運行您的服務。假設您的后端代碼編譯了兩個單獨的二進制文件,一個服務器二進制文件和一個工作二進制文件。
理想情況下,接受文件上傳的機器都會掛載一個共享的網絡文件系統,這樣:
用戶上傳文件到服務器
一種。服務器將一條記錄添加到工作隊列中,該記錄包含來自 Redis 存儲的唯一 ID。
灣 這個唯一的 ID 用于創建文件名,文件直接從用戶上傳到 NFS 服務器上的臨時存儲。請注意,該文件永遠不會駐留在運行服務器的機器的存儲中。
文件由工人上傳到云存儲
一種。worker從具有唯一 ID 的工作隊列中取出下一個待辦事項記錄
灣 使用唯一 ID 在 NFS 服務器上查找文件,工作人員將文件上傳到云存儲
C。成功后,worker更新工作隊列中的記錄以反映成功
d. worker刪除 NFS 服務器上的文件
通過將服務器流量和工作隊列大小作為兩個獨立的指標進行監控,可以確定應該分別運行服務器/工作器服務的服務器數量。

TA貢獻1836條經驗 獲得超3個贊
Marcio Castilho 寫了一篇關于類似問題的好文章。它可以在使用 golang 處理每分鐘一百萬個請求中找到。
他展示了他所犯的錯誤以及他為糾正這些錯誤所采取的步驟。一般學習通道、goroutines 和并發的使用的好資源。
charneykaye提到的go-workers也是很好的來源。
- 2 回答
- 0 關注
- 147 瀏覽
添加回答
舉報