在技术日新月异的今天,这可能是最炙手可热的话题之一。
什么是云原生
维基百科里释义:云原生是一种软件开发方法,它充分利用了云计算,使用开源软件技术栈将应用程序部署为微服务。通常,云原生应用程序构建为在Docker容器中运行的一组微服务,在Kubernetes中编排,并使用DevOps和Git Ops工作流进行管理和部署。使用Docker容器的优点是能够将执行所需的所有软件及环境配置打包到一个可执行包中。容器在虚拟化环境中运行,从而将包含的应用程序与其环境隔离。
简而言之,云原生是一组思想集合和最佳实践,包括敏捷基础设施、微服务、DevOps、持续交付、容器编排等。
企业应用上云,也经历了从云托管到云原生的架构演进过程。上云初始阶段,多数企业仅仅是把应用从传统的IDC机房搬迁到云上的虚拟机,这是云托管模式,或者叫作基础设施即服务(IaaS)上云。
云并非把原先在物理服务器上运行的东西放到虚拟机里运行,真正的云化不仅是基础设施和平台的事情,应用也要改变传统的做法,实现云化的应用——应用的架构、应用的开发方式、应用部署和维护技术等都要做出改变,真正发挥云的弹性、动态调度、自动伸缩等一些传统IT所不具备的能力。
云原生技术旨在从架构设计、开发方式到部署维护的整个软件生命周期管理,都要基于云的特点进行重构,从而构建“原生为云”而设计的应用,这样才能在云上以最优的架构、最佳的模式运行,并充分利用和发挥云平台的弹性以及分布式优势。
为什么需要云原生
那么企业为什么需要云原生呢?可能基于以下几个方面。
1、业务的复杂化
随着技术的发展,业务规模的暴增,商业模式的创新,企业的应用系统也经历了单体应用、应用分层、分布式应用、云应用等不同应用形态。原来一个系统由一个团队就可以开发维护,慢慢发展到一个系统由数十个应用构成,需要几十个团队相互协作。
业务进入到微服务架构之后,每个团队独立负责一个或者若干个服务。应用的数量大幅增加,性能、一致性等问题越来越严重,架构变得越来越复杂,大量服务的治理也变得充满挑战。
那这些问题怎么解决呢?云原生技术的出现解耦了很多复杂性。
- 以Docker为代表的容器技术实现了应用与运行环境的解耦,众多业务应用负载可以被容器化,而且应用容器化满足了敏捷、可迁移、标准化的需求。
- Kubernetes的出现实现了资源编排调度与底层基础设施的解耦,应用和资源的管控也开始得心应手,容器编排实现资源编排、高效调度。
- 以Istio为代表的服务网格技术实现了服务实现与服务治理能力的解耦。
2、业务的创新性
互联网的推广,使业务的创新速度达到了前所未有的程度。每天有无数的新App产生。产品既需要更快的交付速度以便验证业务可行性,又需要更好的用户体验以便在众多的App中脱颖而出。
产品交付速度的提高不能以降低可用性为代价。提升可用性的一种方法就是少发布、多审核,这显然是和快速试错、快速交付、快速迭代的互联网思想背道而驰的。
那这些问题怎么解决呢?云原生应用已经重塑了软件的整个生命周期,从架构设计到开发,再到构建、交付和运维等所有环节。通过一系列产品、工具、方法减少变更导致的可用性问题,而不是因噎废食地控制变更、减少发布次数。
3、业务不确定性
云最主要的特性之一就是弹性,这也是企业应用上云最核心的需求。随着移动互联网的普及,全民带货、热门事件营销、秒杀大促等商业模式的推陈出新,企业的业务流量变得无法预估。当然,为了应对突发流量的冲击,企业也可以购买更多更高规格的服务器;但对于绝大部分业务平峰期以及低峰期, CPU都是空闲的,这会让资源使用率指标很低。
那这些问题怎么解决呢?云原生的核心技术之一是容器。
- 从应用架构层面,容器技术可以方便地支持微服务架构实现应用的无状态化,更加灵活地应对变化和弹性扩展。
- 从基础架构层面,容器技术带来的可移植性。容器解决了应用与运行环境的解耦,把运行环境也作为一种资源支持可编程式的管理。
- Kubernetes的出现则让资源的动态编排与管理变得更加简单,充分满足业务不确定对资源的弹性要求。
可以说,很多技术的创新都是业务带动的,使用云原生技术也是为了解决更多的业务问题。云原生不是一个产品,而是一套技术体系和一套方法论。企业数字化转型是思想先行,从内到外的整体变革,更确切地说,它是一种文化,更是一种潮流,是企业云计算战略的必然导向。