【问题标题】:Best solution for client - server architecture客户端-服务器架构的最佳解决方案
【发布时间】:2021-07-27 17:15:43
【问题描述】:

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

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

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

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

【问题讨论】:

  • 对于算法的托管位置,您有哪些限制(如果有)?例如。 *aaS 可以吗?还是您想在本地托管?
  • 不,我可以托管在任何云服务器中。

标签: python architecture client-server desktop


【解决方案1】:

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

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

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

基本架构

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

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

在上图中,我假设:

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

生产架构

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

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

说明:

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

【讨论】:

  • 谢谢@adrian。那是详细的解释。我将对此进行更多探索。
  • 以上建议非常有用。
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2012-11-02
  • 1970-01-01
  • 2010-12-04
相关资源
最近更新 更多