跨多个站点共享表

时间:2017-10-11 09:09:45

标签: python mysql galera

这更像是一个架构问题,我无法正确解决这个问题,因为我没有足够的经验来使用这样的架构...我目前正在运行使用 Python SqlAlchemy 的解决方案,但问题是通用的,答案并不是必须解决这些技术。

我将尝试以公共图书馆的例子来解释它。因此,想象一下拥有一个公共图书馆,服务器持有所有书籍的表格,扫描(大型二进制图像),用户。我已经制作了一个很好的客户端和服务器部件,但是本地用于单个库。

现在我希望将服务器和客户端用于另一个公共库(以及后来的更多公共库)。需要为每个库提供本地服务器,因为有大量数据要传输到本地服务器和从本地服务器传输。

复杂性来自于能够在库之间共享用户(及其成员卡)的要求 - 如果用户来到库A进行注册,他应该能够在不需要新注册的情况下进入库B.没有必要能够在他首先注册的库中看到其他用户数据,只需要注册会员帐户(id,登录名和密码)。

简单的解决方案是:

  • 在本地服务器上拥有大量数据
  • 在云上拥有用户(某些公共服务器在互联网上)

问题是存在查询(用于统计信息,视图等),这些查询在本地服务器上运行并且需要访问用户,因此我无法在不同的服务器和数据库上拥有用户,因为我无法和然后在这样的架构上选择+加入。

以前的开发人员和其他开发人员认为错误的解决方案是将用户表设置为复制表 MariaDB + Galera )因此,它最终会让用户在云和每个库网站上使用相同的表格,因此以前的代码可以像所有内容一样只是本地代码,同时在后台与其他库共享用户。

其中一个问题是我们数据库的当前版本(MariaDB)不支持(或已经破坏)部分复制(只有一些表或某些数据库),因此需要修补MariaDB并将这个修补后的数据库服务器版本分发给云和其他网站,这将在现在和将来出现各种问题,当新版本的MariaDB问世时。

在网站之间共享这些用户的正确方法是什么,同时保留本地选择和加入用户表的能力?

(也许这里有一个已知的设计/架构模式,但我不知道该搜索什么,因为我是新手。)

谢谢, 米罗

schema - sharing table between sites

1 个答案:

答案 0 :(得分:0)

从用户注册的单一来源开始。那是一个服务器(或Galera集群,对于HA)某处(在HQ,在云中,无论在哪里)。登录查询远程访问该服务器。

考虑一下你登录的任何地方 - 你要去一些中心引用。我的观点是,这就是每个人都这样做的方式,因为它具有快速,可靠,高效等特点,适用于当今的网络。

接下来,图像等等?如果他们在您的网站上共享,您也可以采用相同的方式进行操作。查看过去二十年的任何搜索引擎 - 从单个站点获取图像(等)。 (实际上是少数网站,用于冗余等)。即使是最大的网络提供商也只有十几个数据中心可以为整个世界提供服务。

之后,您需要决定Cloud vs dedicated(甚至运行您自己的数据中心)。

对于HA,云提供商做了很多。对于自己动手,有各种复制方案,Galera是最好的(今天)之一。对于真正的HA,您需要在地理上分开两个数据副本 - 以防止飓风,火灾,洪水,地震等。考虑Galera的WAN部署,或某些异步复制(甚至可能在两个Galera集群之间。

另一种选择是用户和图像表是否需要位于不同的服务器上。只有当流量和大小很高时,您才需要考虑将它们分开。对于一个巨大的图像库,您可能需要大量的服务器,此时,它们可能应该只存在于服务器上,其唯一目的是提供图像 - 没有用户,没有HTML页面等。甚至是" meta& #34;关于图像的信息可能在MySQL的其他地方;图像位于文件中,只是一个调整为提供图像运行的Web服务器。 (我可以想到多个“大家伙”这样做。)