云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生的英文可拆解为Cloud和Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序设计之初就被考虑部署到云的环境,为云而生,在云上运行,并充分利用和发挥云平台的弹性和分布式架构的优势。
概括成一句话:云原生就是为云而生、以应用为中心的现代应用新范式。
云原生的技术特征
这种新的云计算范式具有以下特征。
其一,云原生除具有分布式能力外,还具有基于云的自动化资源弹性能力。
其二,不绑定任何技术,即云原生可以由任何一种语言的技术栈实现,如C++技术栈 或者Golang技术栈。只要该技术能够解决云原生场景下的问题,都可以考虑纳入云原生技术体系。
其三,不对适用的业务领域加以限制,云原生适用于所有需要数字化的领域。
其四,云原生不仅涉及技术变革,还会引发商业模式、产品和组织等的变革。
为何需要云原生
为什么会出现云原生这种新范式呢?下面来看以下几个场景。
场景1:用户用智能手机打开某网站的商品推荐页面,兴趣盎然地浏览着页面展示的商品,还时不时地进入虚拟直播间,观看导购的讲解,突然看中一件非常漂亮的衣服,便毫不犹豫地将衣服加入购物车系统,并直接通过第三方支付系统支付,也许下午就能在家收到这件漂亮的衣服了。
场景2:小王是个上班族,吃腻了公司食堂的饭菜,于是登录某外卖App订餐,没过多久,热乎乎的食物就经由外卖员送到了他的手中。
这些场景已司空见惯,人们的生活已经严重地依赖于数字化工具了,但这些为了提高生活质量的App背后是庞大的IT系统。
再来看这样一个场景。
场景3:比尔是一家著名电子商务公司的软件工程师,刚刚从工单系统那里接到一项棘手的任务,有大量的终端用户投诉“无法在App上下单了”。虽然事情紧急,但是比尔不得不从复杂的系统链路中寻找蛛丝马迹来修复后台的服务,经过一天的排查,最终发现故障的原因是流量过载,只需添加机器就可以解决。对这种规模的电商而言,这是一个严重的事故,一天至少损失上亿元。
这就是现代IT系统复杂性现状的一瞥。回过头来,为什么需要这么长时间的排查呢?
其一,现代软件系统结构大都很复杂,就像一个大型生物,比如人体,那么对大型系统的问题排查就类似于在不开刀、不使用核磁共振、不化验等情况下了解疾病的原因。
其二,现代软件系统在其生命周期内的新技术需求或功能需求层出不穷,这也使得现代软件系统越来越复杂,排查的路径越来越长,而IT投入是相对滞后的,其稳定性朝着失控方向发展。
比尔得知这个电商应用运行在云上时,很好奇为什么还会有流量过载的问题。
云关心的是CPU、内存等资源的池化和虚拟化,并不关心在虚拟机操作系统上是如何 开发、运维应用程序的。应用程序是运行在操作系统之上为用户提供服务的进程,比如提供订单服务的程序。应用程序无法直接管理云。应用和云之间出现了一个断层,这个空白区是由研发团队、运维团队等手工管理的。云对应用本身的资源需求完全是无感的,云无法自己做出扩展,只能由研发团队和运维团队手动拓展,所以应用程序对突发流量无能为力。而应用上云,仅仅是为了节约企业自己搭建机房的成本。
对这类应用而言,其实还有更多故障,比如应用实例因为Bug而崩溃、因为内存不足而拒绝服务、因为网络毛刺而影响服务质量等,而云对这些问题无感,所以云对此无能为力。技术团队努力按产品或者项目计划快速推进研发进度,这就像汽车以120km/h在高速上行驶,而缺陷、故障使得软件就像汽车突然下了匝道,速度又回到了40km/h,整体效率并没有提高,整体成本并没有降低。
很明显,需要一种技术向上能够为应用上云与稳定运行提供支撑,向下能够实现以应 用维度动态管理云资源(让云对应用的资源需求有感知)的能力。云原生正处于这个断层的 位置,提供了一种运用云算力的新方式。
所以,云原生使得现代化应用程序能够运行在云上,利用云的优势(而不需要理会硬件故障)在应用程序出现故障时自愈,并在突发流量发生时无须担心算力不足的问题。云原生大大地降低了成本并提高了效率。
云原生技术的本质
注意,云原生的电商应用在终端用户侧依然与原先的非云原生的电商应用在外观上及使用体验上保持一致,功能并没有发生变化。可以理解为,云原生平台是一种“透明”的基 础设施,即电商应用还是运行在操作系统之上,操作系统运行应用的基本抽象还是进程。也许有人会问,不是说应用会运行在云原生平台之“上”吗?这个“上”的意思是管理的关系,而不是运行态堆栈的上下层级关系,云原生系统更像管理应用进程的一组非应用进程,比如Kubernetes的本地“运维代理”—Kubelet这样的进程。在实现层面,云原生系统和应用程序从操作系统角度来看都是一样的。在架构层面,云原生系统是分布式的,所以从外观看,它是云的更高级形态。不同于传统的运维平台,它是实实在在的应用运行平台。
对于平台开发者来说,忠告就是:希望你能够沉下心来,不要被现代基础设施的“外壳”所迷惑,你依然需要刻苦地钻研操作系统内部的东西,比如内存管理、进程管理、多线程、网络堆栈结构、存储原理等。因为无论现在的云原生多么先进,也只是在架构思想上先进,底层的软件技术并没有实质的变化。你也应该清楚:云原生平台依旧是基于操作系统构建的现代分布式程序,你需要扎实的操作系统编程知识来构建这种新型的平台。
对于业务应用开发者来说,忠告就是:希望你能够刻苦钻研业务建模、应用架构等,如DDD、企业应用架构、业务分布式架构等。因为无论现在的云原生多么先进,它的初衷仍旧是让用户更加充分地聚焦于业务应用领域本身,而不是基础设施。
对于IT运维人员来说,忠告就是:希望你能够沉下心来,将思维从对具体运维对象的管理转变为对基于云原生抽象对象的管理,这将大大减少对千差万别的物理机器的知识依赖,管理方式被替换成统一的、标准的声明性管理方式。这样就不需要学习和掌握差异性部署环境的知识,同时又及时响应了业务的需要。
对于企业客户而言,忠告就是:不要迷茫,看清云原生的能力,聚焦于商业本质,进一步依托新型IT 工具加持自己的数字化产品,快速创新,使得在线业务发挥经济上的重要作用。对于云原生平台提供商而言,忠告就是:要从市场的真实情况出发,构建能够为客户解决实际场景问题的平台,这才是商业本质。
本文节选自《云原生落地:产品、架构与商业模式》