我正在设计一个多租户系统,并且正在考虑在应用层级别而不是数据库上按租户进行分片。
假设,这应该工作的方式是,对于传入请求,路由器进程具有包含主要属性的租户的全局集合,以确定此请求的租户以及虚拟分片 ID。此虚拟分片 ID 进一步映射到实际分片。
实际的分片既包含应用程序的代码,也包含此租户的全部数据。这些分片将是 LNMP(Linux、Nginx、MySQL/MongoDB、PHP)服务器。
路由器进程应该充当代理。它应该能够运行一些代码来根据存储在某些本地数据库或文件中的集合来确定传入请求的目标分片。为了能够更好地扩展,我正在考虑让分片本身也充当路由器,以便它们可以运行反向代理,将请求转发到适当的分片。也许在 shard 上运行的 nginx 实例也可以充当那个反向代理。但是它将如何执行将请求与适当的分片匹配所需的应用程序逻辑。
我将不胜感激有关此路由器实施的任何想法和建议。
谢谢