[英]How do I track random numbers with stateless services
我有一個設計問題,我正在尋找一種有效的方法來解決:
我有運行單個服務的三個實例。 每個實例都是完全無狀態的,並公開一個端點/token
。 當客戶端調用/token
端點時,會返回一個隨機數。 隨機數由非重復偽隨機數生成器生成,該生成器在前 n 次被調用時生成唯一的隨機整數,然后在接下來的 n 次被調用時重復相同的序列。 換句話說,它是 n 個值的重復循環。 所以說n = 20
,它會在前 20 次被調用時返回 0 到 20 范圍內的唯一值。
這里的問題是:假設我運行了該服務的三個實例,我如何避免重復隨機整數,因為任何服務都不知道它們中的任何一個生成了什么隨機值。
這是我所做的:
我已經作為環境變量傳遞了一個種子值,以確保所有服務都生成相同的隨機序列。
我已經設置了一個數據庫,這些服務中的每一個都可以遠程訪問。 它有一個表,單列map
設置為默認值0
當客戶端調用服務的/token
端點時,該服務會將map
列中的值加 1 並獲取結果值。
然后我返回這個結果值在隨機序列中映射到的隨機數
上述方法有效嗎? 服務在嘗試訪問數據庫行時是否會遇到競爭條件? 這個問題可以在沒有數據庫的情況下解決嗎?
建議將不勝感激。
提前致謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.