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

Best solution for client - server architecture

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

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

由于安全问题,我不想让我的核心算法暴露在客户端。因为它是用 python 编写的,所以想把它放在服务器中,我的 Winform 应用程序 (C#.net) 可以通过某种方式连接到服务器。

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

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

公开您的算法

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

Quickstart:在 Azure 中使用 Python 使用 Visual Studio 代码

创建函数

基本架构

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

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

在上图中,我假设:

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

生产架构

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

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

描述:

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