我有一个小的Rails应用程序,我已经部署在heroku的免费层上,只有一个API,没有用于创建Books的视图,返回Book的类型,并从数据库中删除所有Books。它看起来有点像这样:
POST request to site.herokuapp.com/add_book?name=harrypotter&genre=fantasy
会添加一本书。
GET request to site.herokuapp.com/find_book?name=harrypotter
返回该类型。
A POST request to site.herokuapp.com/reset clears the database of all books
既然我已经在单个服务器上工作了,我想在三个服务器上复制它,每个服务器都有一个唯一的URL,这样我就可以将我的调用发送到3个服务器中的任何一个,并让所有数据库都包含相同的Book条目
例如,如果我发送
POST request to site1.herokuapp.com/add_book?name=harrypotter&genre=fantasy
然后发送
POST request to site2.herokuapp.com/add_book?name=littlewomen&genre=fiction
我可以发送
GET request to site3.herokuapp.com/find_book?name=littlewomen
。
但如果我向服务器发送重置调用,则不会重置其他服务器。
我找到了两个名为Octopus和Data Fabric的宝石,但看起来它们在同一服务器上的数据库之间复制,而不是在不同的服务器上复制。此外,由于我要拨打三个不同的网站,这些宝石会起作用吗?
在Rails中进行此类数据库/服务器复制的最佳方法是什么?
答案 0 :(得分:0)
不确定我是否完全了解您的完整用例。您只是想在不同的数据库中分配读/写以进行不同的API调用吗?
如果它是一个小应用程序,为什么你没有在站点1上拥有所有3个应用程序,站点2和站点3连接到同一个数据库实例?
以下选项:
主从复制
在您的情况下,您将拥有1个主数据库和2个从数据库数据库。数据将被读取并写入主数据库,但将被复制到从属数据库。然后,您可以将rails应用程序配置为对所选数据库进行读取。
您可以使用Octopus在从站和主站之间分配写入/读取。
使用复制时,所有写入查询都将发送到主服务器,并将查询读取到从服务器。
MySQL群集
我还没有使用MySQL集群,但应该尽快使用它。如果您的要求是在所有数据库之间分配读/写,同时使数据在所有节点上保持一致,那么MySQL集群看起来是一个很好的候选者。数据分布在数据节点池中。每个MySql服务器都可以访问所有数据节点,因此当集群中的服务器通过插入行来更改数据示例时,该新数据可以立即被集群中的其他MySql服务器访问和查看。
在此处查看更多MySql Cluster