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文件变得更加容易)可能是有意义的。
- 为什么受影响的行在更新/删除成功时返回0?
- Nodejs二进制httpstream
- 在Express.js中,我将如何编写一个路由/正则expression式来捕获所有美国州?
- client-sessions nodejs / Express – 错误:无法设置未定义的属性“mydata”
- Node.js + Angular = Uncaught ReferenceError:require没有被定义
- nodejs – 我发现multithreading或使用多个进程比单个进程慢。 为什么?
- expressjs支持方法删除,并放在没有方法覆盖
- Passport.js twitter身份validation导致500错误,req.session未定义
- Node.js上的RegExp会导致不确定的模式