云 运行 构建 API 最佳实践

Cloud Run Structuring an API Best Practice

我正在为具有许多子功能的大型应用程序设计一个 API,我想知道将它部署在云端 运行 并将其与新的应用程序一起使用的最佳实践是什么API 网关。

例如,假设我有多个具有多种功能的模块,我将以书店应用程序为例:

admin - 创建用户

admin - 删除用户

admin - 获取用户详细信息

书籍 - 创建书籍

图书 - 获取图书

图书 - 删除图书

用户 - 添加到购物车

用户 - 从购物车中删除

用户 - 提交新投诉

用户 - 结帐

在这种情况下,最好的做法是将每个功能部署为单独的云 运行 部署,还是我应该部署 3 个单独的云 运行 部署,例如管理、书籍和用户各有各的功能。或者我应该在 1 个大型部署中部署所有这些,并在我的烧瓶应用程序中指定端点?

这些方法的优缺点是什么?

在idea中,你有3个服务:Admin、Book和User。不要为每个端点创建一个函数。

现在,您的问题取决于很多因素,我认为您的问题将被关闭。但是,我可以简单地建议您搜索单体和微服务之间的区别。

微服务独立扩展并允许更好的发布周期(每个团队各司其职,并独立交付)。然而,这种架构意味着服务到服务的通信(监控 -> Istio 为此很受欢迎!)、延迟、集成测试复杂性……

如果收益不超过问题,则更喜欢单体架构(即 3 种服务只有一种云 运行 服务)。特别是如果它是开发所有服务的同一个团队,并且如果您不需要独立扩展。

您的问题是基于个人意见的,因此 Stack Overflow 不适合讨论这个问题。 (我个人投票关闭,原因:“基于意见”。)

同样,这不是云 运行(甚至 GCP)问题,您的问题可以概括为“运行 API 端点作为单独服务的好处是什么” .

围绕这个问题的讨论可以有几十个论点,首先想到的一些是:

  • 如果您需要通过部署单个应用程序来完全加速服务,那么分离是个坏主意
  • 如果不同的端点有不同的团队、不同的部署节奏或用不同的语言编写,那么分开是个好主意
  • 如果它们依赖大量本应位于同一本地内存中的缓存状态,那么将它们分开是个坏主意
  • 如果端点有不同的扩展需求(例如,/foo 以 2 qps 调用,而 /bar 是 10k qps),那么分开是个好主意,这样您就可以独立部署它们或考虑 rewriting/refactoring 不同的端点。