如果我把多个函数放在一个云函数中,使其实例的寿命达到最大值,并且我将不得不处理一次冷启动,该怎么办?
为什么这是个坏主意
export const shop = functions.https.onCall(async (data, context) => {
switch (data.type) {
case "get_fruits":
return await getFruits();
case "place_order":
return await placeOrder();
case "add_to_cart":
return await addToCart();
default:
return;
}
});
它会起作用,但IMO,这不是一件好事。目前存在许多原则和模式,但您没有强制执行您的解决方案。
微服务
其中之一就是微服务的拆分。构建一个整体没有问题,但当我看到您的示例(get_fruit、place_order、add_to_art(时,我看到了不同的角色和职责。我喜欢关注的分离:一个服务做一件事。
路由
但是,也许您的服务只是独立部署的路由和调用功能的服务(并且您强制执行微服务原则(。如果是这样的话,如果存在大量条目和大量查询,那么您的服务可能会成为瓶颈。
此外,还有专门用于路由的服务:负载均衡器。他们使用请求的URL路径,并到达正确的微服务为其提供
开发者使用
是的,是URL,而不是邮件正文中用于路由流量的字段。今天,开发人员已经熟悉REST API。为了获得水果,他们对/fruit
URL执行get请求,并且他们知道他们将获得水果。如果他们想添加到购物车中,他们会对/cart
URL执行POST请求,这很有效!
您使用URL、标准REST定义、负载均衡器和微服务。
你可以想象其他好处:
- 每个微服务都可以独立扩展(你可以有更多的get_fuit请求而不是place_order,服务的规模不同(
- 安全性更容易控制(没有获取目录(水果(的安全性(,但您必须通过身份验证才能下订单
- 演进速度可以在服务之间解耦