我什至不知道下面是可能的,但它絕不會傷害問:生成的有限範圍內唯一的數字超過一個節點
我必須運行同一應用程序的兩個節點。每臺機器都需要一個序列發生器,它會給它一個介於0和1e6之間的數字。如果一個節點使用了一個數字,另一個節點就不能使用它。發電機應在午夜重置每晚。即使機器重新啓動,也不應在同一天使用兩次。我們希望避免涉及數據庫,分佈式緩存或文件系統的任何解決方案。假設我們每天不會需要超過1e6個數字。數字不必按順序使用。
到目前爲止,我們已經想到了以下內容:
1)機器A使用奇數,機器B使用偶數。
優點:無共享狀態。
缺點:機器可能沒有足夠的剩餘數量。如果機器重新啓動,它將重新使用以前使用的號碼。
2)機從0到COUNTR 1E6,機器B從1E6至0
優點:沒有共享的狀態。保證所有可用的號碼將在遇到問題前消耗。
缺點:不能擴展到兩臺以上的機器。機器重新啓動時出現同樣的問題。
您認爲如何?有沒有一種神奇的算法可以滿足我們的需求,而無需向磁盤寫入任何內容?
我認爲需要更多背景 - 您使用的數字是什麼,以及您談論了多少個節點?爲什麼你不能使用大於1e6的數字?數字需要多快生成? – 2009-09-28 14:37:22
我想知道你是否真的需要符合這些特定規格的東西...如果你解釋了數字將用於什麼,它可能會有所幫助。 – Thomas 2009-09-28 14:41:13
@標記應用程序基本上是一組外部Web服務的抽象層。其中一項服務要求每個請求都與0至1e6之間的日內唯一ID號相關聯。如果同一個ID在同一天使用兩次,該服務會引發異常。 @Thomas你是絕對正確的,在99.99%的案例中,我不會真的需要這樣一個極端的解決方案,但我很好奇數字理論家是否有解決方案。 – lindelof 2009-09-29 06:01:41