Cloud Run min实例:最小化无服务器的冷启动

2023-11-01

图片

作者:Kelsey Hightower;Vinod Ramachandran

无服务器最为优异的一点在于其按需付费的操作模型,可以让用户将服务规模缩减为零。但是对于某些应用程序来说,无服务器对于他们来说没那么重要的原因也在于其模型可以按需缩减为零。这是因为对于这些应用来说,一旦服务器的规模缩减为零,再次唤醒是的第一个操作请求很有可能会被延迟,这也是很多人常说的“启动税”。所谓的“启动税”对于无服务器来说很新颖的一个词语,顾名思义,如果应用程序没有收到流量,那么就没有服务器在运行。 

 

不久前,谷歌对外宣布Cloud Run(托管无服务器计算平台)的min实例,这项重要的新功能可以极大地提高应用程序的性能。可以让那些对延迟非常敏感的应用程序也能够从Cloud Run上获益,至于如何获益,下文我们将深入介绍。

减少冷启动

通过使用Cloud Run min实例,用户可以配置一组数量最小、处于待机状态并随时准备提供流量的Cloud Run实例,从而帮助应用减少冷启动而更快的开始服务请求。

要使用Cloud Run的新的min实例功能,只需使用简单的gcloud命令或UI配置Cloud Run服务的min实例数。

$ gcloud beta run deploy --image gcr.io/cloudrun/hello --min-instances=3 helloservice

 

配置完成后,最小实例将准备就绪,随时准备魏应用程序提供服务,从而最大程度地减少了应用程序的冷启动,这样,即使您的应用对延迟非常敏感也可以在Cloud Run上运行。

  • 重用自举逻辑

除了最大程度地减少冷启动,Cloud Run min实例还可以帮助用户减少关键操作的引导时间,例如打开数据库连接或将文件从Cloud Storage加载到内存中。通过减少引导时间,min实例有助于进一步减少请求延迟,因为您只需要运行一次引导逻辑,然后在多个请求中利用它来配置min实例数。

参考下面的golang无服务器功能,该功能说明如何运行一次引导逻辑,并在min实例中重用它:

  • 一次运行引导逻辑,然后在min实例中重复使用

  • package main
    import (      "fmt"    
      "log"    
      "net/http"
     )
     func init() {
       setupDBConnection(dbName)
       }
       
     func handler(w http.ResponseWriter, r *http.Request) {
               fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
        }
      func main() {
          fmt.Println("Processing your serverless request")
          http.HandleFunc("/", handler)
          log.Fatal(http.ListenAndServe(":8080", nil))
       }

     

 

以更低的成本发挥无服务器的优势

除了设置min实例数之外,Cloud Run min实例还允许您使用节流的CPU对其进行配置,因此您可以以更低的成本利用这个功能。这样既可以利用无服务器的效率和成本优势,同时将对延迟敏感的工作负载转移到无服务器。

运行中的Cloud Run min实例

我们讨论了Cloud Run min实例可以带来的好处,以及如何使用该功能,但是它在现实生活中如何工作以及为什么要使用它? 传统上,无服务器平台迎合了从缩放到零受益的应用程序,但是由于引导期间的冷启动延迟而在初始响应时间上做出了一定的权衡。这对于从头开始构建的应用程序是可以接受的,并且可以完全控制源代码及其在运行时的行为。但是,人们需要使用一整类应用程序,而传统的无服务器方法并不适合这些应用程序。

 

可以考虑使用诸如Prometheus之类的自定义控制平面来收集度量,并使用Open Policy Agent(OPA)来制定策略决策。这些控制平面通常需要在初始启动期间进行高级配置并需要一些引导程序,并且不能忍受额外的延迟。 例如,在启动OPA时,通常会从远程源获取策略并将其缓存,以加快将来的策略决策速度。在典型的无服务器环境中,控制平面(例如OPA)在扩展到零并再次备份以处理策略请求时会受到性能影响,因为它位于关键用户事务的请求路径中。Cloud Run min实例可以直接解决这个问题。现在,我们可以确保每个请求将由OPA的“热”实例处理,而不必缩放为零,也不必在每个请求之间重新引导策略引擎。让我们看看实际情况。

