跨多个站点共享表

2024-03-28 16:02:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这更像是一个架构问题,我不能很好地解决这个问题,因为我没有足够的架构经验。。。我目前正在用PythonSqlAlchemy运行解决方案,但问题是通用的,答案不必涉及这些技术。你知道吗

我将试着用一个公共图书馆的例子来解释它。所以想象一下,有一个公共图书馆,服务器上放着所有的书、扫描(大的二进制图像)和用户。我已经做了一个客户机和服务器部分,工作得很好,但本地为一个库。你知道吗

现在,我想为另一个公共图书馆(以及以后更多的公共图书馆)提供这种服务器和客户机。每个库都需要一个本地服务器,因为有很多数据需要在本地服务器之间传输。你知道吗

复杂性来自于图书馆之间共享用户(带会员卡)的要求——如果用户来A图书馆注册,他应该可以去B图书馆而不需要重新注册。不需要在库中查看其他用户数据,他一开始没有注册,只需要查看hist成员帐户(id、登录名和密码)。你知道吗

简单的解决方案是:

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

问题是有一些查询(用于统计信息、视图等)在本地服务器上运行,需要访问用户,所以我不能让用户在不同的服务器和数据库上,因为在这样的体系结构上我不能执行select+join。你知道吗

以前的开发人员留下的解决方案,其他开发人员认为是错误的,就是将users表设置为replicated table(MariaDB+Galera),这样最终在云上和每个库站点上的users表都是相同的,因此,前面的代码工作起来就像所有东西都是本地的一样,同时在后台与其他库共享用户。你知道吗

其中一个问题是,我们的数据库(MariaDB)的当前版本不支持(或已经破坏)部分复制(只有一些表或一些数据库),所以它需要修补MariaDB,并将这个修补版本的数据库服务器分发到云和其他站点,现在和将来都有各种各样的问题未来,当新版MariaDB将问世。你知道吗

如何在站点之间共享这些用户,同时保留本地选择和与用户表连接的能力?你知道吗

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

谢谢你, 米罗

schema - sharing table between sites


Tags: 数据用户版本服务器数据库客户机图书馆站点
1条回答
网友
1楼 · 发布于 2024-03-28 16:02:51

从用户注册的单一真实来源开始。那就是一个服务器(或Galera集群,对于HA)的某处(在HQ,在Cloud,在where)。登录查询远程访问该服务器。你知道吗

想想你登录的任何一个地方,你都会去某个中心城市。我的观点是,这是每个人都这样做,因为它是快速,可靠,高效等,与今天的网络。你知道吗

接下来,图像等呢?如果它们是在你的网站上共享的,你也可以这样做。看看过去二十年任何一个搜索引擎,图片(etc)都是从一个站点获取的。(实际上是少量的站点,用于冗余等)。即使是最大的网络提供商也可能只有十几个数据中心为全世界提供服务。你知道吗

之后,您需要决定云与专用(甚至运行自己的数据中心)。你知道吗

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

另一个选择是用户和图像表是否需要在不同的服务器上。只有在流量和规模都很大的情况下,你才需要考虑将它们分开。对于一个巨大的图像库,您可能需要大量的服务器,此时,他们可能应该生活在服务器上,唯一的目的是提供图像-没有用户,没有HTML页面等。甚至有关图像的“元”信息可以在MySQL的其他地方;图像在文件中,只是一个web服务器调整,以提供图像运行。(我能想到很多这样做的‘大人物’。)

相关问题 更多 >