本文根据云栖大会系统软件专场内容整理
演讲者:韩伟东
随着云计算的发展,云基础设施已经成为很多企业以及用户基础设施重要的组成部分,部分企业甚至会将自己的全部业务都托管在公共云环境上。而伴随着这些基于云计算基础设施进行开发、运维业务体量的扩张,云原生的概念也开始悄然进入人们的视线,并逐步发展壮大。
从2013年开始正式被提出,到2015年CNCF建立并至今,云原生的概念在一直不断地发展完善,虽然现在我们仍无法给云原生一个严格明确的定义,但是其特征已经相对比较明显,比如容器化、serverless化等等。然而可以看到的是,面向云原生更多目光还是聚焦在应用定义、编排管理、runtime等软件栈上,很少有人会去关注底层系统的实现,大家都天然地将这部分领域交由云厂商去解决,那么在这一块云厂商是否就能够轻松应对了呢?
当然不是。
首先,相较于传统的业务形态,云原生业务对于资源需求类型有了变化,从传统云时代获取虚拟机资源(虚拟化硬件)到获取虚拟OS资源(容器)到获取虚拟运行时资源(FaaS),用户对于资源的抽象层级以及粒度有了更高的要求。
同时,云原生业务天然伴随着对快速弹性的需求以及短时运行等特征,会要求云基础设施提供在短时间内快速地提供资源的能力,并且能够承受资源频繁创建、销毁的压力。
传统的云服务向用户提供的还是大粒度的资源(VM),用户拿到资源之后,依然需要自己做资源的拆分以及抽象。同时,传统云服务依然有厚重的软件分层,并为了兼容传统业务模型引入的大量复杂的功能,这与云原生业务需求的轻量、弹性、精简的模型是不匹配的。使用老的底层架构去支撑云原生场景,除了会给自身架构带来巨大的流量冲击之外,提供的服务效果也会大打折扣,甚至成为云原生业务的瓶颈。
阿里作为云原生的积极践行者,我们需要去思考,一个优秀的云原生基础底座应该拥有什么样的能力,如何才能打造一个新的底层系统。本文会介绍一下我们的思考以及探索。
首先,从云原生场景特点出发,我们认为需要从3个维度对底层系统进行设计,分别是资源、执行单元、系统能力,只有做到这3个层次的抽象才能够完整的支撑云原生业务。在此思考上,我们推出了袋鼠,打造出属于阿里的云原生底层系统。
在执行抽象层面,我们推出了推出了极致轻量、阿里云安全沙箱(Alibaba Cloud Sandbox),实现
- 云上多租户安全
- 上层透明无感知,原生容器体验
- 云原生标准和生态兼容、无缝对接
在实现上,我们采用硬件虚拟化技术隔离,更精简轻量的实现减小攻击面。同时我们也在构建enclave级的可信执行环境的支持。
在资源抽象方面,我们追求极致的轻量,融合不同层次间的重复部分,精简不需要的功能,实现极简设备模型,最小化内核等。通过这些轻量化实现,目前安全沙箱实例内存消耗小于2.5MB,启动速度已经远远小于500ms,且单机并发创建速度达到了200个/s,已经可以比较好地满足云原生业务的快弹、高密等诉求。
在性能方面,我们也做了很多探索。云原生场景,用户更专注于应用逻辑,更多的技术栈内容下沉到基础设施,服务边界的上移。这样就给底层系统更多的施展空间,因为原有一些分层边界可以被打破,可以融合和垂直优化。在袋鼠系统中,我们基于不同层次融合的全栈优化思路实现高性能。
基于以上思路,我们在Redis以及Dragonwell(阿里云JDK发行版)都进行了全栈优化的实践探索,可以看到不错的效果:Redis在袋鼠上的吞吐性能相比传统VM场景性能提升超过1倍,Dragenwell在袋鼠上运行相比传统VM场景能提升JVM的协程调度效率和降低CPU资源利用率(10%左右)。
袋鼠已经对接和支持多个阿里云云原生产品,包括弹性容器实例ECI、容器服务ACK以及Serverless应用引擎SAE。
云原生不仅仅是上层应用开发、交付、运维的变化,同时也要求底层系统进行升级演进。云原生时代大幕已经拉开,阿里已经在全方面的构建云原生能力,并结合自身业务的云原生化进行大规模的实践,会持续不断的为阿里云用户提供更多更好的云原生产品和服务。