基于子域的GAE命名空间

2024-09-24 22:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在考虑一个多租户环境,在这种环境中,我可以让每个租户访问不同的子域,然后基于该域潜在地分配一个命名空间。在

例如

tenantA.mydomain.com
tenantB.mydomain.com

然后我希望所有tenantA数据的名称空间为tenantA,所有tenantB数据的名称空间为tenantB。在

从文档来看,我似乎要在appengine_config.py文件中完成此操作,然后执行以下操作:

^{pr2}$

第一个问题,这是一个合理的/好的方法吗?在

第二个问题,在这个范围内有哪些变量是不清楚的-有没有关于如何实现get_namepsace_from_subdomain()函数的指针?在

最后,如果我想提供一些跨名称空间的功能,还可以用全局名称空间来实现吗?例如,假设一个用户在多个租户中有一个帐户,我希望提供他在所有租户中的活动的视图。在


Tags: 数据子域文档名称comconfig环境空间
2条回答

我不认为这是最好的办法。这种方法的问题在于,您在某种程度上将应用程序与基础设施紧密耦合。域和子域只是访问绑定到特定ip地址的计算机的一种更简单的方法。我会将域名归类为基础设施的一部分,而不是应用程序的一部分。如果您使用上述方法,那么您将在应用程序中引入一些有关基础结构的知识,从而降低应用程序的灵活性。如果你出于某种原因,在将来某个时候决定你的客户A应该使用clientA.mydomain.com?或者呢keyClientA.myotherdomain.com?或者你想让你的客户A使用他们的域名,也就是说。support.clientA.com?如果您的应用程序对域和基础设施设置一无所知,那么只需重新配置DNS服务器并获得可移植性就容易多了。在

如果我有这样的场景,我会有一些URL到租户id的映射,然后使用该租户id作为命名空间名称。通过这种方式,您可以轻松地将不同的URL映射到一个租户id,甚至可以将多个URL映射到同一个租户id,并在多个URL上公开同一个应用程序。您的映射可以存储在一个简单的配置文件中,甚至可以存储在全局命名空间中的AppEngine数据存储中。如果配置存储在AppEngine数据存储中,您可以使用应用程序的管理部分(甚至是另一个AppEngine模块),您可以使用它来实时更新配置。在

基于子域在应用程序中使用多租户是可能的,也是合理的,不过根据我的经验,您还应该允许使用url param重写命名空间。在

例如

tenantB.mydomain.com/?tenant=tenantA => namespace=tenantA

这将使您的生活更加轻松,并使您能够在*上测试最新的appengine版本。appspot.com网站在将它们转移到生产环境之前(尤其是在计划SSL访问时)。在

一旦设置了名称空间,那么只有该名称空间下的实体才可用,您可以随时通过代码更改名称空间-范围无关紧要。 对于子域-您可以从客户端的一个请求头解析它。在

您可以将您想要的任何内容写入全局命名空间,并随时通过代码访问它。对于您描述的场景,您需要将用户活动保存在全局命名空间上。在

另外,在使用GAE团队的名称空间的python官方示例中可以看到一个例子。 https://github.com/GoogleCloudPlatform/appengine-guestbook-namespaces-python 它为你提供了开始所需的一切。在

相关问题 更多 >