gpt4 book ai didi

java - 软件即服务 (SaaS) 的应用程序设计

转载 作者:行者123 更新时间:2023-11-30 09:01:48 24 4
gpt4 key购买 nike

所以我目前正在设计 SaaS 应用程序。我在设计上遇到了小问题。假设我在 www.mycompany.com 下部署了一个应用程序。用户购买订阅并因此获得对应用程序的访问权限。现在我想要的是一种在用户购买订阅时创建此应用程序的新实例的“方式”,例如:

John 拥有 Vega 公司。当他购买访问/使用我的应用程序的许可证时,将创建一个新实例,可通过 www.vega.mycompany.com 访问。一旦创建了他的帐户,就会部署一个新的应用程序实例,创建新的数据库并将其与我的应用程序的新创建实例链接。

背后的原因是:

  1. John 可能会生成大量数据,因此拥有多个较小的数据库比为每个客户提供一个数据库要好。
  2. John 可能会存储他不希望与其他用户存储在同一个数据库中的敏感数据。

我想用 Java 开发应用程序。我用来创建 SaaS 应用程序新实例的管理应用程序也将使用 Java 开发。现在我的问题:

  1. 我如何才能真正做到这一点?每当创建新帐户时,我是否只需在应用程序容器(例如 Tomcat)中部署相同的 WAR 文件?
  2. 如何从管理员应用程序创建“vega”子域 - 这甚至可能吗?
  3. 如果有一个错误或者我想简单地更新一些东西并且我有 1000 个这个应用程序的实例,我该如何顺利地完成它?

最佳答案

我现在正在研究一个类似的问题/解决方案,虽然它是用 C# 编写的,但它将在带有 mono 的 linux 中运行,我相信我的解决方案与语言无关。

首先 - 开发像你我一样的 SaaS 应用程序 - 需要为每个新客户创建一个新实例并不是真正的最佳实践(据我所知)。由于您提到的问题 - 设置新环境并处理许多并发实例,其中包括更新或可能将它们移动到不同的服务器/基础架构。

对我来说,这个决定是由于应用程序的初始设计糟糕、数据设计更简单以及最终更好的安全性,因为现在可以只为每个客户提供对其数据库的一小部分的权限,而没有 SQL 注入(inject)或者我这边的其他错误可以改变这一点——因为权限是在数据库级别强制执行的。 (你仍然可能在那里有错误,我完全知道这一点)

我的解决方案:

使用docker containers .它比传统的 VM 轻量级得多,为您提供额外的抽象和安全性,以防万一,例如,允许用户上传文件,......此外,部署一个新容器也相当简单和快速,因此您可以在部署后几秒钟内完成用户注册。

我在主机上使用 Nginx 服务器作为反向代理,它将请求转发到每个客户的相应容器。这里的问题是在更新配置文件后重启 Nginx,而不丢失任何流量,这有点棘手。

更新应用程序也很容易,因为您只需要发布新版本的镜像,停止所有正在运行的容器并使用新镜像重新启动它们。但是要做到这一点,容器不能保存任何数据,请记住这一点。 - 这里的问题是再次以某种方式更新它,用户不会注意到,对我来说 - 因为我只有一个时区的客户,这很容易 - 只需将它安排在凌晨 4 点,祈祷没有人会疯狂到醒来那时还在工作:)

这可能不会为您提供 99,999% 的可用性,但这不是我的目标,这是为了便于管理这些容器而做出的很好的权衡。其他优点是 - 您可以在任何 linux 机器上测试生产环境,并且可以将代码移动到任何您想要的地方,只需更改 Nginx 反向代理配置。

关于java - 软件即服务 (SaaS) 的应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com