DigitalOcean 应用托管更新:应用端到端运行时性能大幅改进

DigitalOcean 希望可以为企业提供所需的工具和基础设施,以帮助企业客户加速云端的开发,实现业务的指数级增长。为此 DigitalOcean 在 2020 年就推出了App Platform。

App Platform(应用托管) 是一个完全托管的 PaaS 解决方案,非常适合小规模应用开发和部署,或是专注于 Web 应用开发且不熟悉底层部署的开发者。开发者使用 App Platform 时,只需关联 Github 仓库或提前构建的容器镜像,App Platform 将承担管理基础设施、应用程序运行时和依赖项的所有繁重工作,让开发者无需设置底层基础设施,降低了开发的复杂性。App Platform 支持许多流行的语言和框架,如Node.js、Python、Django、Go、PHP、Laravel、React、Ruby、Ruby on Rails、Gatsby、Hugo、静态网站和Docker。

近期,为了提高 App Platform 的效率,我们已经将所有应用程序迁移到了一个新升级的基础设施上,这包括对运行时性能的大幅改进。接下来,将介绍我们如何实现 gVisor(沙箱运行时环境) 的最新版本,并分享我们的性能测试结果。

gVisor 的增强

App Platform 是 DigitalOcean 的 PaaS 平台。App Platform 的核心目标之一是用户无需担心底层基础设施,并保证基础设施始终处于最新状态。这就是我们的工作! App Platform 协同工作的多个构建块,可以为用户提供了简单部署的体验。其中一个构建模块就是 Google 的 gVisor 容器运行时,它有助于我们安全、密集地将应用程序打包在同一主机上。

然而,gVisor 增加的安全性机制会带来一定的代价。其核心原则之一就是拦截应用程序的系统调用(syscalls),并在 gVisor 而不是内核中处理这些系统调用。这种通过 ptrace 实现的拦截会带来很大的开销。为了解决这个问题,谷歌发布了一种新的系统调用拦截方法,名为 systrap。这一新平台极大地减少了 gVisor 处理系统调用的开销,从而提高了大多数应用的性能。一般来讲,只要你的应用和业务不是与 CPU 负载重度绑定的,都能从这项改进中受益。

为了更直观地展示改进效果,我们测量了端到端(如你的用户所能观察到的)吞吐量,针对一个最小的 Node.js 应用(它的网络是受限的),以及一个 WordPress 应用(循环使用不同的主题)。之所以选择 WordPress 应用,是因为PHP 应用的性能受到 gVisor 沙箱的影响非常明显。这是因为运行 PHP 应用会出现大量文件操作,以及循环使用不同的主题,让它可以成为一个很典型的极端测试。

上图清楚地展示了新版本 gVisor 及其 systrap 平台带来的改进效果。结果是基本 Node.js 应用的吞吐量提高了两倍多,WordPress 应用的吞吐量提高了七倍多。根据你应用程序的特性,优化效果可能比我们的结果更明显,也可能不那么明显.我们的这些测试结果,可以作为 Google 在其 systrap 公告中的指标的另一份参考。

注:本文中的测试基准吞吐量数据,基于DigitalOcean的内部测试框架和参数得出,使用了具有 2 个专用 vCPU 的应用程序。实际性能数字可能会因系统配置、操作环境和工作负载类型等各种因素而异。

安全发布上线

在我们的测试中,我们发现 gVisor 与我们一直在使用的旧版本相比有一些退步。其中一些是与应用程序应有的行为不兼容,另一些是平台本身的问题。我们与 gVisor 团队建立了紧密的反馈改进机制,收集了我们所看到问题的必要信息,以确定它们的根本原因,并迅速修复。我们非常感谢 gVisor 团队的快速响应和他们在解决这些问题方面的快速支持。

进行这样的平台级改进并非没有风险,对我们来说,进行此类改进时不干扰或破坏用户的应用至关重要。我们所有的地区有将近 60 个集群需要安全升级。因此,我们采取了一种缓慢的、基于金丝雀的方法,在集群群中逐步实现这一更改。gVisor 更新是我们整个栈的整体更新的一部分,其它还包括新的 Linux 内核和 Kubernetes 版本等。我们没有选择对现有集群进行就地升级,而是创建了新的集群,并逐渐启用应用程序部署到它们上面。一旦被认为稳定,我们开始创建旧集群的替代集群,并将应用程序从旧集群迁移到新集群。这个过程现在已经完成,所有应用程序都在新集群上运行。

来尝试改进后的 App Platform 性能吧!

如果你之前在 App Platform 上的应用程序性能有明显问题,请考虑再试一次。我们已经从很多客户那里得到了正向的反馈,他们在这次版本更新过程的早期迁移了应用程序,他们表示自己遇到的性能问题已经在将应用程序移动到新基础设施后,得到了解决。

试试看!登录你在云控制台的App Platform账户,或者通过创建 DigitalOcean 账户,来体验一下更新后的 App Platform。如果你希望咨询更多云服务方案,或希望从其它云服务迁移到 DigitalOcean,可访问DigitalOcean 中国独家战略合作伙伴卓普云官网与我们的技术售前团队咨询、沟通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu下使用docker安装kafka

1.先安装zookeeper docker run -d --restartalways -e ALLOW_ANONYMOUS_LOGINyes --log-driver json-file --log-opt max-size100m --log-opt max-file2 --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime bitnami/zookeeper:latest 2.安装kafka docker run…

Docker 的 Ubuntu 操作系统镜像

Debian 和 Ubuntu 都是目前较为流行的 Debian 系列 的服务器操作系统,十分适合研发场景。 Debian 和 Ubuntu 属于同一系列的发行版。Debian 是由 Ian Murdock 在 1993 年创建的最初的发行版。Ubuntu 是 Mark Shuttleworth 在 2004 年基于 Debian 创建的发行版。 Li…

