是否可以在具有最终一致性的数据存储中创建/存储用户帐户?
在没有大量架构复杂性的情况下管理帐户创建似乎是不可能的,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况?
最终一致性存储的用户是否使用单独的一致数据库作为身份存储,或者是否有我应该探索的解决方案/模式?
提前致谢,
杰米
是否可以在具有最终一致性的数据存储中创建/存储用户帐户?
在没有大量架构复杂性的情况下管理帐户创建似乎是不可能的,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况?
最终一致性存储的用户是否使用单独的一致数据库作为身份存储,或者是否有我应该探索的解决方案/模式?
提前致谢,
杰米
可以在最终一致的数据存储中进行使用管理。我们这样做。它在以下假设下工作:
冲突不应该发生,当它们发生时,有一条明确的解决冲突的途径。如果帐户 ID 是一个人的电子邮件地址,那么如果两个不同的人尝试在同一个电子邮件下注册,这里就会出现更大的问题。在这种情况下,我们所做的是在发现冲突后立即阻止两个新帐户,并向冲突地址发送电子邮件,向用户解释存在问题(可能是欺诈)。您可以要求用户重置帐户或要求他们联系支持。
同一用户在数据不一致的时间范围内重复访问到同一个副本。例如,如果一个人刚刚注册并且下一个请求是登录,则您必须针对存在新注册详细信息的数据副本验证该登录。因此,如果最终的一致性是由于位于不同地理位置的多个数据中心造成的,并且在正常情况下,请求会发送到地理位置最近的数据中心,那么您就可以了。
有一些边缘情况,例如如果用户注册到一个数据中心,然后该中心崩溃,现在用户无法登录,即使他仍然可以看到应用程序 - 从其他数据中心提供服务。您可以根据您的每日新用户数量和平均数据中心停机时间来计算这种情况的预期频率。然后决定是否值得担心(百万/十亿/无论您的数字是多少)中的一个用户有问题并可能联系支持。不久前我面临同样的决定,并决定从成本效益的角度来看答案是否定的。