如何管理分布式数据库中的用户会话?

how to manage user sessions in distributed databases?

由于我在开发可水平扩展的 Web 应用程序方面经验为零,我需要有经验的人指导我正确的方向。

我很难找出在数据库中存储登录会话的正确方法,所以我想知道,当我计划在未来使用复制时,是否可以将它们存储在数据库中?如果不是,替代者是什么??

我需要不同的客户端(android、Windows、...)通过与同一用户相关的各自会话连接到服务器,我正在使用:

1 - 美分-OS 为 OS

2 - PostgreSQL 作为 DBMS

3 - Tomee 作为 HTTP 服务器和 Servlet 容器

4 - 分区表(PostgreSQL 中的继承表)以提高性能、内存索引扫描的机会、防止碎片等

我的问题是因为我需要在每个收到的客户端请求中检查会话可用性(每个会话都有自己的加密密钥)并且可能有数百万个会话,在分布式环境中我不能确保创建的会话在正确的时间在复制的数据库中可用。

感谢您的帮助

将用户会话存储在 RDBMS 中最终会降低应用程序的性能。您应该了解一下用于存储和读取用户会话的分布式缓存机制。我强烈推荐用于用户会话的 NoSQL 数据库解决方案,例如 Redis,它使您能够在内存中存储键值对并以非常高的速度响应。此外,您可以调整配置文件,以便将内存中的键值对存储到磁盘以实现持久性。您还需要关注跨多个 NoSQL 实例和内部数据结构(例如 HashMap)的键值对分布。您可以使用自己的哈希算法在多个实例上分发键值对,从而实现高可用性。你应该记住,水平分片会导致一些问题,你可以参考CAP theorem - Availability and Partition Tolerance 详细信息。