Mysql 谷歌云函数中Api设计的最佳方法?

Mysql 谷歌云函数中Api设计的最佳方法?,mysql,node.js,express,firebase,google-cloud-functions,Mysql,Node.js,Express,Firebase,Google Cloud Functions,最终的理想结果是一个性能更高、资源利用率更低的系统。我想将sql数据库连接到云函数,并托管一组pf api 这里有两种选择 备选方案: 我们将每个api作为单独的云函数托管 const functions = require('firebase-functions'); exports.helloFunc1 = functions.https.onRequest(function (request, response){ response.send("Hello from Func1!");

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

这里有两种选择

备选方案: 我们将每个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或datastore,这将不是一个决定因素,但对于本机SQL数据库,我假设在自动扩展时,大量连接将影响性能

编辑#1

这是一个初步的例子,但在现实中,其含义可能更多。使用提供ORM和共享模型等附加功能的框架、用于身份验证的中间件、基于配置的常规方法是否是无服务器环境中的实际选择? 因为我们知道这些框架被设计为在一个总是运行的服务器上运行。ORM和框架通常如何处理被抢占的问题,以及它将如何影响性能?

另外,我不熟悉Node和Express。

部署单个功能
  • 您可以在控制台中单独跟踪执行计数并更轻松地过滤日志
  • 这些函数相互独立扩展,如果您有一些端点需要大量的计算/内存,而其他端点则不需要,这是理想的
  • 如果函数处于空闲状态,则每个函数都有自己的“冷启动”,因此,如果端点的使用率分布不均匀,则更可能遇到冷启动
部署Express应用程序
  • 在控制台中,所有内容都集中在一起,您可以自己跟踪各个端点的使用情况,并能够在日志中进行适当过滤
  • 单个函数可以一起缩放
  • 只有一个“冷启动”需要担心,因此任何访问您的API的人都会为将来的执行保持所有函数的“热启动”

目前,我可能会建议部署一个Express应用程序,主要是为了获得减少冷启动的优势。但是,如果您的一些端点具有非常不同的内存/cpu配置文件,那么将它们分离到自己的云函数中可能是有意义的(尤其是在通过Firebase部署的函数的cpu/内存配置文件变得更容易调整时)。

如果您想通过讨论来权衡意见,堆栈溢出不是一个合适的发布位置。试试firebase talk@DougStevenson,关于函数的使用,我也有同样的困境,但我不在开发者组。我能不能参加这次讨论?或者至少看看讨论的结果?@DougStevenson不是每个人都可以访问开发者小组。我认为这是一个非常有效的查询。这是一个非常糟糕的问题,对不起,我建议您查看express项目(非常确定IBM尚未关闭它),并尝试了解他们的想法。归根结底,这只是一个问题,我是否需要使用express,这不是一个很好的问题。我认为,您应该在这两种方法中增加部署、调试和代码共享的复杂性。在express app中,调试(我指的是本地)和部署函数要容易得多,因为它们就像一个端点,路由将在函数内部。尽管如此,代码共享要容易得多,因为wee可以像通常那样以默认方式包含模块。