我目前有一个设置,其中 10 个数据库客户端访问同一网络上的一个 (Postgres)-SQL 服务器。这些应用程序的数据库占用空间非常小。它们在启动时会加载一些表,并且在运行时执行相当多的操作(每小时可能 100 次操作)。
但数据库服务器对于系统操作至关重要。只要数据库服务器还活着,所有其他客户端都可以彼此冗余地执行相同的任务。我不想只建立一个冗余的数据库服务器。
我想要做的是:让每个客户端也成为数据库服务器,并从系统中删除专用服务器。我想在每个客户端上形成一个分布式数据库系统(可能是动态分布式网格)。同步应该或多或少透明地完成。只要一个客户端还活着:就应该有一个有效的数据集。这个客户端拥有上一个死亡客户端的最新工作集不是很重要,但结构仍然有效,他可以执行下一个操作。
我之前说过:当前系统的数据库操作占用空间非常小,数据库代码可以轻松重做。重要的是:找到一个最适合构建这种冗余的数据库系统。
关于实现的任何想法,或者至少我在研究该主题时应该阅读的东西。因为我以前从未做过这样的事情。
谢谢
答案1
您可以在每个客户端上安装 DB 服务器,让应用程序连接到本地主机并在客户端之间设置多主复制,但是:
- 那么备份呢?中央数据库服务器确实更容易备份和恢复。
- 那么扩展性如何?客户端的数据库扩展性不是很好。
- 网络延迟怎么样?你没有写所有客户端都在同一个 LAN 上,但如果存在一些不太可靠的连接,数据库可能会出现严重问题
- 不要忘记诸如脑裂之类的情况。如果数据库在某个节点崩溃,应用程序会做什么?应该连接到不同的节点吗?它将如何检测其他节点?
确实有很多缺点,我不建议你这样做。只需设置两个/三个镜像数据库服务器并让客户端连接到它们,最好通过 haproxy 或其他负载均衡器。