Google 的 Serverless 产品对比:Cloud Run、Cloud Functions、App Engine

Stella981
• 阅读 932

Google 的 Serverless 产品对比:Cloud Run、Cloud Functions、App Engine

来源:https://www.splunk.com/en\_us/blog/devops/gcp-serverless-comparison.html

作者:Splunk

译者:donghui

本文来源: ServerlessLife 公众号

Serverless 平台的主要优点是,它们使您可以专注于编写代码,而不必关心管理基础结构,自动扩容或为所用资源支付更多费用。

这使得 Serverless 计算非常适合以下用例:

  • 无状态 HTTP 应用程序
  • Web 和移动后端
  • 实时的或事件驱动的数据处理

Cloud Run、Cloud Functions 和 App Engine 都是 Google Cloud 提供的 Serverless 平台,但是它们之间有细微差别,在某些情况下某个平台可能会比其他平台更受欢迎。

Google Cloud Run:Serverless 容器

Cloud Run 由 Knative 构建, 是 Google 最新的 Serverless 产品。其他 Serverless 平台使用事件驱动函数作为部署的主要单元,而 Cloud Run 使您可以将代码打包在无状态容器中,然后通过 HTTP 请求调用它。

在 Google 完全托管环境中部署 Cloud Run 容器可为开发人员提供 Serverless 的通常优势(无需管理基础架构,按使用付费,更容易自动缩放),还支持任意数量的编程语言、库或系统二进制文件。Cloud Run 还可以在 Google Kubernetes Engine(GKE)上部署容器,并能够为后一种场景的 Serverless 容器专门配置硬件需求。

有了这种灵活性,Cloud Run 的用户可以使用他们已经用来在 Google Cloud 上打包和运行容器的工具轻松地运行 Serverless 工作负载,或者将有状态和无状态工作负载一起部署。

Google Cloud Functions: Serverless 函数

尽管 Cloud Run 接受容器并通过 HTTP 请求来调用,但 Cloud Functions 仍然是 Google 的事件驱动型 Serverless 平台。与打包在 Docker 容器中不同,您需要将代码部署为函数。Google 支持编写 Cloud Functions,因此也可以通过 HTTP 请求调用它们,或将其设置为根据后台事件触发。

def hello_get(request):

    """HTTP Cloud Function.

    Args:

        request (flask.Request): The request object.

        <http://flask.pocoo.org/docs/1.0/api/#flask.Request>

    Returns:

        The response text, or any set of values that can be turned into a

        Response object using `make_response`

        <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>.

    """ 

return 'Hello World!'

Cloud Functions 对代码的部署方式施加了更多限制(显然易见,您需要将其打包为一个函数),并且仅支持一组特定的语言(您可以使用 JavaScript、Node.js、Python 3,或 Go 运行时),但可以使用您的云环境中的事件触发功能。

Google App Engine: Serverless 应用

App Engine 是 Google 针对 Web 和 API 后端的完全托管的 Serverless 应用程序平台。尽管 Serverless 函数使您可以轻松地运行轻量级和独立的函数,但使用 Cloud Functions 运行更复杂的应用程序可能会很困难。对于想要构建具有多种功能的 Serverless 应用程序或保留超出单个请求范围的某种程度的上下文的开发人员,Google App Engine 提供了一种引人注目的选择。

在 Google App Engine 中,您只需获取代码并将其部署到 Google 上,然后为您消耗的资源付费-这在 App Engine 上作为包含一个或多个服务的单个资源运行。对于每种服务,您都可以部署该服务的一个或多个版本,这些版本又可以在一个或多个实例中运行,具体取决于每个版本处理的流量。

Google 的 Serverless 产品对比:Cloud Run、Cloud Functions、App Engine

如上所示,使用单个命令从您的应用程序目录在 Google App Engine 上部署 Hello World。

根据您的特定需求,您可以在两种类型的 App Engine 环境中选择一种来运行代码。如果您要运行需要快速扩容的应用程序,并且使用 App Engine 支持的特定语言版本编写,那么 Google 建议您使用标准环境。对于具有更稳定流量的应用程序,使用自定义运行时或不受支持的编程语言在 Docker 容器中运行,或者要访问在运行在 Compute Engine 上的 Google Platform 项目的其他部分,请使用 App Engine 灵活环境。

在 Cloud Run、Cloud Functions 和 App Engine 之间进行选择

通常,Serverless 平台最好用于构建无状态应用程序,并且无需管理基础架构。一些示例包括:

  • 快速制作功能原型
  • 快速自动缩放 Web 应用程序
  • 为了响应后台事件执行一个任务

在确定哪种 Serverless 平台最适合您时,请记住以下几点:

  • 如果您已经将代码打包在 Docker 容器中或正在 Google Cloud 中运行 Kubernetes 集群,请针对您的 Serverless 工作负载考虑使用 Cloud Run 或 Knative。
  • 对于运行响应实时事件的代码,或在不使用容器的情况下处理请求,请使用 Cloud Functions。
  • 如果您需要在一个地方放置多个函数并且只想部署整个应用程序,请使用 App Engine。
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这