2011-09-07 34 views
5

是否可以在展现最终一致性的数据存储中创建/存储用户帐户?可以管理展现最终一致性的数据存储中的用户/身份?

似乎不可能在没有一堆架构复杂性的情况下管理帐户创建,以避免出现两个帐户具有相同UID(例如电子邮件地址)的情况?

最终一致性商店的用户是否使用单独的一致性数据库作为身份商店,或者是否存在我应该探索的解决方案/模式?

由于提前,

杰米

回答

1

可以做到利用管理最终一致性数据存储。我们这样做。它适用于以下假设:

  1. 冲突不应该发生,当它们发生冲突时,就会有明确的途径解决冲突。如果账户ID是一个人的电子邮件地址,那么如果两个单独的人尝试使用同一封电子邮件注册,则这里存在更大的问题。我们在这种情况下所做的是在发现冲突后立即封锁两个新账户,并向冲突地址发送电子邮件,向用户解释存在问题(可能存在欺诈)。您可以要求用户重置帐户或要求他们联系支持人员。

  2. 同一用户在数据不一致的时间范围内重复访问转到同一副本。例如,如果一个人刚刚注册并且下一个请求是登录名,则必须根据存在新注册详细信息的数据副本验证该登录名。因此,如果最终的一致性是由于多个数据中心位于不同的地理位置,并且在正常情况下,请求会在地理位置上到达最近的数据中心,那么您就可以。

有一些边缘的情况下,例如,如果用户注册针对一个数据中心,那么该中心坠毁,现在虽然他仍然可以看到应用程序的用户甚至无法登录 - 从其他数据中心服务。您可以根据每日新用户数量和平均数据中心停机时间计算此案例的预期频率。然后决定是否值得担心有一个用户(百万/十亿/无论您的号码是多少)出现问题并可能联系支持人员。我不久前面对同样的决定,并认为从成本效益的角度来看答案是否定的。

+0

Thanks + Elad。这是一个非常有用的答案。为了补充说明,我还得出了一个结论,即可以通过推迟决算来降低第2点的影响。这可以通过发送电子邮件链接来验证用户的电子邮件地址来完成。该帐户将被创建,但未被激活。在激活发生时,如果存在具有相同电子邮件的两个账户,则可以进行解决。 – JBowen

+1

此外,您可以通过使用更高的一致性级别来为像账户这样的一致性关键信息,最大限度地减少最终一致性对Cassandra等平台的影响,同时利用信息的最终一致性的速度, 。请参阅ConsistencyLevel @ http://wiki.apache.org/cassandra/API –

相关问题