精华内容
下载资源
问答
  • 简介:Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS平台,提供了效率更高、成本更优的一站式应用托管方案。零门槛+零改造+零容器基础,即享Serverless+K8s+微服务带来的技术红利。爱奇艺通过使用 SAE 解决...
    简介:Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS平台,提供了效率更高、成本更优的一站式应用托管方案。零门槛+零改造+零容器基础,即享Serverless+K8s+微服务带来的技术红利。爱奇艺通过使用 SAE 解决了体育直播面临的痛点,并且显著提升了直播的业务和效率。

    爱奇艺体育是中国知名的体育赛事平台,提供西甲、网球、高尔夫等赛事直播、视频、新闻等超多精彩内容。作为线上体育赛事综合内容平台,爱奇艺体育的业务特性显而易见,比如定期峰谷、流量激增、频繁更新等,也因为这些业务特点,导致一系列相应问题的产生:


    • 每周都会有定期业务洪峰,面对业务洪峰时每一次都要提前进行容量预估、准备环境、部署应用等繁琐操作,存在大量的重复工作。
    • 面对突然的流量激增,往往需要临时部署应用进行应对,整个流程不仅仅比较耗时,同时影响客户侧的用户体验。
    • 怎样对线上微服务架构做到有效的监控,一直困扰着运维团队。急需一个能够及时发现、定位问题的监控解决方案,这是客户一直期望的。
    • 线上系统资源利用率的有效提升:因客户业务特性,在业务洪峰时需要大量的服务进行支持,在业务稳定期需要及时释放掉部分服务。
    • 系统上线流程需要一套完整的解决方案,每每上线新的版本都需要较为繁琐的配置从而完成灰度、金丝雀发布。


    爱奇艺体育一直在寻找一个简单完美的解决方案,可以使得上述问题一并解决。经过与阿里云技术专家多次沟通,Serverless 应用引擎 SAE 可以解决爱奇艺体育直播面临的痛点,对于直播的业务和效率都有非常显著的提升。


    Serverless 应用引擎 SAE 有什么独特之处?


    Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS 平台,提供了效率更高、成本更优的一站式应用托管方案。零门槛+零改造+零容器基础,即享 Serverless+K8s+ 微服务带来的技术红利。



    SAE 有三个典型应用场景:


    • 微服务架构转型:企业在微服务架构转型时会面临诸多痛点,如微服务或容器化改造技术门槛和维护成本高,稳定性风险大,产品迭代跟不上业务变化,研发效率低。SAE开箱即用,支持 Spring Cloud/Dubbo/HSF 等全套微服务架构升级,平滑迁移,提升业务交付效率;免运维 IaaS 和微服务组件,云平台负责稳定性兜底。


    • Serverless 极致弹性:对于新零售、互娱、文化传媒、餐饮/出行等行业,常常会面临大促活动,大促时容量预估不准,突发流量时系统SLA有风险;波峰波谷特征明显,存在大量闲置浪费。SAE 可以提供精准容量+ 极致弹性 + 限流降级一整套高可用方案,做到灵活启停、提升资源利用率。


    • 企业快速上云/搬站:对于泛互联网、物联网、区块链、供应链等行业,SAE可以助力企业上云/搬站过程中,打通DevOps & 基础产品& 监控产品&高可用产品等,提供一站式开箱即用体验。同时,SAE 提供全托管服务,云产品件集成度高,提升业务交付效率。


    综合来看,SAE 对于企业的价值可以总结为 4 点,那就是:


    • 免运维:帮助用户屏蔽底层 IaaS 和 K8s 细节,专注业务开发;


    • 零改造:微服务应用无缝迁移,war/jar 应用无需容器化改造;


    • 极致效率:提供秒级的弹性效率和极致 Java 应用启动效率;


    • 一站式体验:无缝集成基础服务与微服务生态,客户体验好。


    爱奇艺体育在直播业务中使用 SAE,带来了哪些价值?


    爱奇艺体育的 Serverless 实践


    通过阿里云 Serverless 应用引擎(SAE)的弹性伸缩特性,爱奇艺体育只需要通过简单的配置规则就能够从容面对定期的业务洪峰。同时,SAE提供微服务的生命周期管理功能,使整个部署周期极大简单化,高效化。而内置无缝集成的 ARMS 监控做到端到端的微服务解决方案,能够及时精准的定位问题,使得系统 Bug 无处隐藏,极大提升用户体验。最后,应用高可用 AHAS 从服务降级、熔断、限流方面给出了近乎完美的解决方案。



    • 通过SAE弹性策略解决方案,可以从容应对固定周期的业务洪峰,省去了原来预估资源、部署应用的操作,极大减轻了运维团队的工作量,整体效率提升40%


    • 通过SAE极致弹性的特性,可以做到在面对突增业务流量时的从容应对,无需临时部署应用,极大提升了用户体验。


    • 通过SAE自带的监控解决方案以及与ARMS监控的无缝集成,帮助客户快速、精准定位问题,整体Bug处理速度提升30%。


    • SAE极致扩缩容的背后是极致的资源利用率,帮助客户整体资源利用率提升近50%。


    • 通过SAE平台对微服务生命周期的管理,上线周期缩短达40%


    作者:寻如,阿里云解决方案架构师

    推荐产品

    Serverless应用引擎(SAE)



    原文链接:https://developer.aliyun.com/article/781737?

    版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
    展开全文
  • 简介: Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS平台,提供了效率更高、成本更优的一站式应用托管方案。零门槛+零改造+零容器基础,即享Serverless+K8s+微服务带来的技术红利。爱奇艺通过使用 SAE ...

    简介: Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS平台,提供了效率更高、成本更优的一站式应用托管方案。零门槛+零改造+零容器基础,即享Serverless+K8s+微服务带来的技术红利。爱奇艺通过使用 SAE 解决了体育直播面临的痛点,并且显著提升了直播的业务和效率。

    爱奇艺体育是中国知名的体育赛事平台,提供西甲、网球、高尔夫等赛事直播、视频、新闻等超多精彩内容。作为线上体育赛事综合内容平台,爱奇艺体育的业务特性显而易见,比如定期峰谷、流量激增、频繁更新等,也因为这些业务特点,导致一系列相应问题的产生:

    • 每周都会有定期业务洪峰,面对业务洪峰时每一次都要提前进行容量预估、准备环境、部署应用等繁琐操作,存在大量的重复工作。
    • 面对突然的流量激增,往往需要临时部署应用进行应对,整个流程不仅仅比较耗时,同时影响客户侧的用户体验。
    • 怎样对线上微服务架构做到有效的监控,一直困扰着运维团队。急需一个能够及时发现、定位问题的监控解决方案,这是客户一直期望的。
    • 线上系统资源利用率的有效提升:因客户业务特性,在业务洪峰时需要大量的服务进行支持,在业务稳定期需要及时释放掉部分服务。
    • 系统上线流程需要一套完整的解决方案,每每上线新的版本都需要较为繁琐的配置从而完成灰度、金丝雀发布。

     

    爱奇艺体育一直在寻找一个简单完美的解决方案,可以使得上述问题一并解决。经过与阿里云技术专家多次沟通,Serverless 应用引擎 SAE 可以解决爱奇艺体育直播面临的痛点,对于直播的业务和效率都有非常显著的提升。

     

    Serverless 应用引擎 SAE 有什么独特之处?

     

    Serverless 应用引擎 SAE 是面向应用的 Serverless PaaS 平台,提供了效率更高、成本更优的一站式应用托管方案。零门槛+零改造+零容器基础,即享 Serverless+K8s+ 微服务带来的技术红利。

     

     

    SAE 有三个典型应用场景:

     

    • 微服务架构转型:企业在微服务架构转型时会面临诸多痛点,如微服务或容器化改造技术门槛和维护成本高,稳定性风险大,产品迭代跟不上业务变化,研发效率低。SAE开箱即用,支持 Spring Cloud/Dubbo/HSF 等全套微服务架构升级,平滑迁移,提升业务交付效率;免运维 IaaS 和微服务组件,云平台负责稳定性兜底。

     

    • Serverless 极致弹性:对于新零售、互娱、文化传媒、餐饮/出行等行业,常常会面临大促活动,大促时容量预估不准,突发流量时系统SLA有风险;波峰波谷特征明显,存在大量闲置浪费。SAE 可以提供精准容量+ 极致弹性 + 限流降级一整套高可用方案,做到灵活启停、提升资源利用率。

     

    • 企业快速上云/搬站:对于泛互联网、物联网、区块链、供应链等行业,SAE可以助力企业上云/搬站过程中,打通DevOps & 基础产品& 监控产品&高可用产品等,提供一站式开箱即用体验。同时,SAE 提供全托管服务,云产品件集成度高,提升业务交付效率。

    综合来看,SAE 对于企业的价值可以总结为 4 点,那就是:

     

    • 免运维:帮助用户屏蔽底层 IaaS 和 K8s 细节,专注业务开发;

     

    • 零改造:微服务应用无缝迁移,war/jar 应用无需容器化改造;

     

    • 极致效率:提供秒级的弹性效率和极致 Java 应用启动效率;

     

    • 一站式体验:无缝集成基础服务与微服务生态,客户体验好。

     

    爱奇艺体育在直播业务中使用 SAE,带来了哪些价值?

     

    爱奇艺体育的 Serverless 实践

     

    通过阿里云 Serverless 应用引擎(SAE)的弹性伸缩特性,爱奇艺体育只需要通过简单的配置规则就能够从容面对定期的业务洪峰。同时,SAE提供微服务的生命周期管理功能,使整个部署周期极大简单化,高效化。而内置无缝集成的 ARMS 监控做到端到端的微服务解决方案,能够及时精准的定位问题,使得系统 Bug 无处隐藏,极大提升用户体验。最后,应用高可用 AHAS 从服务降级、熔断、限流方面给出了近乎完美的解决方案。

     

     

    • 通过SAE弹性策略解决方案,可以从容应对固定周期的业务洪峰,省去了原来预估资源、部署应用的操作,极大减轻了运维团队的工作量,整体效率提升40%

     

    • 通过SAE极致弹性的特性,可以做到在面对突增业务流量时的从容应对,无需临时部署应用,极大提升了用户体验。

     

    • 通过SAE自带的监控解决方案以及与ARMS监控的无缝集成,帮助客户快速、精准定位问题,整体Bug处理速度提升30%。

     

    • SAE极致扩缩容的背后是极致的资源利用率,帮助客户整体资源利用率提升近50%。

     

    • 通过SAE平台对微服务生命周期的管理,上线周期缩短达40%

     

    作者:寻如,阿里云解决方案架构师

    原文链接原文链接

    本文为阿里云原创内容,未经允许不得转载

     

    展开全文
  • 不同负载类型以及容器集群资源利用率而实时调整容器集群服务的 权重;设计实现基于灰度模型短时间负载预测弹性伸缩策略,能够实 现高效容器集群弹性伸缩以及提升系统并发性能;设计实现基于蚁群 算法...
  • 这些技术的资源利用率,但是受攻击面积和潜在的攻击影响都很大,在多租户的云环境中,不同客户的容器会被同样的进行编排,这种威胁就尤其明显。主机操作系统在为每个容器创建虚拟的用户空间时,不同容器之间的隔...

    摘要

    既然主流 IT 工业都在采用基于容器的基础设施(云原生方案),那么了解这一技术的短板就很重要了。Docker、LXC 以及 RKT 等传统容器都是共享主机操作系统核心的,因此不能称之为真正的沙箱。这些技术的资源利用率很高,但是受攻击面积和潜在的攻击影响都很大,在多租户的云环境中,不同客户的容器会被同样的进行编排,这种威胁就尤其明显。主机操作系统在为每个容器创建虚拟的用户空间时,不同容器之间的隔离是很薄弱的,这是造成上述问题的根本原因。基于这样的现状,真正的沙箱式容器,成为很多研发工作的焦点。多数方案都对容器之间的边界进行了重新架构,以增强隔离。本文覆盖了四个项目,分别来自于 IBM、Google、Amazon 以及 OpenStack,几个方案的目标是一致的:为容器提供更强的隔离。IBM Nabla 在 Unikernel 的基础上构建容器;Google 的 gVisor 为运行的容器创建一个特定的内核;Amazon 的 Firecracker 是一个超轻量级的沙箱应用管理程序;OpenStack 将容器置入特定的为容器编排平台优化的虚拟机之中。下面对几个方案的概述,有助于读者应对即将到来的转型机会。

    目前的容器技术

    容器是一种对应用进行打包、分享和部署的现代化方式。与把所有功能打包为单一软件的单体应用相反,容器化应用或微服务的设计目标是专注于单一任务。容器中包含要完成这一任务所需的所有依赖项目(包、库和一些二进制文件)。正因如此,容器化应用是平台无关的,能够在任何操作系统上运行,并不在意其版本或者已部署软件。这给开发人员带来了极大的方便,再也不用为不同的客户和平台准备不同版本的软件了。因此也有了一个不太准确的想法:把容器当成了“轻量级虚拟机”。当容器在主机上完成部署之后,每个容器的资源,例如文件系统、进程和网络栈都会被安置在一个虚拟的隔离环境之中,其它容器无法访问这一隔离环境。这个技术能够在一个集群内同时运行几百或几千个容器,容器化应用能够轻松的通过复制容器实例的方式进行伸缩。

    目前容器技术的发展,得益于两项技术的进步:Linux 命名空间以及 Linux Control Group(cgroup)。命名空间虚拟隔离的用户空间,并且给应用分配独立的系统资源,例如文件系统、网络栈、进程号以及用户编号等。在这个隔离的用户空间中,PID = 1 的应用程序控制了文件系统的根,并可以用 root 的身份运行。这个抽象的用户空间允许每个应用都不受同一主机上运行的其它应用的影响。目前有六个可用的命名空间:mount、inter-process communication (ipc)、UNIX time-sharing system (uts)、process id (pid)、network 以及 user。另外还提议了两个额外的命名空间,分别是 time 和 syslog,但是 Linux 社区还在对其规范进行定义。Cgroups 为应用进行硬件的限制、优先级、审计和控制。CPU、内存、设备和网络都是硬件资源。当把命名空间和 cgroup 组合起来,我们就可以在单一主机上,安全的运行多个应用,并且其中的每个应用都有各自的隔离环境,这是容器的的根本。

    虚拟机和容器之间的区别是,虚拟机是硬件层的虚拟化,而容器是操作系统级的。虚拟机管理器(VMM)为每个虚拟机模拟一个硬件环境,容器运行时则为每个容器模拟一个操作系统。虚拟机共享主机的物理硬件,容器会共享主机操作系统的内核以及物理硬件。因为容器从主机上共享的资源更多,它们对存储、内存以及 CPU 的利用比虚拟机更加有效。然而共享越多,其代价就是容器之间、容器和主机之间的信任边界就越模糊。图 1 中描述了虚拟机和容器的架构差异。

    相对于命名空间隔离技术而言,虚拟化硬件隔离通常会有更好的安全边界。容器(进程)中逃出的攻击者,往往比虚拟机中逃出的攻击者具有更大的威胁。命名空间和 cgroup 的弱隔离是造成这种风险的原因。Linux 为每个进程中加入新的属性字段,通过这种方式实现了命名空间和 cgroup。这些在 /proc 文件系统中的字段会告诉主机操作系统,一个进程是否能看到其它进程,或者这个进程能够使用的 CPU 或内存的预算。如果从主机操作系统上查看运行中的进程和线程(例如 top 和 ps 命令),容器进程看起来和主机上的其它进程都是很相似的。一般来说 LXC 或者 Docker 这样的传统容器,在同一主机上运行时,会共享统一主机的同一内核,因此不能称其为沙箱。例如 CVE-2014-3519、CVE-2016-5195、CVE-2016-9962、CVE-2017-5123 以及 CVE-2019-5736,都会从容器中越狱而出。多数内核漏洞都适用于容器逃逸,这是因为内核漏洞通常会导致权限升级,最终允许受攻击的进程在原命名空间之外获得控制权。除了经由软件漏洞进行的攻击之外,错误的配置,例如部署一个具备过高权限(例如 CAP_SYS_ADMIN、privileged)的容器,或者关键挂载点(例如 /var/run/docker.sock)都可能引发容器逃逸。想在多租户集群中部署容器、或者把包含有敏感数据的容器和其它不受信容器部署在同一主机上,就要考虑一下发生灾难性后果的可能性了。

    这些安全性方面的担忧,促使研究人员为容器构建了更强的信任边界。具体的解决方式就是创建一个真正的沙箱容器,尽可能的从主机操作系统中隔离开来。多数解决方案都是一种混合架构,在虚拟机的强信任边界和容器的高效率之间尝试取得平衡。在成文之时,还没有任何一个项目成熟到能够成为标准,但未来的容器发展毫无疑问地会采纳其中一些有用的概念。本文的剩余部分会讨论几个有前途的项目,并对它们的特点进行比较。

    我们会从 Unikernel 开始,它是最早的一个单一目标虚拟机的尝试,它把应用和最小化的操作系统库打包成为单一镜像。很多致力于创建安全、低耗的最优化虚拟机镜像的未来项目,都以 Unikernel 的概念为基础。然后我们会看看 IBM 的 Nabla,这个项目的目标是像容器一样的运行 Unikernel 应用;接下来是 Google gVisor,它在用户空间的内核中运行容器。在这两个类 Unikernel 项目之后,我们把目光转向以虚拟机为基础的容器方案,Amazon 的 Firecracker 以及 OpenStack Kata。最后一节的结论中,会对所有的方案进行比较。

    Unikernel

    虚拟化技术让云计算成为可能。Xen 以及 KVM 这样的 VMM 是 AWS 和 GCP 的基石之一。虽然现代 VMM 能在单一集群内处理几百个虚拟机,然而传统的通用操作系统构建出来的虚拟机通常没有为在虚拟化环境中的运行进行优化。通用操作系统的设计目标是尽可能支持更多类型的应用程序,所以它的核心会包含所有类型的驱动、协议以及调度器。然而当前云中运行的虚拟机通常是被单一应用独占的,例如 DNS、代理服务器或者数据库。每个应用都只依赖于一小部分内核功能,闲置的内核功能不但浪费了系统资源,还扩大了攻击面积。更多的代码,就要面对更多的安全和隐患和 Bug。这种现状促使计算机科学家们用最小化的内核功能来支持单一应用,从而设计出了单一用途的操作系统。

    操作系统研究者们在 90 年代提出了 Unikernel 的概念。Unikernel 是一个特别的单寻址空间的虚拟机镜像,能够直接运行在 VMM 上。它把应用程序及其依赖的内核功能打包到一个镜像之中。 Nemesis和 Exokernel 是 Unikernel 最早的两个学术项目。图 2 描述了 Unikernel 虚拟机镜像创建和部署的过程。

    Unikernel 把内核拆分为多个库,只将应用依赖的库打包到镜像里。跟虚拟机类似,Unikernel 在虚拟机 VMM 上工作。低耗的 Unikernel 能够快速的启动和扩容。Unikernel 的突出特点就是安全、低耗、高度优化和快速启动。Unikernel 镜像只包含应用依赖的库,如果不做特别要求,其中甚至连 Shell 都没有,这就减小了受攻击面积。不但是攻击者缺乏落脚点,就算是有定制失误的镜像,其影响范围也只在它自己的实例之中。Unikernel 镜像只有几兆,因此能在几十毫秒内完成启动,还可以在单一主机上运行几百个实例。用单一寻址空间代替多数现代操作系统中使用的多级页表,Unikernel 应用的内存访问延迟比虚拟机中更低。由于应用是在构建镜像时进行编译的,编译器能够进行更多的静态类型检查,从而优化二进制文件的效率。

    Unikernel.org 维护了一个 Unikernel 项目的列表。即便是具有这样鲜明的特点,Unikernel 还是没有获得太多关注。Docker 2016 年收购了一家 Unikernel 的初创公司,大家认为 Docker 可能要把容器打包到 Unikernel 里面。三年后,还是没有出现任何集成的迹象。进展缓慢的重要原因之一就是,还没有成熟的构建 Unikernel 应用的成熟工具,大多数 Unikernel 应用只能在特定 VMM 中运行。另外要把应用移植到 Unikernel 上,可能需要针对不同语言进行定制,并且手动选择依赖的内核库。Unikernel 中的监控和排错即使能做得到,也会对性能造成很大影响。所有这些限制,都降低了开发者向 Unikernel 迁移的意愿。容器和 Unikernel 有很多相似之处。它们都是单一用途的只读镜像,意味着镜像中的组件无法更新或补丁,要更新应用就必须更新镜像。今天的 Unikernel 有点像前 Docker 时代:没有容器运行时可用,开发者必须使用 chroot、unshare 和 cgroup 等基础工具来把应用放入沙箱。

    IBM Nabla

    IBM 的研究者们提出了 Unikernel as process 的点子:Unikernel 应用以进程的形式在特定的虚拟机系统中运行。IBM 的 Nabla Containers 项目,用面向 Unikernel 的 Nabla Tender 替换了 QEMU 这样的通用 VMM,进一步强化了 Unikernel 的信任边界。Unikernel 和通用 VMM 之间的 Hypercall 还是一个很大的受攻击面积,所以针对 Unikernel 的 VMM 可以使用更少的系统调用,从而显著的提高安全性。Nabla Tender 拦截 Unikernel 发送给 VMM 的 Hypercall,并翻译为系统调用。Linux Seccomp 策略会阻断所有 Tender 不需要的系统调用。Unikernel 和 Nabla Tender 以用户空间进程的形式在主机上运行。图 3 展示了 Nabla 在 Unikernel 应用和主机之间创建瘦接口的过程。

    研究者声称,Nabla Tender 和主机的通信使用了不到 7 个系统调用。由于系统调用是用户空间进程和操作系统内核之间的桥梁,越少的系统调用,就越难攻击到核心。把 Unikernel 运行为进程还有个好处就是使用 gdb 这类基于进程的调试器进行调试。

    为了和容器编排平台对接,Nabla 还提供了符合 OCI 运行时标准的 Nabla 运行时 runnc。OCI 运行时标准规范了运行时客户端(例如 Docker 和 Kubelet)以及运行时(例如 Runc)之间的 API。Nabla 还提供了一个镜像构建器,用于创建能够使用 runnc 运行的 Unikernel 镜像。Unikernel 和传统容器的文件系统之间存在差异,因此 Nabla 没有遵循 OCI 的镜像标准,换句话说, Docker 镜像和 runnc 是不兼容的。在本文写作期间,这个项目还在早期试验阶段,还有一些功能缺失,例如加载/访问主机文件系统的能力、加入多网卡的能力(Kubernetes 需要)或者从其它 Unikernel 镜像进行引用的能力。

    Google gVisor

    Google gVisor 是 GCP App Engine、Cloud Functions 和 CloudML 中使用的沙箱技术。Google 意识到在公有云基础设施中运行不受信容器的风险,以及虚拟机沙箱的低效,因此开发了用户空间的内核作为沙箱来运行不受信应用。gVisor 通过拦截所有从应用到主机内核的系统调用,并使用用户空间中 gVisor 的内核实现来处理这些调用。本质上来说,gVisor 是 VMM 和客户内核的组合,图 4 展示了 gVisor 的架构。

    gVisor 在应用和主机之间建立了稳固的安全边界。这个边界限制了应用在用户空间的系统调用。无需依赖虚拟硬件,gVisor 以主机进程的方式运行,充当主机和应用之间的沙箱。哨兵实现了多数的 Linux 系统调用,尤其是内核功能,例如信号分发、内存管理、网络栈以及线程模型。哨兵已经实现了 319 个 Linux 系统调用中的 70% 多,用于为沙箱应用提供支持。哨兵和主机内核的通信只使用了不到 20 个 Linux 系统调用。gVisor 和 Nabla 有很相似的策略:保护主机。它们都使用了不到 10%的系统调用来和主机内核通信。gVisor 创建通用核心,而 Nabla 依赖的是 Unikernel,它们都是在用户空间运行特定的客户内核来支持沙箱应用的运行。

    有人可能会奇怪,开源的 Linux 内核已经如此稳定,为什么 gVisor 还要重新实现一个。gVisor 的内核使用的是 Golang,其中的强类型安全以及内存管理都比 C 编写的 Linux 内核更安全。gVisor 的另外一个重要卖点就是它和 Docker、Kubernetes 以及 OCI 标准的紧密集成。把运行时修改为 gVisor runsc,就能拉取和运行大多数的 Docker 镜像了。在 Kubernetes 里,可以把整个 Pod(而非每个容器分别)运行在 gVisor 沙箱中。

    gVisor 还在婴儿期,也一样有一些限制。gVisor 要拦截和处理沙箱应用中的系统调用,总要有一定开销,因此不适合系统调用繁重的应用。注意 Nabla 没有这个开销,这是因为 Unikernel 应用不进行系统调用。Nabla 只使用 7 个系统调用来处理 Hypercall。gVisor 没有直接的硬件访问(透传),所以如果应用需要硬件(例如 GPC)访问,就无法在 gVisor 上运行。最后,gVisor 没有实现所有的系统调用,因此使用了未实现系统调用的应用是无法在 gVisor 上运行的。

    Amazon Firecracker

    Amazon Firecracker 用于 AWS Lambda 和 AWS Fargate。它是一个 VMM,会创建轻量级虚拟机(MicroVM),特别适合多租户容器和无服务器场景。在 Firecracker 出现之前,Lambda 和 Fargate 都在每个客户独立的 EC2 虚拟机上运行,从而保证强隔离。虽然在公有云中,虚拟机的强隔离性要优于容器,但是使用通用的 VMM 和虚拟机来做应用沙箱是很不经济的。Firecracker 为云原生应用定制了 VMM,兼顾了安全和性能两方面问题。Firecracker VMM 为每个客户虚拟机提供了最小操作系统功能,并且模拟设备来增强安全和性能。可以用 Linux 内核以及 ext4 文件系统轻松的构建运行在 Firecracker 之上的虚拟机镜像,Amazon 在 2017 年开始开发 Firecracker,并在 2018 年开源。

    和 Unikernel 概念类似,只有一个功能和设备的小子集可以用于容器操作。和传统虚拟机对比,microVM 在受攻击面积、内存消耗和启动时间方面都很有优势。评估表明,Firecracker 的 microVM,运行在 2CPU 和 256G 内存的主机上,消耗不到 5MB 内存,启动大约用了 125ms。图 5 展示了 Firecracker 架构以及它的安全边界。

    Firecracker VMM 依赖于 KVM,每个 Firecrfacker 实例都以用户空间进程的方式运行。每个 Firecracker 进程都被 seccomp、cgroup 和命名空间策略锁定,因此它的系统调用、硬件资源、文件系统和网络活动都被严格限制。每个 Firecracker 进程中都有多个线程。API 线程作为客户端和主机以及 microVM 之间的控制平面。VMM 线程呈现了一个 virtIO 设备的最小集(网络和块设备)。Firecracker 只提供了 4 个模拟设备给 microVM:virtio-block、virtio-net、串口控制台以及一个用于停止 microVM 的只有一个按钮的键盘。为了安全性考虑,虚拟机不提供和主机分享文件的机制。主机上的数据(例如容器镜像),通过块设备暴露给 microVM。虚拟机的网络接口由网桥上的 TAP 设备提供支持。所有的出栈数据包都会拷贝到 TAP 设备,并受 cgroup 策略的速率限制。安全边界的层次最大程度的降低了用户应用之间互相干扰的可能性。

    目前为止,Firecracker 还没有完全和 Docker 以及 Kubernetes 完成集成。Firecracker 不支持硬件透传,所以需要 GPU 以及任何设备加速访问的应用都无法兼容。它限制了虚拟机和主机的文件共享以及网络模型。然而这个项目有强力的社区支持,应该很快会和 OCI 标准打通并支持更多应用。

    OpenStack Kata

    出于对传统容器安全性的担忧,Intel 在 2015 年启动了它们以虚拟机为基础的容器技术:Clear Container。Clear Container 依赖 Intel VT 的硬件虚拟化技术以及高度定制的 QEMU-KVM(qemu-lite)来提供高性能的基于虚拟机的容器。在 2017 年,Clear container 项目加入了 Hyper RunV,这是一个基于 hypervisor 的 OCI 运行时,从而启动了 Kata 容器项目。继承了 Clear Container 的所有财产,Kata 现在支持更多的基础设施和容器规范。

    Kata 完整的集成了 OCI、CRI 以及 CNI,它支持多种网络模型以及可配置的客户内核,这样一些有特别网络需求或者内存版本限制的应用就可以得到支持了,图 6 展示了 Kata 和现有编排平台的交互。

    Kata 在主机上有一个 kata-runtime,用于配置新容器。在 Kata VM 中的每个容器,在主机上都有对应的 Kata Shim。Kata Shim 从客户端接收 API 请求(Docker 或 Kubelet),通过 VSock 转发请求到 Kata 虚拟机中的代理。Kata 作出很多优化启动时间的优化。NEMU 是一个轻量级的 QEMU,约有 80% 的设备和包被删除。VM-Templating 克隆一个运行中的 Kata VM 实例,并分享给其它新启动的 Kata VM。这一操作能够显著降低启动时间以及内存消耗,但是可能受到跨虚拟机的边缘通道攻击,例如 CVE-2015-2877。热插拔功能让虚拟机以最小资源启动(例如 CPU、内存、virtio block),并在有申请时加入额外的资源。

    Kata 容器和 Firecracker 都是基于虚拟机的沙箱技术,也都是服务于云原生应用的。但是它们用不同的方法来实现目标。Firecarcker 用一个特定的 VMM 来给客户操作系统创建安全的虚拟化环境,而 Kata 是一个为运行容器而高度优化的轻量级虚拟机。有人已经尝试在 Firecracker VMM 上运行 Kata。这个项目还在试验阶段,也许会把两个项目的长处融为一体。

    结论

    我们已经看了多个用于解决容器隔离问题的方案。IBM Nabla 是一个基于 Unikernel 的方案,把应用打包为特别的虚拟机。Google gVisor 是特制 VMM 和客户操作系统核心的结合,提供了应用和主机之间的安全界面。Amazon Firecracker 是一个特定的 VMM,为每个客户操作系统提供最小化的硬件和内核资源。Kata 是高度优化的虚拟机,内置了容器引擎,可以运行在 VMM 上。这些方案各有优劣,很难说那个更好。表格 1 中展示了一个针对重要功能的对比表。如果你有应用运行在 Unikernel 系统中,例如 MirageOS 或者 IncludeOS,Nabla 是最佳选择。gVisor 是目前和 Docker 和 Kubernetes 集成最好的,但是因为系统调用实现不完整,有些应用可能无法运行。Firecracker 支持自定义的客户操作系统镜像,所以如果你的应用需要在特定虚拟机上运行,它是你的最佳方案。Kata 兼容 OCI,在 KVM 以及 Xen 上都能运行。它可以简单的在混合环境中部署微服务。

    虽然可能需要很长时间,才能看到有一个或多个解决方案最终被主流接受,但已经可以看到大多数云厂商已采取行动来解决这些问题。对于构建本地云原生平台的组织而言,它不是世界末日。快速修补、最小权限配置和网络分段等常见做法都可以有效地减少被攻击面。

    展开全文
  • 大型云应用开发者一直在追求性能、低运维成本和高资源利用率,导致容器化和远程直接内存访问(RDMA)网络技术被越来越多的采用。 容器 [7,11,6] 提供的轻量级隔离和可移植性,降低了部署和管理云应用的复杂性 ...

    大型云应用开发者一直在追求高性能、低运维成本和高资源利用率,导致容器化和远程直接内存访问(RDMA)网络技术被越来越多的采用。

    容器 [7,11,6] 提供的轻量级隔离和可移植性,降低了部署和管理云应用的复杂性 (从而降低了成本)。因此,现在容器成为管理和部署大型云应用的实际方式。

    因为与基于标准 TCP/IP 的网络相比,RDMA 网络能够提供更高的吞吐量、更低的延迟和更少的 CPU 占用,所以许多数据密集型应用(例如,深度学习和数据分析框架)都会采用 RDMA [24,5,18,17]。

    但不幸的是,这两种技术趋势在云环境中是相互矛盾的。容器化的核心价值是为应用提供高效灵活的管理。为此容器云需要容器在网络中具有以下三个属性:

    隔离:每个容器都应该有其专用的网络命名空间(包括端口空间、路由表、接口等),以消除与同一主机上其他容器的冲突。

    可移植性:容器应该使用虚拟网络与其他容器通信,并且与它的虚拟 IP 保持关联,而不管它被调度到哪个主机上或迁移到哪个主机上。

    可控性:编排器可以容易地执行控制平面策略 (例如,准入控制、路由) 和数据平面策略 (例如,QoS、计费)。此属性在 (多租户) 云环境中尤其需要。

    对于在云环境中,自由放置、迁移容器、以及控制每个容器可使用的资源,这些属性都是必需的。为此,在基于 TCP/IP 的操作中,网络可以通过软件(虚拟)交换机来实现完全虚拟化 [15]。

    但是,很难对基于 RDMA 的网络进行完全虚拟化。 RDMA 通过将网络处理卸载到硬件 NIC 中,绕过内核软件栈,实现了高网络性能。 在共享的云环境中难以修改硬件中的控制平面状态(例如,路由),同时由于流量直接通过 PCIe 总线在 RAM 和 NIC 之间传输,也难以控制数据路径。

    因此,采用这两种技术的几个数据密集型应用(例如,TensorFlow [24],CNTK [5],Spark [18],Hadoop [17])仅在专用裸机群集中运行时才使用 RDMA; 当在共享的云环境中运行时,不得不完全摒弃 RDMA 提供的性能优势。 当然,使用专用集群来运行应用对于提供商或客户来说都是不划算的。

    本文的目的很简单:我们希望基于云环境中的容器化应用能够像在专用裸机集群中那样高效地使用 RDMA,同时也能实现容器云中的隔离、可移植性和可控性的要求。

    目前还没有成熟的容器 RDMA 虚拟化解决方案。表 1 总结了可能通过扩展来支持容器的一些重要选项,尽管它们未能达到关键要求,也可能需要以很大的性能成本为代价进行实现。

    表 1: 可用于容器的 RDMA 网络解决方案。

    例如,基于硬件的 I/O 虚拟化技术,如 SR-IOV[21],具有根本的移植性限制 [39,28],因为它们需要重新配置硬件网卡和交换机来支持容器的迁移。控制路径虚拟化解决方案,例如 HyV[39],只操作控制平面命令来实现隔离和可移植性,它们不具有数据流的可见性或可控制性。因此,它们不能灵活地支持云提供商所需的数据平面策略。软件仿真 RDMA,如 SoftRoCE[36],通过在 UDP 网络栈上运行 RDMA 并使用现有的虚拟 IP 网络解决方案,可以轻松实现隔离、可移植性和可控性,但其性能将受到 UDP 的限制。

    本文提出了一种基于软件的容器云虚拟 RDMA 网络框架 FreeFlow,该框架实现了隔离、可移植性和可控性,并提供了接近裸机 RDMA 的性能。FreeFlow 的核心是运行在每个服务器上的软件虚拟交换机,来实现在商业 RDMA 网卡上虚拟化 RDMA。FreeFlow 不需要专门的硬件或基于硬件的 I/O 虚拟化。软件虚拟交换机具有对容器间通信的控制路径 (如地址、路由) 和数据路径 (如数据流量) 的完全访问权。这种设计理念类似于容器云中用于 TCP / IP 网络的现有软件虚拟交换机,例如 Open vSwitch(OvS)[15],尽管由于 RDMA 的特性,FreeFlow 的实际设计与 OvS 截然不同。

    FreeFlow 的设计解决了两个关键挑战。首先,我们希望 FreeFlow 对应用程序完全透明。这很有挑战性,因为 RDMA 需要网卡来操作内存缓冲区和文件描述符,而容器内的应用程序由于网络虚拟化而不能直接与网卡交互。我们解决这一问题的关键点是,容器本质上是进程,它们可以使用 FreeFlow 轻松共享内存和文件描述符等资源。如果 FreeFlow 和容器共享相同的内存(§4.3)和文件描述符(§4.4),则底层物理 RDMA NIC 上的任何操作都将自动在容器内生效。另一个问题是,鉴于应用程序不会协作地创建可共享的资源,因此共享对应用程序透明的资源并不简单。 我们设计了将资源从不可共享转换为可共享的方法,对应用程序代码无需修改或只需很少的修改。

    其次,FreeFlow 必须提供与裸机 RDMA 相当的吞吐量和延迟。我们将吞吐量和延迟中的性能瓶颈分别定义为内存复制和进程间通信。我们利用一个零拷贝设计吞吐量 (§4.3), 一个共享内存进程间通道与 CPU 旋转延迟 (§5.2)。同时还优化了 FreeFlow 来限制 CPU 开销。

    我们使用标准的微基准测试工具和真实的数据密集型应用程序、Spark 和 TensorFlow 来评估 FreeFlow 的性能,不需要对它们进行任何修改或只需很小的修改。FreeFlow 的性能可与裸机 RDMA 相媲美,无需太多的 CPU 开销。同时,与使用传统 TCP/IP 虚拟网络相比,FreeFlow 显著提高了实际应用程序的性能,吞吐量提高了 14.6 倍,延迟降低了 98%。FreeFlow 吸引了多个 RDMA 解决方案提供商的兴趣,并已开放源代码

    源代码地址:https://github.com/Microsoft/Freeflow。

     

    参考文献:

    https://www.infoq.cn/article/2lJYUW*4QVGCe94dQB64?utm_source=tuicool&utm_medium=referral

    展开全文
  • 本文主要从以下三个部分来进行讨论:在没有用容器化技术之前,我们存在这些问题:不同业务场景对资源的需求是不一样的,有CPU密集型、内存密集型、网络密集型,这就可能会导致资源利用率不合理的问题,比如一个机器...
  • 相比传统技术,容器技术提供了更好的标准性、隔离性,对系统资源利用率更高、开发及部署更加方便,结合编排技术是一种云原生应用架构。容器技术涉及计算、网络、存储、安全、编排等多方面内容,该文从网络方面分析...
  • Docker 对系统资源利用率高,一台主机上可以同时运行数千个Docker容器。 Docker 基本不消耗系统资源,使得运行在Docker里面的应用的性能很。 相比于传统的虚拟化技术,Docker 有哪些优势? 快速的支付和部署:...
  • 容器优缺点

    千次阅读 2019-04-18 17:33:00
    高资源利用率与隔离,提高生产力:容器通过移除跨服务依赖和冲突提高了开发者的生产力。每个容器都可以看作是一个不同的微服务,因此可以独立升级,而不用担心同步。容器没有管理程序的额外开销,与底层共享操作...
  • 一什么是容器 •轻量级的操作系统虚拟化解决方案, 能够在Linux系统上迅速创建一个容器(类似于虚拟机)并在容器上部署和运行应用程序,同时还可以通过配置文件轻松将应用程序的自动化安装、...•更高资源利用率 ...
  • 迄今为止,我们已经了解了 DevOps 实践和持续集成。但是,最近,容器成为了一个流行词,每个人都希望有第一手的经验,主要原因是为了高效地...在 Dev 或者 QA 环境中,运用容器以得到更高资源利用率,是极其实用的。
  • Windows 安装 docker容器

    2018-12-04 16:41:04
    由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的...
  • 在Dev或者QA环境中,运用容器以得到更高资源利用率,是极其实用的。在本章中,我们将尝试安装和创建一个样板容器,目标是熟悉Docker容器,对容器在应用部署中的用途有所感觉。本章提供容器的简单概述。我们将聚焦...
  • docker 容器的启动方式

    2019-09-25 14:13:39
    更高效利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机...
  • Docker(容器)技术

    2020-10-10 17:39:15
    文章目录Docker简介镜像容器仓库阿里云仓库数据卷案例构建镜像 Docker简介 ...对服务器的资源利用率更高。 安装docker 官方建议Ubuntu 镜像 获取镜像帮助 docker pull --help 获取镜像加速器 阿
  • 从零构建容器运行时

    2020-11-06 12:05:57
    无论是虚拟化技术还是容器技术都是为了最大程度解决母机资源利用率的问题。虚拟化技术利用Hypervisor(运行在宿主机OS上)将底层硬件进行了虚拟,使得在每台VM看来,硬件都是独占的,并且由VM Guest OS直接操作(具备...
  • 容器,比如 Docker,相比于它的近亲,虚拟机, 拥有更高资源利用率,更好的隔离性和更棒的可移植性,这使其成为了微服务的理想选择。 但微服务和容器也会带来问题。可以将它已过时的前代单体架...
  • 独家提供ARM容器服务支撑低成本APP测试场景全球首发云容器实例服务CCI :更快的弹性,更高资源利用率;国内首发windows容器、帮助企业实现海量Windows应用轻松容器化上云自研iCAN容器网络:实现高性能容器网络和大...
  • 3.2 容器 和 虚拟化 :4、容器 和 传统虚拟机 的对比:5、Docker 的优缺点:优点:1、快的部署 和 交付:2、资源利用率高:3、启动速度快....4、易于 扩展 和 移植 !5、方便的管理:缺点:1、隔离性差:2、调试...
  • docker   Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 ... 资源利用率高,一台配置服务器可以跑上千个docker容器 快的交付和部署,...
  • 现有平台面临的挑战 ...虽然一些大型的互联网公司都是动辄拥有成千上万台服务器,但实际上以我个人的经历来看计算资源利用率都不,这里有很多历史的原因,其中之一就是为了获得好的隔离性,而实现隔离最...
  • 现有平台面临的挑战 ...虽然一些大型的互联网公司都是动辄拥有成千上万台服务器,但实际上以我个人的经历来看计算资源利用率都不,这里有很多历史的原因,其中之一就是为了获得好的隔离性,而实现隔离最...
  • 与传统的虚拟机相比,容器技术使用更为简单、资源利用率更高。首先需要在操作系统中安装Docker,可从 Docker 官网上下载免费使用的 Docker CE(社区版),最新安装方法可在Docker 官网上查看。 应该注意虚拟化要求...
  • Pouch是一款轻量级的容器技术,拥有快速高效、可移植性、资源占用少等特性,主要帮助阿里快的做到内部业务的交付,同时提高超大规模下数据中心的物理资源利用率。开源之后,Pouch成为一项普惠技术,人人都...
  • 容器的启动可以在秒级实现,比传统的虚拟机方式要快得多 对系统资源利用率,一台主机上可以同时运行数千个 Docker 容器 docker 的出现,让开发/测试/线上的环境部署,成为便利一条龙。 轻松的迁移和扩展 ...
  • Pouch 是一款轻量级的容器技术,拥有快速高效、可移植性、资源占用少等特性,主要帮助阿里快的做到内部业务的交付,同时提高超大规模下数据中心的物理资源利用率。开源之后,Pouch 成为一项普惠技术,人人都可以...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 191
精华内容 76
关键字:

容器资源利用率更高