如何在Google App Engine和Google Cloud SQL上正确设置多租户应用

Min*_*ire 5 google-app-engine multi-tenant google-cloud-sql

通过使用名称空间,Google App Engine在多租户应用程序方面运行良好.但是,当您使用Cloud SQL作为数据持久性机制时,您开始遇到问题.具体来说,如何将不同的数据库连接到每个命名空间.目前,整个应用程序正在使用的数据库是在实例配置上设置的,因此我可以根据我的猜测将其硬编码到部署中.

我确实意识到多租户应用程序背后的确切架构不同于业务需求(或者至少应该是有用的扩展),但我会对一些通用的解决方案感到满意,这些解决方案专门用于构建使用Google Cloud的多租户应用程序SQL.

我试图避免基于多租户列(除非有人能够解释为什么它的本质是云sql否定了我需要担心一个整体数据库中的所有内容).理想的情况是imho,它将使一个应用程序使用附加到不同数据库的命名空间api(所有共享相同的模式)和某种机制来同步所有数据库租户中的列表数据.

我们的其他想法是:

  1. 每个租户都有自己的应用程序,因此有硬编码数据库..同步列表数据的问题(发布者/广播,代理?).
  2. 每个租户都有自己的版本,因此硬编码数据库..使用数据存储区列表数据.
  3. 一个应用程序,一个数据库,基于命名空间的前缀表名称(但我们无法弄清楚如何动态地使用JPA)

我们也不完全不喜欢使用其他兼容的云sql提供程序.

最后,你可能会问为什么要使用SQL.唯一的原因是多个应用程序能够同时从中读取和写入,这是数据存储区不允许的.

小智 1

这应该不是问题。应用程序使用的数据库可以在 JDBC 连接 URL 中指定,因此可以在运行时为每个应用程序定义:

c = DriverManager.getConnection("jdbc:google:rdbms://my_instance/my_database");