Redis for node.js中的多租户

Redis for node.js中的多租户,node.js,caching,redis,multi-tenant,Node.js,Caching,Redis,Multi Tenant,我们有一个多租户NodeJS应用程序,现在我们正在为一些数据添加一个缓存层 我们的目标是将Redis cache与一起使用,并尝试检查支持多租户的选项,主要考虑两点: 保护数据安全 正在租户级别清除旧数据 到目前为止,我们的调查结果是,我们可以为每个租户使用单独的Redis实例——这对我们来说不是一个好的解决方案 我们发现的另一个选项是使用“tenant_id:”前缀命名密钥的名称空间。 这个选项解决了第一个点-数据现在是安全的,但我们仍然需要解决第二个点 我们在这一点上的使用案例是,一个租户可

我们有一个多租户NodeJS应用程序,现在我们正在为一些数据添加一个缓存层

我们的目标是将Redis cache与一起使用,并尝试检查支持多租户的选项,主要考虑两点:

  • 保护数据安全
  • 正在租户级别清除旧数据
  • 到目前为止,我们的调查结果是,我们可以为每个租户使用单独的Redis实例——这对我们来说不是一个好的解决方案

    我们发现的另一个选项是使用“tenant_id:”前缀命名密钥的名称空间。 这个选项解决了第一个点-数据现在是安全的,但我们仍然需要解决第二个点

    我们在这一点上的使用案例是,一个租户可以放置大量数据,这些数据将填充缓存并将其他租户的数据推出。我们希望在租户级别定义我们的LRU,也就是说,当新数据添加到缓存时,它将只逐出相同租户最近使用的数据


    有什么建议吗?

    您是否调查过为每个租户使用单独的Redis逻辑数据库

    您可以使用命令切换活动数据库,或在连接到Redis实例时选择要使用的数据库(数据库id):

    redis://user:password@主机:端口/数据库id

    例如:

    redis://user:password@本地主机:6379/1


    连接到逻辑数据库1。

    虽然使用逻辑/编号/共享数据库的选项确实存在,但您应该避免这样做。不仅您的数据库共享相同的配置,因为Redis是单线程的,每个租户(可能)会干扰其他人的操作,并且(最坏的情况)会阻止他们

    您应该为每个租户使用专门的Redis流程。好消息是Redis非常轻量级,因此每个实例的资源开销非常小。稍微少一点的好消息是,这种方法将使管理更加复杂

    如果您希望避免管理痛苦,我建议您研究使用托管Redis产品的选项。根据您的提供商,有些服务器允许创建多个专用实例,而无需额外成本


    免责声明:我在Redis实验室工作,它是Redis的家和解决方案的提供商,包括一个运行方式与我上述所述相同的托管Redis(顺便说一句)。

    我只是偶然发现了同样的问题并找到了一个好的解决方案。。 在KeyDB()中,它是一个Redis fork,现在支持多线程。它与Redis完全兼容,是Redis的替代品;因此,您不必更改任何代码

    我在多租户场景中使用它作为全文搜索提供程序。我的数据存储是MongoDB(对fts的支持较少);每个租户在KeyDB中都有一个哈希列表,存储所有关键字。然后使用HSCAN查询KeyDB(它非常快)。然后,结果可以由MongoDB解析。由于KeyDB是非阻塞和多线程的,因此不需要复杂的部署解决方案

    是的,您可以使用现有的Redis节点库来访问KeyDB


    保持健康,最好

    你能详细说明一下这个选项吗?它是如何实现的,不同数据库中的LRU配置选项是什么?好的,LRU/资源配置在所有数据库中共享,因此这种方法可能无法解决您的问题。在这一点上,我认为单独的Redis实例是唯一的出路。似乎在这里,有人在使用多个数据库来满足与我们相同的需求。这些数据库完全分离,这应该可以很容易地为一个租户擦除所有密钥。但是,您将无法对每个数据库(内存、保存策略等)进行不同的配置设置(想想redis.conf)。@user2717436不幸的是,似乎是这样的:在创建新租户或删除旧租户时,如何添加/删除数据库?您是否需要手动添加它,或者Redis Labs是否有一些方法可以动态创建数据库?我想您需要为每个租户配置和启动/关闭Redis流程,这些租户是从您的应用程序中添加或删除的,这对我来说很麻烦。你不会为每一个新房客建立一个单独的Postgres流程吧?(不过,一个专用的Postgres数据库就可以了,因为它可以通过编程轻松创建)。也许Redis不是你问题的解决方案。或者,您需要考虑建立一个对所有租户都足够强大的Redis集群,并自己在其上实现LRU机制(应该有第三方库)。RL可以提供一个REST API来创建/删除数据库。您可以联系公司的支持团队以了解更多详细信息。@ItamarHaber我只是说,在多租户应用程序中为每个客户/租户管理专用流程感觉很奇怪。我只是用博士后作为类比。@TobiKremer我能理解这可能是违反直觉的,但事实就是这样。。。分而治之。