2024 National Invitational of CCPC (Zhengzhou)(CCPC郑州邀请赛暨CCPC河南省赛)

2024 National Invitational of CCPC (Zhengzhou) 2024CCPC郑州邀请赛暨CCPC河南省赛 2024 National Invitational of CCPC (Zhengzhou) B. 扫雷 1 题意:扫n轮雷,每轮开始获得一枚扫雷币,可保存,从第一轮开始,可以…

27.C++的类型转换(介绍了static_cast、reinterpret_cast、const_cast、dynamic_cast的用法)

1. C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型转换…

JavaScript中的call、apply和bind方法(2)

JavaScript中的call、apply和bind方法是用于改变函数执行上下文和预先设置参数的强大工具。它们在编写可维护和优雅的代码时起到了重要的作用。本文将介绍这些方法的原理和使用场景,并展示如何将它们应用于你的代码中,使其更加漂亮。 call方法的原理和使…

STM32 CANFD 基础知识留档

讲得比较细的文章但可能有问题自行判定 附1 附2 前言 CAN2.0 协议中数据段波特率和仲裁段波特率默认是一致,因此只需要关注传输波特率即可 CANFD 协议是向下兼容 CAN2.0 的数据通讯,因此实际使用中需要配置 STM32H7 系列支持的标准是 Compliant with …

大语言模型中上下文长度扩展技术的内容、原因和方式-综述

24年1月阿联酋科技创新研究院、孟加拉国伊斯兰科技大学、斯坦福大学、亚马逊公司和南卡大学AI研究院的论文“The What, Why, and How of Context Length Extension Techniques in Large Language Models – A Detailed Survey“。 LLM通常面临上下文长度外推方面的限制。 理解…

C++11 线程池:轻量级高并发解决方案

C11 线程池:轻量级高并发解决方案 线程池(Thread Pool)是一种线程管理的机制,它包含了多个预先创建的线程,用于执行多个任务,这些任务被放入任务队列中等待执行。 满足我们的生产者和消费者模型。 线程…

一文带你快速了解GPT-4o!内含免费使用指南!

一、GPT-4o简介 北京时间5月14日,OpenAI举行春季发布会。OpenAI在活动中发布了新旗舰模型“GPT-4o”!据OpenAI首席技术官穆里穆拉蒂(Muri Murati)介绍,GPT-4o在继承GPT-4强大智能的同时,进一步提升了文本、…

常用限流方式

1. 令牌桶算法(Token Bucket) 令牌桶算法是一种常用的限流算法,它通过维护一个固定容量的令牌桶,以限制单位时间内通过的请求数量。当请求到达时,会从令牌桶中获取一个令牌,如果令牌桶中没有令牌&#xff…

如何使用Python进行网页爬取

Python爬虫案例可以有很多种,但我会为你提供一个简单的案例,该案例使用Python的requests库来爬取一个网页的内容,并使用BeautifulSoup库来解析HTML并提取特定的信息。 假设我们要从某个新闻网站(例如:示例网站&#x…

电力场景设备漏油检测数据集VOC+YOLO格式338张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):338 标注数量(xml文件个数):338 标注数量(txt文件个数):338 标注类别…

第N1周:one-hot编码

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 1.什么是one-hot编码 One-Hot编码是一种常用于机器学习中的特征编码方式&#xff0c…

Qt---项目的创建及运行

一、创建第一个Qt程序 1. 点击创建项目后,选择项目路径以及给项目起名称 名称:不能有中文、不能有空格 路径:不能有中文路径 2. 默认创建有窗口类myWidget,基类有三种选择:QWidget、QMainWindow、QDialog 3. m…

Redis为什么快

用了那么久的redis,突然意识到这个问题答不上来,只知道内存数据库,内存的读写性能快于磁盘。 1. 内存存储 Redis 是一个基于内存的数据库,它将所有的数据都保存在内存中,这使得读取的速度非常快。内存读写速度远超于…

#自学习# 记一次py脚本打开浏览器页面

在项目总结中,遇到系统后台利用浏览器拉起一个已知路径页面的需求,趁着机会整理下。实现起来比较简单,浏览器默认谷歌。 一、技术原理 Selenium:Selenium 是一个用于自动化 Web 浏览器的工具,可模拟用户在浏览器中的各…

socket接口定义范围及操作

Socket接口,也称为套接字接口,是用于实现网络通信的一种编程接口。它定义了一系列的操作和函数,允许应用程序通过网络进行数据传输。 Socket接口不仅仅局限于特定的操作系统或网络协议,而是在多种网络环境中通用,包括但…

Python面试题【数据结构和算法部分101-130】

Python面试题【数据结构和算法部分101-130】 Python面试题【数据结构和算法部分101-130】 Python面试题【数据结构和算法部分101-130】 问题:如何在Python中实现二分查找? 答案: def binary_search(arr, target):low, high 0, len(arr) - 1…

奔向光明阿波罗(五)

下半场的艰难曙光 有“中国无人驾驶黄埔军校”之称的百度,最初的雄心是给未来的智能汽车安上一颗“百度之心”,取得类似于“Intel Inside“的品牌强强联合效果。阿波罗希望为汽车行业的玩家提供一个“开放、完整、安全”的开源平台,帮助他们结…

正则表达式中的$分组使用示例

正则表达式中的 $ 符号通常用于表示字符串的结束位置,但当你在替换操作或者某些特殊上下文中提到 $ 后跟数字(如 $1, $2, etc.),这并不表示结束位置,而是引用之前正则表达式捕获组的内容。 以下是使用 $ 引用捕获组的…