【发布时间】:2019-08-19 20:54:40
【问题描述】:
我有一个基于 SaaS 的多租户单体应用程序(使用 Django 构建),我想将其划分为基于微服务的架构。但我不确定如何将应用程序划分为正确的分区。我应该注意哪些方面?
在单体应用的情况下,很容易理解我有一个租户模型来决定模式,但是如果我希望每个服务都是多租户的,如何在微服务中完成呢?或者我什至应该让服务多租户?
【问题讨论】:
标签: django microservices multi-tenant
我有一个基于 SaaS 的多租户单体应用程序(使用 Django 构建),我想将其划分为基于微服务的架构。但我不确定如何将应用程序划分为正确的分区。我应该注意哪些方面?
在单体应用的情况下,很容易理解我有一个租户模型来决定模式,但是如果我希望每个服务都是多租户的,如何在微服务中完成呢?或者我什至应该让服务多租户?
【问题讨论】:
标签: django microservices multi-tenant
如果您已经在使用 OAuth 和/或生成 JWT 以进行用户身份验证/授权,我建议任何需要租户范围以要求在请求中提供用户访问令牌的新服务,就像您的 Django 应用程序一样。这使您可以标准化凭证和租户范围的预期传递方式,并且验证 JWT 是一个非常容易实施的过程。
话虽如此,同样重要的是要指出,您根本不应该要求服务使用访问令牌或具有任何类型的租户范围。不仅特定服务可能不需要租户范围,而且他们可能希望定义与主 Django 应用程序不同的租户(例如,简单的租户 ID)。例如,仅接受美元金额和信用卡的支付服务不关心租户是什么,并且从主 Django 应用程序调用是完全安全的(当然,您也应该阻止公共访问该服务)。
思考应该如何设计新服务的最佳方式是在真空中进行 - 无需关心其他服务的设计方式或它们如何存储数据。您的服务是为执行一项任务而构建的,它为自己定义了执行该任务所需的参数、执行该任务的方式以及存储未来任务所需的数据的方式。这种与堆栈中其他微服务设计的独立性是设计面向服务系统的力量的一部分。它允许创建者为工作选择正确的工具,并允许他们创建有意义的功能,而无需与他们通常不认识的数十名团队成员协作。
希望这会有所帮助,祝你好运。
【讨论】: