【发布时间】:2018-09-13 12:10:48
【问题描述】:
我们正在重写以前用 Delphi 编写的企业遗留应用程序套件。该套件包括一些高级用户使用的 FAT 客户端、一个单租户关系数据库、一个所有员工使用的 Windows 服务 Web 应用程序以及一堆按需或按计划运行的 .EXE 工具。该套件始终安装在本地(在客户站点),并且主要限于其 LAN。
现在是 2018 年,我们必须将套件重写为 Web 界面应用程序。但不仅如此,我们还必须对其进行设计,使其易于现场安装、由我们托管或以多租户方式作为 SaaS 提供。每次安装时,我们都有一些自己的硬件在现场。
我们已经开始将 Web 应用程序解耦到引擎、Web API (.NET Web API 2) 和前端 SPA (Angular 2)。我们将使用 MQTT 和 Azure IoT Hub 与我们的本地硬件进行通信。
我们正在努力避免为新的 Web 应用程序使用单一的单体代码库,这些代码库现在将替换多个遗留组件,同时又不想以我们以前的方式结束:具有不同用途的各种应用程序和工具、兼容性、编写的技术等。
具体来说,我们有几个设计疑惑:
我们是否将应用程序分解为几个相当独立的 Web 应用程序(模块)并基于我们自己的 SSO 服务器来提供授权和身份验证?我们确实希望为用户提供无缝体验,尤其是可以访问几乎所有模块的高级用户。因此,一个“门户”是必不可少的。
我们是选择多租户数据库,还是使用 Azure 弹性数据库池并在 SaaS 环境中每个租户拥有一个数据库?
分发:该套件的安装相当复杂,并且基于 .NET 框架(而不是 .NET 核心),MS 许可根本无法提供提供设备的好方法。安装程序是 1990 年的。Docker 并不是本地安装的真正选择。
【问题讨论】:
-
对于#1,查看微服务架构。 #2,如果你需要支持它,你应该从一开始就设计多租户,包括在你的应用层/服务合同中。
-
感谢@AlwaysLearning,我正在关注微服务。
标签: .net azure architecture software-design