在以下部分中,我们将OPA部署为作为中央控制平面运行,并使最小的实例满足我们的性能要求。我们将OPA服务器配置为在运行时从Cloud Storage存储桶中提取策略捆绑包,查询该查包将允许针对“ / health” HTTP路径的http GET请求。

这是OPA政策的例子

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cloud Run min实例:最小化无服务器的冷启动 的相关文章

  • 大数据的分布式SQL查询引擎 -- Presto的详细使用

    Presto Distributed SQL Query Engine for Big Data 官网 项目源码 官方文档 目录 1 Presto 概述 2 概念 2 1 服务进程 2 2 数据源 2 3 查询执行模型 3 整体架构 4 P
  • 2.4 【LaTex】数论符号

    文章目录 同余 向下取整 向上取整 整除 进制 对数 数论的文章 写的人是蛮少的 因为数论好像已经成为民科专用数学 因为数论门槛低 上限高 研究成本低 很多问题至今未解决 所以成为了民科首选 在这篇文章 我不可能介绍所有数论使用的符号 所以
  • 查看gcc/g++默认include路径

    转自 http gcc gnu org ml gcc help 2007 09 msg00205 html gcc print prog name cc1plus v g print prog name cc1plus v 例如 CentO
  • 新安装Android Studio创建项目失败解决方法

    一 梗概 第一次安装Android Studio的时候 因为被墙等原因 Gradle总是出错导一直构建不了项目 Failed to open zip file Gradle s dependency cache may be corrupt

