一、什么是云原生
云原生(cloud native)是基于分布部署和统一运管的分布式云,是一系列相关技术的集合(包括如:DevOps、容器、服务网格、微服务、不可变基础设施、声明式API)。云原生就像“敏捷”或者“DevOps”一样演化到今天,他的定义已经不是一个具体的概念,而是已经变得五花八门,只要是关于系统上云构建、部署或管理等的好的方式,都是云原生的组成部分。
二、新时代的原住民
不同于上个世纪出生的人,他们少年时代伴随着的是跳皮筋、波波运和扔沙包等游戏。现在的孩子可以自豪的说我是新时代的“原住民(native)”,他们对于手机、平板、vr游戏的熟悉程度就像呼吸空气一样自然。
而云原生和众多新时代的宠儿也是一样,“云原生”出生的时候正是新技术崛起的年代,容器、微服务、DevOps等这些概念正值百家争鸣之时。当“本地部署应用”和“非分布式应用”等上个时代的产物看着这些新技术一脸茫然的时候。云原生已经在这些技术的加持下如雨的水,飞速成长。
三、云原生应用的例子
1.传统应用
回顾下传统应用开发、部署和运维管理。开发部门写完代码,开发完成的代码交给测试部门,测试部门进行测试环境准备,准备完成后来做系统测试,测试完成后在虚拟机上进行手动部署上线。如果线上系统有任何问题,那么就又是一轮类似的过程(即使不是代码bug而是性能问题),部署时又是在虚拟机中手动修修补补。而且,要是把一个不知道打过多少个升级补丁,不知道经历了多少任管理员的系统迁移到其他机器上,毫无疑问会是一场灾难。
传统应用-关键字:手动配置、人工监控、垂直扩展、本地服务、静态基础设施
2.云原生应用
而云原生应用则不同,开发人员写完代码提交后自动触发流水线,经过代码质量门禁扫描和自动化测试案例通过后,实现自动的部署测试环境(通过预先准备好的声明式的配置文件实现容器的自动编排),当线上出现代码bug时,开发人员完成代码提交后自动再次触发流水线,部署时利用容器编排管理工具(如kubernetes)实现线上的修复。如果线上出现性能问题,则容器管理工具会实现自动的扩容等。
云原生-关键字:DevOps、容器、服务网格、微服务、不可变基础设施、声明式API、敏捷、自动化、弹性伸缩
3.总结
云原生的这些概念相辅相成,比如容器镜像和编排工具实现了不可变基础设施;由于系统规模变大,开发团队的分化因此使用了微服务;横向扩展和微服务使得系统部署变的复杂,所以引入了服务网格来监控服务、引入编排工具实现弹性伸缩等;由于市场快速变化,系统的快速迭代的要求,所以引入了CICD、敏捷等。总之云原生让我们忘掉那些反复琐碎的流程、部署、运维和管理,而是专注于用户需求的交付。