2011-09-07 63 views
5

是否可以在展現最終一致性的數據存儲中創建/存儲用戶帳戶?可以管理展現最終一致性的數據存儲中的用戶/身份?

似乎不可能在沒有一堆架構複雜性的情況下管理帳戶創建,以避免出現兩個帳戶具有相同UID(例如電子郵件地址)的情況?

最終一致性商店的用戶是否使用單獨的一致性數據庫作爲身份商店,或者是否存在我應該探索的解決方案/模式?

由於提前,

傑米

回答

1

可以做到利用管理最終一致性數據存儲。我們這樣做。它適用於以下假設:

  1. 衝突不應該發生,當它們發生衝突時,就會有明確的途徑解決衝突。如果賬戶ID是一個人的電子郵件地址,那麼如果兩個單獨的人嘗試使用同一封電子郵件註冊,則這裏存在更大的問題。我們在這種情況下所做的是在發現衝突後立即封鎖兩個新賬戶,並向衝突地址發送電子郵件,向用戶解釋存在問題(可能存在欺詐)。您可以要求用戶重置帳戶或要求他們聯繫支持人員。

  2. 同一用戶在數據不一致的時間範圍內重複訪問轉到同一副本。例如,如果一個人剛剛註冊並且下一個請求是登錄名,則必須根據存在新註冊詳細信息的數據副本驗證該登錄名。因此,如果最終的一致性是由於多個數據中心位於不同的地理位置,並且在正常情況下,請求會在地理位置上到達最近的數據中心,那麼您就可以。

有一些邊緣的情況下,例如,如果用戶註冊針對一個數據中心,那麼該中心墜毀,現在雖然他仍然可以看到應用程序的用戶甚至無法登錄 - 從其他數據中心服務。您可以根據每日新用戶數量和平均數據中心停機時間計算此案例的預期頻率。然後決定是否值得擔心有一個用戶(百萬/十億/無論您的號碼是多少)出現問題並可能聯繫支持人員。我不久前面對同樣的決定,並認爲從成本效益的角度來看答案是否定的。

+0

Thanks + Elad。這是一個非常有用的答案。爲了補充說明,我還得出了一個結論,即可以通過推遲決算來降低第2點的影響。這可以通過發送電子郵件鏈接來驗證用戶的電子郵件地址來完成。該帳戶將被創建,但未被激活。在激活發生時,如果存在具有相同電子郵件的兩個賬戶,則可以進行解決。 – JBowen

+1

此外,您可以通過使用更高的一致性級別來爲像賬戶這樣的一致性關鍵信息,最大限度地減少最終一致性對Cassandra等平臺的影響,同時利用信息的最終一致性的速度, 。請參閱ConsistencyLevel @ http://wiki.apache.org/cassandra/API –

相關問題