随机推荐

  • Delphi / C ++ Builder / Lazarus报表开发:如何直接从代码中保存BPM / JPEG / TIFF / GIF?

    报表生成器FastReport VCL是用于在软件中集成商务智能的现代解决方案 它提供了可视化模板设计器 可以访问最受欢迎的数据源 报告引擎 预览 将过滤器导出为30多种格式 并可以部署到云 Web 电子邮件和打印中 近日 FastRepo
  • Hexo + GitHub 搭建个人博客(三) Hexo配置

    Hexo 博客配置 你可以 在根目录下 config yml 中 修改大部分的配置 网站 参数 描述 title 网站标题 subtitle 网站副标题 description 网站描述 keywords 网站的关键词 支持多个关键词 au
  • TCP/UDP/Socket 通俗讲解

    1 封包和拆包 封包 就是发送数据前把自己本地需要发送的数据包装一下 即把要发送的原始数据附加上接受者可以辨识到自己身份等一些额外信息 有点像寄一封信 信封上填写的寄件人和收件人以及地址 拆包 是接收到对方封包后发送来的数据后 拆出原始信息
  • c++基础2:使用VS2010 创建最简单的MFC应用程序窗体

    1 添加 新建项目 选择 VISUAL C MFC应用程序 确定 下一步 2 在 应用程序类型 中选择 基于对话框 下一步 3 在 用户界面功能 只选择 粗框架 下一步 4 在 高级功能 取消所有选择 下一步 5 生成的类 点击 完成
  • 用Cmake生成opencv_contrib的python接口

    最近在看opencv的Fisherface Eigenface的部分 但具体实现时发现该库包含在opencv的contrib模块里 这个模块是opencv的扩展库 里面包括很多特征的算法 SIFT SURF Adaboost算法 ml还有神
  • Ubuntu 下命令行创建(删除)文件(夹)

    很多时候我们都会在终端进行文件 文件夹的创建与删除 使用快捷键ctrl alt t 打开终端 创建文件 touch a txt 创建文件夹 mkdir NewFolder 删除文件 rm a txt 删除文件夹 rmdir NewFolde
  • php 格式化 字符串

    private function setStringSubstr str len sublen len string strip tags str string preg replace n is string string preg re
  • CentOS使用 wget 命令报错Temporary failure in name resolution 解决方法

    在CentOS中安装Redis时使用wget下载一个文件出现了如下问题 wget http download redis io releases redis 3 0 7 tar gz failed Temporary failure in
  • 煤矿智能化相关50项团体标准征求意见

    智能化煤矿总体架构 原文地址 https chinacs scimall org cn a3651 html 由煤矿智能化创新联盟等单位提出 中国煤炭学会归口 中煤科工集团常州研究院有限公司等单位起草的 煤矿通信接口与协议通用技术要求 50
  • java中序列化与反序列化_Java中的序列化示例

    java中序列化与反序列化 Serialization in Java is the process of converting an object into bytes stream to save it in file Or we ca
  • 图:最小生成树

    一 最小生成树 1 1 生成树的定义 一个连通图的生成树是 个极小的连通子图 它包含图中全部的n个顶点 但只有构成 棵树的n 1条边 连通图和它相对应的 成树 可以 于解决实际生活中的问题 假设A B C 和 D 为 4 座城市 为了 便
  • window服务器上发布net项目,在windows服务器上使用winsw部署spring boot项目

    简介 springboot项目需要在windows上部署 spring官方推荐使用winsw来将springboot项目作为服务运行 参考 安装使用 winsw的使用比较简单 从github上下载 winsw下载 要下载的文件有两个 1 w
  • 《Kotlin从小白到大牛》第22章:Kotlin I/O与文件管理

    第22章 Kotlin I O与文件管理 Kotlin I O 输入与输出 是基于Java I O流技术 但是Java I O流技术使用起来比较繁琐 Kotlin提供了很多扩展 使代码变得简洁 本章介绍Kotlin I O流和文件管理相关知
  • 使用jstack排查线上故障:高CPU占用

    1 前言 一个应用占用CPU很高 除了确实是计算密集型应用之外 通常原因都是出现了死循环 我们以当时出现的实际故障为例 来介绍怎么定位和解决这类问题 2 排查步骤 思路 找出tomcat 进程中使用CPU最高 时间最长的线程 分析堆栈信息
  • Java中栈的实现(1)-使用顺序存储结构(数组)以及实现

    栈和队列其实是与普通的线性发展而来的 为普通的线性表增加一些特殊的限制就可以得到栈和队列了 从功能上看 栈和队列比普通的线性表功能相对弱一点 但是在特殊的场合下 使用栈和队列更有利 例如 编译器在实现函数的调用的时候需要使用栈来存储断点 实
  • js中apply方法的使用详细解析_宿雪家的小镇_新浪博客

    1 对象的继承 一般的做法是复制 Object extendprototype js的实现方式是 复制代码代码如下 Object extend function destination source for property in sour
  • Android平台实现ping功能方案----避过ping数据构建需要root权限的限制

    PingForAndroid C库采用SOCK DGRAM方式构建icmp包 避开raw socket必须root权限的限制 实现ping功能 Github https github com bgylde PingForAndroid pi
  • linux shell 等待输入_shell中获得用户的输入

    有时我们需要shell脚本有更多的交互性 比如我们安装某个linux命令的时候 会提示 N Y 选择安装或者放弃 这时就需要用到shell的read命令 read命令的基本使用 演示代码如下 其中 n表示字符串输出尾端不换行 还可以直接在r
  • R语言 回归诊断几种方法

    回归诊断技术提供了评价回归模型使用性的必要工具 能帮助发现并且纠正问题 有几种方法进行回归诊断 分别是标准方法 car包中的函数 gvlma函数 建议先通过gvlma函数进行验证 如果违反假设条件 再使用其他方法来判断哪些假设没有满足并进行
  • Cloud Run min实例:最小化无服务器的冷启动

    作者 Kelsey Hightower Vinod Ramachandran 无服务器最为优异的一点在于其按需付费的操作模型 可以让用户将服务规模缩减为零 但是对于某些应用程序来说 无服务器对于他们来说没那么重要的原因也在于其模型可以按需缩