与 gRPC 服务通信的 Web 应用程序的最佳架构是什么?

What is the best architecture for a web-app communicating with a gRPC service?

我用 chess.js 和 java 国际象棋库建立了一个网站,该网站通过 gRPC 和 python 与自定义 C++ 国际象棋引擎通信。我是网络开发新手,尤其是 gRPC,所以我不确定在托管方面我应该采用的架构。

我的问题如下:

采用任何人提供的所有提示和技巧。同样,对网络开发、托管、服务器等完全是新手

NOTE This is an architecture rather than a programming question and discouraged on stack overflow.

网站和 gRPC 服务可能托管在同一台服务器上(就像您在本地所做的那样)。您可以灵活地 运行 在单个更强大的主机上或分别在两个主机上连接两个进程(网站和 gRPC 服务)。

NOTE Although most often gRPC communicates over TCP sockets, it is possible to use UNIX sockets and even buffered memory too.

如果您 运行 这两个进程都在一台主机上,您将需要考虑通过本地主机(127.0.0.1 或环回设备)将网站连接到 gRPC 服务。使用本地主机,网络流量不会离开主机。

如果您 运行 在不同的主机上进行两个进程,则流量必须通过网络传输。这速度较慢,并且在托管时可能会产生费用。

您需要决定是否应将 gRPC 服务暴露给网站以外的任何网络流量。在许多情况下,gRPC 服务用于提供 API 以促进第三方集成。如果您绝对不希望 gRPC 服务被其他东西访问,那么您需要确保它绑定到本地主机(见上文;因此除了其他进程之外的任何东西都无法访问,例如主机上的网站)或防火墙这样就只允许该网站向其发送流量。

您可以找到便宜的虚拟机 (VM) 托管,您可能会考虑在单个 VM 上托管这两个进程,确保您限制所支付的资源并确保流量安全(如上所述).

您不妨考虑将应用程序容器化。在这种情况下,虽然可以 运行 在一个容器中同时处理两个进程,但这被认为不是好的做法。因此,您应该考虑 2 个容器(网站和 gRPC 服务器)。许多托管|云平台提供容器托管,这通常比管理 VM 更容易(因为您不需要修补|更新 OS 和任何依赖项)。如果您能找到一个接受 Docker Compose 描述或 Kubernetes 部署的平台,您可以在其中描述您的服务以及它们如何交互,以便 gRPC 服务只能由网站访问,那可能是理想的。