7

我们正在运行 mongodb 实例以将数据存储在集合中,这没有问题,mongo 是我们的主要数据存储。

今天,我们将为产品开发 Oauth2 支持,并且必须存储用户会话(安全密钥、访问令牌等),并且访问令牌必须在定义的超时后才针对身份验证服务器进行验证,这样就不会每个请求都将等待身份验证服务器的验证。对安全资源的首次请求(创建)应始终针对认证服务器进行认证。任何后续请求都将在内部进行验证(缓存)并检查内部超时,只有在过期时,才会向身份验证服务器发出另一个请求。

为了解决这个要求,我们必须引入某种分布式缓存,以存储(支持 TTL)用户会话等,基于 ttl 使其过期......我在上面写过。

这里有两个选项:

  1. 将用户会话存储在 hazelcast 中并在所有应用服务器之间共享 - 不错的选择,将所有用户会话保留在驱逐地图中。
  2. 在 MongoDb 中存储用户会话 - 并执行相同操作。

您是否看到使用 Hazelcast 而不是将临时数据存储在Mongo中的任何好处?您知道任何显着的性能改进吗?

我是Hazelcast的新手,所以不了解所有杀手级功能。

4

2 回答 2

19

免责声明:我是 Hazelcast 的创始人......

  1. Hazelcast 更简单,简单性也很重要。
  2. 您可以将 Hazelcast 嵌入到您的应用程序中(如果您的应用程序是用 Java 编写的)。无需部署和维护远程nosql集群。
  3. Hazelcast 直接与您的应用程序对象一起工作。没有 JSON 或任何其他格式。写入和读取 java 对象。
  4. 您可以对内存中的数据执行 Java 代码。无需获取和处理数据;将您的代码发送到数据。
  5. 您可以收听数据的更新。“当此地图或密钥更新时通知我”。
  6. Hazelcast 具有丰富的数据结构集,如队列、主题、信号量、锁、多映射等。想象一下跨多个节点共享一个队列并能够进行阻塞队列轮询/获取操作......这真的很酷:)
于 2013-03-20T02:12:09.130 回答
3

Hazelcast is an in-memory grid so it should be significantly faster than MongoDB for that kind of usage. They also have pre-made session clustering code for Java servlets if you do not want to create that yourself.

Code for the session clustering here on github. Or here for Maven artifact.

于 2013-03-19T20:36:00.237 回答