Google Cloud功能中Api设计的最佳方法?

时间:2017-04-06 19:50:59

标签: mysql node.js express firebase google-cloud-functions

最终期望的结果是性能更高的系统,资源利用率更低。我想将一个sql数据库连接到云函数并托管一组pf api&#39。s。

以下是两种选择......

替代方案: 我们将每个api作为单独的云功能托管。

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!");
});

备选方案二: 我们拥有一个内部路由的云功能。

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);

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

另外,请将数据库连接池视为分析的一部分。如果我们使用firebase或数据存储区,这不会是决定因素,但对于本机SQL数据库,我假设在自动缩放时,大量连接会影响性能。

编辑#1

这是一个基本的例子,但实际上其含义可能更多。正在使用提供其他功能的框架,如ORM和共享模型,AUTH中间件,一般约定优于配置方法,是无服务器环境中的真正选项吗? 因为我们知道这些框架设计为在一个永远在线的服务器上运行。 ORM& amp;框架一般涉及被抢占和它将如何影响绩效?

PS。我是Node和Express的新手。

1 个答案:

答案 0 :(得分:1)

部署单个职能

  • 您可以在控制台中单独跟踪执行计数和更轻松的日志过滤。
  • 这些功能可以相互独立地扩展,如果你有一些具有重量级计算/内存需求的端点而另一些端点没有,那么它们可能是理想的。
  • 如果空闲时,每个功能都有自己的“冷启动”,所以如果你的终端使用分布不均匀,你就更有可能遇到冷启动。

部署Express App

  • 在控制台中,所有内容都会混合在一起,您可以自行跟踪各个终端的使用情况,并能够在日志中进行适当的过滤。
  • 单一功能可以一起扩展。
  • 只有一个“冷启动”需要担心,因此任何人都可以使用所有功能“保持温暖”以备将来执行。

暂时我可能会建议部署Express应用程序,主要是为了获得冷启动减少的优势。但是,如果您的某些端点具有非常不同的内存/ CPU配置文件,则将它们分离到自己的云功能中可能是有意义的(特别是一旦调整通过Firebase部署的功能的CPU /内存配置文件变得更容易)。