客户端-服务器架构的最佳解决方案

时间:2021-07-27 17:15:43

标签: python architecture client-server desktop

我有一个应用程序,它有两个逻辑部分。

  1. 用 Python 编写的核心算法专有逻辑。
  2. 桌面上的 Winform 应用程序。

由于安全问题,我不想让我的核心算法在客户端公开。由于它是用python编写的,所以希望将其放在服务器中,并且我的Winform App(C#.net)可以通过某种方式连接到服务器。

请建议一些架构图来实现这一点,以便我可以保护我的核心算法。

1 个答案:

答案 0 :(得分:0)

我能想到的最明显的解决方案是将 Python 算法托管在 *aaS 解决方案上,并通过 API 公开您的算法。

就 Python 的 *aaS 提供商而言,有很多选择,例如Azure Functions 可能是您的一个选择。像 Azure / GCP / AWS 这样的平台的一个优势是它们非常成熟,并且拥有通过 API 公开算法、管理安全性等所需的所有工具。

Quickstart:使用 Visual Studio Code 在 Azure 中使用 Python 创建函数

基本架构

对于整体架构,简单来说,您只需要将您的应用指向公开您的算法的 API。

enter image description here

  • 蓝色元素:您的代码/系统。
  • 绿色元素:*aaS 运行时环境、托管、网络、存储等。

在上图中,我假设:

  • 当您将算法迁移到 *aaS 平台时,您为其创建了一个合适的 API,以便桌面应用程序可以以合理的方式调用它。
  • 您正在使用 Azure Functions 之类的东西(作为运行时),它可用于将算法作为 API 托管,直接暴露给互联网。
  • 您的桌面应用程序有一个层可以巧妙地处理服务访问 - 就像您可能对数据库访问代码所做的那样,因此它不会在您的应用程序中散落。
  • 您有一个配置文件(或某种其他机制),允许应用的操作员指向托管算法的任何位置。

生产架构

上述(简单)架构可以工作,但不是生产级的。

enter image description here

  • 蓝色元素:您的代码/系统。
  • 绿色元素:*aaS 运行时环境、托管、网络、存储等。
  • 红色元素:DNS/网络,可能位于 *aaS 提供商外部或内部(或两者)。

说明:

  • 类似于简单的架构,不同之处在于我们添加了某种 API 网关,以将请求到达 *aaS 平台的位置与您的服务实现分离。这样您就可以在不影响消费者的情况下更换服务实现。合适的 API 网关还将提供更完整的管理和操作功能。
  • DNS,例如www.myawesomepythonalgorithm.net 允许您控制发送到哪个 *aaS 提供商服务流量,假设您想从 Azure 切换到 GCP(并假设服务 URL 结构相同)。
  • 安全!图中未显示,但您可能需要决定如何保护算法免遭未经授权的访问。