Google Cloud函数中APIdevise的最佳方法?

最终的期望结果是资源利用率较低的性能更高的系统。 我想连接一个SQL数据库云function,并承载一个pf api的。

这里有两个select…

备选scheme:我们将每个API作为独立的云function托pipe。

const functions = require('firebase-functions'); exports.helloFunc1 = functions.https.onRequest(function (request, response){ response.send("Hello from Func1!"); }); exports.helloFunc2 = functions.https.onRequest(function (request, response){ response.send("Hello from Func2!"); }); 

备选scheme二:我们主持一个具有内部路由的云端function。

 const functions = require('firebase-functions'); const express = require('express'); const router = new express.Router(); var app = express(); var helloFunc1 = function (request, response){ // After some DB OPS response.send("Hello from Func1!"); }; var helloFunc2 = function (request, response){ // After some DB OPS response.send("Hello from Func2!"); }; router.get('/helloFunc1',helloFunc1); router.get('/helloFunc2',helloFunc2); exports.root = functions.https.onRequest(router); 

帮助我理解这两种方法之间的权衡和任何devise中的任何优点/缺点。

作为分析的一部分,请考虑数据库连接池。 如果我们使用firebase或数据存储,这不会是一个决定性因素,但对于本机SQL数据库,我假设很多连接会影响性能时,这是自动缩放。

编辑#1

这是一个简单的例子,但实际上这个含义可能更多。 正在使用一个提供附加function的框架,比如ORM和共享模型,AUTH中间件,configuration方法上的一般约定,还是一个无服务器环境中的真正选项 因为我们知道这些框架被devise成在一个永远在线的服务器上运行。 一般而言,ORM的框架和框架将如何被抢占, 它将如何影响性能?

PS。 我是Node和Express的新手。

部署单独的function

  • 您可以单独跟踪执行计数并在控制台中更轻松地进行日志过滤。
  • 这些function是相互独立的,如果你有一些具有重量级计算/内存需求的端点,而另一些端点则不需要,这可能是理想的。
  • 如果每个function都处于空闲状态,每个function都将有自己的“冷启动”,所以如果您的terminal具有不均匀的使用情况分配,则很可能会遇到冷启动。

部署一个快速应用程序

  • 在控制台中,所有的东西都可以一起使用,您可以自己来跟踪各个端点的使用情况,并能够在日志中进行适当的过滤。
  • 单一function一起缩放。
  • 只有一个“冷启动”可以让你担心,所以任何打你的API的人都会把所有的function都保留在未来的执行阶段。

目前我可能会build议部署一个快速应用程序,主要是为了获得冷启动减less的优势。 但是,如果你的一些terminal具有非常不同的内存/ CPUconfiguration文件,将它们分离到自己的云function(特别是一旦调整通过Firebase部署的function的CPU /内存configuration文件变得更加容易)可能是有意义的。