Google app engine 如何在Google app Engine和Google Cloud SQL上正确设置多租户应用程序

Google app engine 如何在Google app Engine和Google Cloud SQL上正确设置多租户应用程序,google-app-engine,multi-tenant,google-cloud-sql,Google App Engine,Multi Tenant,Google Cloud Sql,GoogleAppEngine通过使用名称空间在多租户应用程序中运行良好。然而,当您使用云SQL作为数据持久性机制时,您开始遇到问题。具体来说,如何将不同的数据库连接到每个名称空间。目前,整个应用程序正在使用的数据库都是在实例配置上设置的,因此我可以推测,它在部署中几乎是硬编码的 我确实意识到,多租户应用程序背后的确切体系结构因业务需要而不同(或者,如果要有效地扩展,至少应该如此),但是,我很乐意使用一些通用解决方案,专门解决使用Google Cloud SQL构建多租户应用程序的问题 我试图避

GoogleAppEngine通过使用名称空间在多租户应用程序中运行良好。然而,当您使用云SQL作为数据持久性机制时,您开始遇到问题。具体来说,如何将不同的数据库连接到每个名称空间。目前,整个应用程序正在使用的数据库都是在实例配置上设置的,因此我可以推测,它在部署中几乎是硬编码的

我确实意识到,多租户应用程序背后的确切体系结构因业务需要而不同(或者,如果要有效地扩展,至少应该如此),但是,我很乐意使用一些通用解决方案,专门解决使用Google Cloud SQL构建多租户应用程序的问题

我试图避免使用基于多租户的列(除非有人能解释为什么它的本质是云sql,而不必担心所有东西都在一个单一数据库中)。理想的场景imho是让一个应用程序使用名称空间api连接到不同的数据库(所有数据库共享相同的模式),并使用某种机制跨所有数据库租户同步列表数据

我们还有其他想法:

  • 每个租户都有自己的应用程序,因此硬编码数据库。。同步列表数据的问题(发布者/广播、代理?)
  • 每个租户都有自己的版本,因此硬编码数据库。。对列表数据使用数据存储
  • 一个应用程序、一个数据库、基于名称空间的前缀表名(但我们无法弄清楚如何使其与JPA动态协同工作)
  • 我们也不完全反对使用另一个兼容的云sql提供商


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

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


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

    您是否担心,如果您使用多租户列解决方案,您将获得潜在的数据泄漏?这是萨班斯-奥克斯利法案还是HIPAA法案的问题?既不是SOX也不是医疗保健(这一次,哈哈)。这实际上是我们扩展时的性能和潜在的数据泄漏的结合,因为我们的客户竞争激烈,需要隔离的保证。请问您最终是如何解决这一问题的?我目前正在开发类似的产品,非常感谢您的经验:-)