1.云计算的演进变革
1.1 虚拟化技术成熟
2000年前后,虚拟化技术快速发展,尤其是VMware在2001年发布了首个x86服务器虚拟化产品ESX,大幅提升了硬件资源利用率。随着虚拟化技术成熟,软件定义网络(SDN)和软件定义存储(SDS)等概念应运而生,进一步提高了数据中心的运营效率和灵活性。这些技术的发展标志着云计算时代的到来,彻底改变了IT基础设施的构建和管理方式。
1.2 云计算的演进
随着虚拟化技术的成熟,云计算市场开始蓬勃发展,催生了多种云服务模型,如IaaS、PaaS、CaaS和FaaS,以及公有云、私有云和混合云等不同的部署模式。这些服务模型和技术的发展极大地推动了云计算的普及和创新,同时也为企业提供了灵活性和扩展性。
- IaaS (Infrastructure as a Service): 提供虚拟化的计算资源作为服务,帮助企业减少了对物理硬件的依赖,将资本支出转变为运营支出。
- PaaS (Platform as a Service): 提供开发平台和解决方案作为服务,使开发者能够专注于应用程序的构建和开发,而无需管理操作系统、数据库和其他开发工具。
- 开源IaaS 如OpenStack,使得大型企业能够构建和管理自己的私有云,提供了更多的灵活性和控制权。
- 开源PaaS 和容器技术的兴起,如Docker和Kubernetes,进一步简化了应用的部署、扩展和管理过程。
- CaaS (Container as a Service): 提供容器管理和编排作为服务,简化了容器化应用的部署和运维。
- FaaS (Function as a Service): 允许开发者编写并部署代码功能,而无需考虑服务器的管理和维护,极大地提高了开发效率和弹性。
1.3 云计算的二次进化 - 容器技术
容器技术显著改变了软件开发,其中Docker(2013年)引领了容器普及,使应用部署变得灵活。随后,Kubernetes(2017年末)成为容器编排领域的领导者,推动了云计算向更高效的管理和自动化发展。Istio的发布(2018年)进一步成熟了服务网格技术,为服务治理开辟了新的可能性。这些技术共同推动了软件开发和云计算的现代化进程。
1.4 云计算演进的总结
对于 XaaS 的一路演进,可以简单归纳为:
- 有了 IaaS,客户不用关注物理机器,只需关注基础架构及应用程序。
- 有了 PaaS,客户不用关注基础架构,只需关注应用程序。
- 有了 SaaS,客户只需关注数据。
- 有了 CaaS …
图片
2.云原生出现的背景
2.1 软件正在改变世界
到2023年,互联网的影响已遍及各行各业,许多软件变得像道路、桥梁和电网一样,成为国家经济的基础设施。作者对互联网的未来规模进行了预测,认为在未来10年内,全球将有至少50亿人使用智能手机,这意味着每个人都能随时随地通过手机访问互联网。
- 问题:移动互联网如此巨大的用户规模会对软件开发有什么影响?
- 问题:已经成为社会基础设施的软件如果崩溃了,会出现什么影响?阿里云、滴滴…
2.2 移动互联网在加剧变化
在移动互联网时代蓬勃发展的公司共享几个关键特征,这些特征是它们成功的基石:
- 快速迭代与持续创新:这些公司能够迅速适应市场变化,不断推出新产品或服务,保持竞争力。
- 确保服务持续性:他们投入资源确保服务高可用,有效应对各种错误和中断,减少对用户的影响。
- 弹性和可扩展性:随着用户基数的快速增长,这些公司构建了能够灵活扩展的系统,以满足不断变化的需求。
- 以移动为中心的用户体验:他们重视移动用户的体验,设计以移动优先为原则的产品和服务,满足移动用户的特殊需求。
2.3 软件架构变化的趋向
以解决“当前问题”为目的推进,软件架构逐渐演进为云原生架构应该的样子
在现代软件开发实践中,随着应用的规模和复杂度增加,采取了一系列措施来解决不同层面的挑战:
- 采用微服务架构解决单体架构的复杂性:通过将大型应用拆分为小型、独立的服务,每个服务执行单一业务功能,提高了系统的可维护性和可扩展性。
- 引入治理框架和监控解决分布式治理问题:随着服务数量的增加,为了有效管理和监控这些服务,采用了治理框架和监控工具来确保系统的健康和性能。
- 使用容器解决微服务部署问题:容器技术,如Docker,提供了一种轻量级、一致的环境来打包和部署微服务,简化了部署过程并提高了环境一致性。
- 使用Kubernetes解决容器的编排和调度问题:Kubernetes成为容器编排的事实标准,它自动化了容器的部署、扩展和管理,极大地提高了运维效率。
- 使用Service Mesh解决服务治理的侵入性问题:Service Mesh如Istio提供了一个透明的层来处理服务间的通信、监控和安全,而不需要改变服务本身的代码,减少了开发负担。
- 将项目整体复杂度交给云基础设施:通过使用云服务,如AWS、Azure或Google Cloud,开发团队可以利用云平台提供的“托管服务”来简化底层基础设施的管理,专注于业务逻辑开发。无服务器架构(Serverless)和基础设施即代码(Infrastructure as Code)进一步简化了资源管理,使得应用部署和运维更加灵活和高效。
2.4 云原生诞生
软件对各行各业的渗透和对世界的改变,以及移动互联网时代巨大的用户基数下快速变更和不断创新的需求对软件开发方式带来的巨大推动力,我们能看到这样的变化:
图片
3. 云原生的定义和目标
云原生概念随时间不断演进,含义多变且常被营销用语混淆。CNCF定义的云原生目前为v1.0版本,未来可能更新以反映技术进步。这反映了技术界对提升软件开发效率和可靠性的持续追求。
3.2 云原生的目标
图片
4.云原生代表技术
云原生技术代表了一种新的软件开发、部署和管理方法,旨在充分利用云计算的灵活性、可扩展性和敏捷性。以下是云原生技术的几个关键方向及其演进:
容器技术
容器技术提供了一种轻量级的、可移植的软件打包方式,允许应用和其依赖在资源隔离的环境中运行。Docker的出现极大地推动了容器技术的普及,后续技术如containerd和CRI-O进一步标准化了容器运行时接口。
图片
容器技术的进化
容器技术的进化包括容器编排和管理工具的发展,其中Kubernetes成为事实上的标准,提供了自动部署、扩展和运行应用容器的能力。
图片
CNCF生态
云原生计算基金会(CNCF)推动了云原生技术生态的发展,支持和孵化了包括Kubernetes、Prometheus和Envoy等多个开源项目,形成了一个全面的云原生技术栈。
图片
不可变基础设施
不可变基础设施的概念是指使用预配置和版本化的镜像来部署和管理基础设施,这种方式提高了系统的可靠性和安全性。
图片
建镜像运行容器之后,如果出现问题,我们不会在容器内修改解决,而是在容器构建阶段去解决。容器的角度看,镜像就是一个不可变基础设施,正是容器技术的出现使不同环境的标准化配置成为可能,我们可以快速拉起成千上万一模一样的服务,服务的版本升级、回滚也成为常态,进而以不可变基础设施敏捷管理大规模服务逐步变成可能。
微服务的进化
微服务架构通过将应用拆分为一系列小的、独立的服务来提高可维护性和可扩展性。这种架构模式的采用促进了开发和部署流程的敏捷性。
图片
微服务治理再次进化
Kubernetes的兴起确实为微服务架构开启了新的篇章,提供了容器的编排和管理能力,但在处理微服务之间复杂交互的分布式问题时,它的能力仍有限。这些问题往往存在于应用系统与基础设施的交界处,需要更细粒度的服务管理解决方案。
这种需求催生了服务网格(Service Mesh)技术。服务网格通过在每个服务旁部署一个轻量级的网络代理(通常称为Sidecar)来管理服务间的通信,实现服务发现、安全通信、负载均衡和故障恢复等功能。这样,即使在底层基础设施不直接支持这些高级功能的情况下,应用也能实现复杂的服务间交互。
服务网格提供了一种在容器之下、应用层面进行细粒度服务管理的方式,使开发者能够专注于业务逻辑的开发,而将网络通信的复杂性交给服务网格来处理。这种架构解决了应用层面的分布式系统问题,形成了网络状的服务依赖关系,从而实现了更为高效和可靠的微服务管理。
图片
服务网格的进化
服务网格解决了微服务架构中的服务发现、负载均衡、故障恢复、安全和配置管理等问题,成为微服务部署的关键组件。
图片
DevOps
DevOps文化和实践将软件开发(Dev)和IT运维(Ops)的人员、流程和工具整合在一起,以提高敏捷性、速度和效率。云原生技术加速了DevOps实践的采用。
图片
微服务架构、容器技术和云计算的发展简化了DevOps的实施,使其近几年内受到企业的广泛关注和采纳。这些技术提高了软件开发和部署的灵活性和效率,从而推动了DevOps理念的普及。
图片
云原生技术总结
云原生技术通过容器、微服务、DevOps和持续集成/持续部署(CI/CD)、服务网格等技术,实现了软件开发和部署的高效、可靠和可扩展。这些技术共同支持了一个灵活、动态的云计算环境,使得应用可以在最适合的时刻以最适合的规模运行。
图片