TLDR:我正在设计一个混合的多租户应用程序,需要处理来自客户(租户)的定制请求,我试图在模块化的monolith模式和微服务模式之间做出决定,这是处理定制的最佳方法,降低开发成本?我的意思是,既然模块/微服务的大小是正确的,那么我们应该如何处理自定义呢?
如果问题需要澄清或混淆,请在评论中提出,我将急于澄清任何事情。
如果你需要更多的信息,请让我知道,我愿意提供它,请尽量温柔,这对我来说太混乱了。
对于这么大的帖子,我很抱歉,但我认为这个信息与我强烈建议阅读整个帖子的决定相关,这包含了我对这个主题所做的背景和研究:
我正在设计一个混合多租户应用程序,它必须处理自定义,例如:我有一个基本(默认)优惠券功能,但是一个客户(租户)需要在优惠券功能中添加一些特定的逻辑。
您可以在这里阅读更多关于多租户的内容:https://docs.microsoft.com/en-us/azure/azure-sql/database/saas-tenancy-app-design-patterns
我正在做一些关于架构模式的研究,我发现了两个主要有趣的模式,我认为这些模式可以解决我的问题:
以下是Microservice体系结构的特点:整个应用程序被分割成单独的进程,其中每个进程可以包含多个模块。
以下是模块化整体架构的特点:
到目前为止,我所了解的是:
我们所指的定制的一个真正的例子是:
这个基本的应用程序有一个商店功能,它用单位价格计算总价格,一个拥有杂货店的顾客(租户)不计算单位价格,但他在(x)公斤之后计算每公斤价格,他要求我们改变他的商店的定价制度。
发布于 2021-09-29 08:18:58
对我来说,关于定制的问题与微观服务/模块一元问题是正交的。也就是说,它们并没有真正的联系。
据我所知,微服务的主要好处似乎是减少了团队间的依赖关系。单块开发有一个问题,当软件发布时,所有的团队都必须使用它们的特性。因此,它需要团队之间的同步,而且随着团队数量的增加,这变得更加困难。微服务通过允许每个团队独立发布更新来解决这个问题。更容易的扩展和容错是一个不错的好处。
模块monolith仍然需要一个单独的版本,因此仍然需要至少一些同步。但是,对于较小的团队来说,这可能还是比较合适的,因为这不是什么问题。我个人倾向于一个模块化的monolith,因为我认为微服务有点夸张,但它将完全取决于您的应用程序。
定制可以通过使用特性标志、配置简单的逻辑表达式、使用某种简单的运行时脚本进行配置、一个完整的插件系统或用自定义版本替换整个软件组件来完成。但是,我不知道微服务如何在不重新启动的情况下解决加载/卸载定制代码等问题。除非您每个客户有一个微服务,否则您只需将问题转移到微服务。
如果您使用某种用于自定义的插件系统,通常有一些方法可以在运行时管理代码的加载/卸载,但它可能取决于语言,最好是单独问一个问题。
https://softwareengineering.stackexchange.com/questions/432316
复制相似问题