越来越多受到关注的 noSQL 数据库使用主/从模式来提供“可用性”,但它所做的(至少从我的角度来看)是在一个随时会中断的链中创建薄弱环节。- 主人倒下,奴隶停止运作。
这是处理大量数据和平衡读/写的好方法,但从可用性的角度来看?没那么多...
我从一些 noSQL 中了解到,slave 可以轻松地更改为 master,但是在大多数应用程序中这样做会让人头疼。对?
那么你们这些人是怎么照顾这种东西的呢?主/从数据库在现实世界中是如何工作的?
越来越多受到关注的 noSQL 数据库使用主/从模式来提供“可用性”,但它所做的(至少从我的角度来看)是在一个随时会中断的链中创建薄弱环节。- 主人倒下,奴隶停止运作。
这是处理大量数据和平衡读/写的好方法,但从可用性的角度来看?没那么多...
我从一些 noSQL 中了解到,slave 可以轻松地更改为 master,但是在大多数应用程序中这样做会让人头疼。对?
那么你们这些人是怎么照顾这种东西的呢?主/从数据库在现实世界中是如何工作的?
这是一个相当笼统的问题;你能指定你具体谈论的数据存储吗?
我一直在使用 MongoDB,它处理得非常优雅;“副本集”(基本上是主从集群)中的每个成员都有资格成为主节点。在连接到副本集时,该集将告诉连接的客户端该集中的每个成员。如果集合中的主节点下线,从节点会自动选举一个新的主节点,客户端(因为它有集合中所有节点的列表)会尝试新节点,直到连接;它连接的节点将通知客户端新的主节点,客户端切换其连接。这允许完全透明的主/从故障转移,而无需对您的应用程序进行任何更改。
这对于单个连接显然很好,但是重新启动呢?MongoDB 驱动程序也处理这个问题;它可以接受要尝试连接的节点列表,并会以串行方式尝试它们,直到找到要连接的节点。一旦它连接,它会询问它的主节点是谁,并在那里转发连接。
最终结果是,如果您建立了一个副本集,您就可以有效地不必担心任何单个节点爆炸会使您离线。