我有一个基于SaaS的多租户整体应用程序(使用Django构建),我想将其分为基于微服务的体系结构。但是我不确定如何将应用程序划分为正确的分区。在哪些方面我应该照顾?
对于整体应用程序,很容易理解我有一个租户模型来决定架构,但是如果我希望每个服务都是多租户,那么如何在微服务中完成呢?还是应该使服务成为多租户?
答案 0 :(得分:1)
如果您已经在使用OAuth和/或生成JWT进行用户身份验证/授权,那么我建议您像Django应用一样,在请求中提供任何需要租户范围界定以要求用户访问令牌的新服务。这样,您就可以标准化预期如何传递凭据和租户范围,并且验证JWT是一个非常容易实现的过程。
话虽如此,但也必须指出,您不应该要求服务完全使用访问令牌或具有任何类型的租户作用域。特定服务不仅可能不需要承租人范围界定,而且还可能希望以不同于主要Django应用的定义承租人(例如,简单的tenant_id)。例如,仅接受美元金额和信用卡的支付服务不在乎租户是什么,并且可以从主要Django应用程序中完全安全地调用它(当然,您也应该阻止公众访问该服务)。
思考如何设计新服务的最佳方法是在真空中-无需关心其他服务的设计方式或它们如何存储数据。您的服务是为执行任务而构建的,它为自己定义了执行该任务所需的参数,如何执行该任务以及如何存储将来的任务所需的数据。与堆栈中其他微服务设计的这种独立性是设计面向服务系统的能力的一部分。它使创作者可以选择合适的工具来完成工作,并允许他们创建有意义的功能,而无需与数十个他们通常不认识的团队成员进行协作。
希望这会有所帮助,祝你好运。