多个 Web 应用程序 - 缓存层设计

多个 Web 应用程序 - 缓存层设计

我有多个客户端电子商务 Web 应用程序在单个 VM 上运行,每个 Web 应用程序都是一个 node.js express 应用程序。

快速 Web 应用程序通过 API 与后端通信,以检索页面内容和产品列表等。但是,为了加快产品搜索速度,我们目前使用内存数据库(洛基斯) 针对所有搜索进行,这对我们来说目前效果很好,因为每个客户的平均产品目录只有大约 80 个项目,我们在每个客户的 Web 应用程序内运行一个简单的 cron,以通过 API 调用使用最新的产品列表刷新内存数据库。

这样做的一些缺点是,由于我们使用 PM2 在 2 节点集群中运行每个应用程序,因此必须复制内存数据库,因为您无法在节点之间共享内存,为了确保内存数据库保持同步,我们使用 IPC 将消息传递给集群内的所有进程。

当我们为更大的客户提供更大的产品目录时,我们实际上并不想为每个子进程保留重复的内存数据库。

我们的服务方式是,虽然每个客户的产品目录并不大,但搜索量却很大,因此拥有 80 种产品的客户每天仍可能会有 1000 次搜索。

我心里有几个选择,但不确定哪一个是最好的:

选项 1 - 单个全局 elasticsearch 集群

我曾经讨论过并且考虑过使用 elasticsearch,然后将每个客户端 Web 应用程序指向单个全局 elasticsearch 集群来执行产品搜索,这样我们就可以使用事件来实时更新 elasticsearch 数据库。

但是,我不知道随着规模扩大,这将如何表现,我不希望 elasticsearch 成为瓶颈

选项 2 - 本地 nosql 数据库

第二种选择是简单地将 lokijs 用作内存数据库,并为每个 VM 提供一个共享的 nosql 数据库(例如 mongo),然后所有 Web 应用程序都使用本地数据库进行查询,每个 Web 应用程序仍然负责更新自己商店的产品目录。然后,随着我们添加更多 VM,每个 VM 都会有自己的本地数据库,供在其上运行的任何应用程序使用

我们是分面搜索的重度用户,并且会根据分面进行聚合以获取分面的计数

相关内容