我正在使用Java和分布式noSQL DB(Cassandra)开发社交Web应用程序。 我需要为应用程序中的新用户和帖子生成ID,大小分别为32位和64位。
由于构建在分布式平台之上,我们生成ID /密钥的问题变得更加复杂。虽然已经有像Zookeeper /或者twitter的雪花这样的解决方案,它们有助于减轻这种痛苦,但这些解决方案似乎并不简单。
从顶级视图看这些解决方案之后,我觉得最简单的解决方案和最成熟的解决方案。 使用MySQL数据库就像flickr的票务服务器一样,我首先想到的是它似乎是最简单的解决方案。
http://code.flickr.com/blog/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/
我知道会在分布式系统周围创建SPOF ..但我相信这对我早期最简单的解决方案(当时我的资金和人力资源较少)。当我的应用程序增长时,我相信切换并不困难,因为它们不需要传输大量数据。因此,对于我的应用程序的初期状态,我猜MySQL可以以最好和最简单的方式为我提供生成ID。
此选择的主要因素: -
1. Easier Implementation
2. Easy switching anytime in the future
3. Mature
4. MySQL may be required for our other needs as well, already
我正在考虑最初使用单个MySQL服务器,然后切换到两个服务器作为flickr的解决方案,以便删除SPOF。
当我考虑转换为像zookeeper或雪花这样的替代解决方案时,有人会指出可能会出现什么问题吗?或者目前提出的方法的缺点可能是什么?
非常感谢你的时间!
答案 0 :(得分:1)
我知道会在周围创造SPOF 分布式系统..但我还是 相信这将是最简单的 我早期的解决方案
不,最简单的解决方案是使用分布式dbms提供的标识符。这样就避免了
你可能需要顺序性比你想要的要少得多。
我知道会在周围创造SPOF 分布式系统。
它会产生多个单点故障。每个服务器硬件(除了可能是磁盘)都是单点故障的可能性很大。 (你要在那里安装多少个电源?有多少个磁盘控制器?有多少个NIC?)还有一大堆软件单点故障。