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

news2024/11/25 20:38:20

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.coloradmin.cn/o/1648866.html

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

相关文章

如何自己快速的制作流程图?6个软件教你快速进行流程图制作

如何自己快速的制作流程图?6个软件教你快速进行流程图制作 自己制作流程图可以是项目管理、流程设计或教学展示中的重要环节。以下是六款常用的流程图制作软件,它们都提供了快速、简单的方式来制作流程图: 迅捷画图:这是一款非…

Java基础(三):Java异常机制以及底层实现原理

🌷一、异常 ☘️1.1 什么是异常 Java异常是程序发生错误的一种处理机制,异常的顶级类是Throwable,Throwable字面意思就是可抛出的,该类是所有的错误和异常的超类,只有Throwable类或者Throwable子类的实例对象才可以被…

超详细——集成学习——Adaboost实现多分类——附代码

资料参考 1.【集成学习】boosting与bagging_哔哩哔哩_bilibili 集成学习——boosting与bagging 强学习器:效果好,模型复杂 弱学习器:效果不是很好,模型简单 优点 集成学习通过将多个学习器进行结合,常可获得比单一…

Xinstall广告效果监测,助力广告主优化投放策略

在移动互联网时代,APP推广已成为企业营销的重要手段。然而,如何衡量推广效果,了解用户来源,优化投放策略,一直是广告主和开发者面临的难题。这时,Xinstall作为国内专业的App全渠道统计服务商,以…

TCP四次挥手分析

TCP四次挥手分析 概念过程分析为什么连接的时候是三次握手,关闭的时候却是四次握手?为什么要等待2MSL? 概念 四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。 在…

有关string的部分接口

1.迭代器与反向迭代器(iterator-) 迭代器是可以用来访问string里面的内容的,这里来记录一下使用的方法。 里面用到了一个叫做begin函数和一个end函数,这两个都是针对string使用的函数。 s1.begin()函数是指向string内容的第一个元素 而s1.end()指向的则…

「新媒体营销必备」短链接生成,让你的内容更易传播!

在信息大爆炸的今天,无论是企业还是个人都需要有一个快速有效的方式让信息传播。而短链接生成的出现,为我们带来了极大的便利。 C1N短网址(c1n.cn)是一家致力于为用户提供快速、安全的短链接服务的公司。作为专注于短链接的品牌&…

Windows Server 2019虚拟机安装

目录 第一步、准备工作 第二步、部署虚拟机 第三步、 Windows Server 2019系统启动配置 第一步、准备工作 下载Windows Server 2019系统镜像 官网下载地址:Windows Server 2019 | Microsoft Evaluation Center VMware Workstation 17下载地址: 链…

阿里云国际服(alibabacloud)介绍、注册、购买教程?

一、什么是阿里云国际版? 阿里云分为国内版和国际版。国内版仅面向中国大陆客户,国际版面向全球客户。 二、国际版与国内版有何异同? 1)异:除了目标客户不同,运营主体不同,所需遵守的法律与政…

暗区突围pc端下载教程 暗区突围pc端怎么下载

暗区突围pc端下载教程 暗区突围pc端怎么下载 《暗区突围》是一款刺激的第一人称射击游戏。目前pc版本要上线了,即将在5月正式上线。在这款游戏里,我们会在随机的时间、地点,拿着不一定的装备,跟其他玩家拼个高低,还需…

(十六)Servlet教程——Servlet文件下载

Servlet文件下载 文件下载是将服务器上的资源下载到本地,可以通过两种方式来下载服务器上的资源。第一种是使用超链接来下载,第二种是通过代码来下载。 超链接下载 在HTML或者JSP页面中使用超链接时,可以实现页面之间的跳转,但是…

开发环境虚拟环境学习记录

1、VS Code搭建python环境 下载好Visual Studio Code后,首先需要进入Visual Studio Code并安装支持python开发的插件: 2、虚拟环境 2.1、初识虚拟环境 概述:①、在使用Python语言的时候我们使用pip来安装第三方包,但是由于pip的…

Leetcode—138. 随机链表的复制【中等】

2024每日刷题(129) Leetcode—138. 随机链表的复制 实现代码 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRan…

Linux动态库与静态库解析

文章目录 一、引言二、C/C源文件的编译过程三、静态库1、静态库的定义和原理2、静态库的优缺点3、静态库的创建和使用a、创建静态库b、使用静态库 四、动态库1、动态库的定义和原理2、动态库的优缺点3、动态库的创建和使用示例a、创建动态库b、使用动态库 五、动静态库的比较 一…

【Python小技巧】matplotlib不显示图像竟是numpy惹的祸

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、问题:df.plot() 显示不出图像二、尝试各种解决办法1. 增加matplotlib.use,设定GUI2. 升级matplotlib版本 三、numpy是个重要的库1. …

详解MySQL常用的数据类型

前言 MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。本文将详细介绍MySQL中的数据类型,包括数值类型、字符…

算法分析 KMP算法中next值的计算、0/1背包问题

5.6.1 KMP算法中next值的计算 设模式的长度为m。用蛮力法求解 KMP算法中的 next值时&#xff0c;next[0]可直接给出&#xff0c;计算next[j](1<j<m-1)则需要在 T[0] …T[j-1]中分别取长度为j-1、..、2、1的真前缀和真后缀并比较是否相等&#xff0c;最坏情况下的时间代价…

2024------MySQL数据库基础知识点总结

-- 最好的选择不是最明智的&#xff0c;而是最勇敢的&#xff0c;最能体现我们真实意愿的选择。 MySQL数据库基础知识点总结 一、概念 数据库&#xff1a;DataBase&#xff0c;简称DB。按照一定格式存储数据的一些文件的组合顾名思义: 存储数据的仓库&#xff0c;实际上就是一…

Java初识继承

继承 文章目录 继承为什么需要继承继承中变量的访问特点继承中方法的访问特点继承的优缺点 概念:在Java中&#xff0c;继承是面向对象编程的一个基本特性。它允许我们定义一个新类&#xff0c;它从另一个已经存在的类继承其属性和方法。被继承的类称为父类或超类&#xff0c;新…

Linux进程——Linux进程与进程优先级

前言&#xff1a;在上一篇了解完一部分常见的进程状态后&#xff0c;我们先来把剩下的进程状态了解一下&#xff0c;再来进入进程优先级的学习&#xff01; 如果对前面Linux进程不太熟悉可以先阅读&#xff1a; Linux进程 本篇主要内容&#xff1a; 僵尸进程和孤儿进程 Linux进…