一、云原生发展历史    

        云原生概念最早起源于2013年,由 Matt Stine 首次提出“Cloud Native”这一术语,这个概念强调了应用需要充分利用云的优势,如弹性、可扩展性和服务化。2015年,Matt Stine出版了《迁移到云原生架构》一书,系统阐述了云原生的设计原则和实践方法,包括微服务、持续交付、DevOps文化等关键要素。

        Docker 的发布标志着容器技术的普及,它是云原生技术栈中的基石之一,为应用的打包、部署和运行提供了标准化、轻量级的解决方案。

        2014年开源了 Kubernetes 项目,极大的促进了容器的编排和管理的自动化,使得大规模部署和运维云原生称为可能。

        随着 Docker 与 Kubernetes 的广泛应用,围绕容器和微服务的周边工具和服务迅速发展,形成了完整的云原生技术栈。2015年成立的CNCF(云原生计算基金会)定义了云原生的三大支柱——容器化、微服务、DevOPS,并开始推广服务网站、不可变基础设施等概念。

        云原生技术逐渐成为企业数字化转型的首选方案,大型科技公司如腾讯、阿里巴巴等纷纷拥抱云原生,不仅在内部大规模采用,还推出了一系列云原生产品和服务。同时,云原生技术的应用场景不断拓展,涵盖了金融、制造、零售等多个行业,推动了技术的持续创新和行业标准的形成。

二、单体架构

        单体架构就是将所有的业务维护在一个巨无霸的系统中,一开始业务比较少时开发效率确实还可以,部署也方便。但是随着业务的发展,其缺点也逐渐显现出来,比如沟通成本高、无法单独上线回滚、开发中相互干扰、维护成本高等缺点。单体架构的访问形式如图:

  

三、微服务架构

         微服务架构是对单体架构服务的拆分,可以采用主链路规划,将一个大的单体服务拆分成若干个小的服务。服务拆分后有很多好处,如:

  1. 每个服务都有自己的团队维护,开发效率高,减少了跨团队沟通,提高系统的可维护性
  2. 每个服务都有自己的数据库等配套设施,降低了耦合,减少了互相影响
  3. 每个微服务可以采用异构语言进行搭建而互不影响,这样更加灵活
  4. 可以快速迭代上线而不影响其他业务,如果出现问题也能做到快速回滚
  5. 资源利用率更高,可以将资源定向划拨给核心的服务,将共享变为独享,提高其可用性和性能

        云原生与微服务架构相辅相成互相促进,主要体现在以下几个方面。

        每个微服务可以独立部署和扩展,在云原生环境中,这使得可以根据实际需求动态调整资源分配,迅速响应流量变化。

        微服务支持快速迭代开发,云原生的 CI/CD 流程和基础设施自动化进一步加速了这一过程,使得软件更新能够频繁且可靠的交付。

        微服务拆分后降低了故障传播风险,不会影响整个系统,结合云原生的自我修复和容错机制,如 K8s 的自我恢复能力,可以进一步提升系统的稳定性和可用性。

        由于微服务能够精细化的管理资源,云原生环境下的自动伸缩、按需付费模式和资源优化组合策略,可以显著降低运营成本,提高资源利用率。

        在云原生和微服务架构中,强大的观测工具是必不可少的,能帮助运维团队快速定位和解决问题,以确保服务质量。

四、云原生架构

        云原生架构主要以容器化技术 Docker 和 容器编排技术 K8s 组成。以前开发完成后,我们的交付物通常是一个 Jar 包,然后部署到服务器中运行,有了容器技术后,我们提交的交付物变成了一个容器镜像,容器镜像是由文件系统和参数组成的轻量级、独立的、可执行的软件包,包含了运行某个软件所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件等,如下图:

        4.1 云原生架构组成

        云原生的核心组成部分包括:

  • 容器化:应用程序及其依赖被打包到轻量级的容器中,如Docker容器,这使得应用可以在任何支持容器的环境中无差异运行,提高了可移植性和隔离性。
  • 微服务架构:应用被分解为一系列小而专的服务,每个服务负责一个特定的功能,可以独立开发、部署和扩展,提高了系统的灵活性和可维护性。
  • 服务网格(Service Mesh):如 Istio、Linkerd等,为服务间通信提供了一层抽象,负责服务发现、负载均衡、加密、监控等,使得微服务之间的交互更加安全和高效。
  • 持续集成/持续部署(CI /CD):通过自动化工具(如 Jenkins、GitLab CI/CD等)实现代码的快速迭代和自动部署,加速软件交付流程。
  • 声明式基础设施:使用如 Kubernetes YAML 文件等声明式配置来定义期望的系统状态,而非详细的步骤指令,让系统自动达到并维持该状态。
  • 可观测性:包括日志、监控和追踪(如ELK Stack、Prometheus、Jaeger),确保能够快速定位和解决问题。
  • DevOps:强调开发(Dev)和运维(Ops)团队的紧密合作,自动化运维认为,促进快速反馈和持续改进。

        4.2 云原生优势

        弹性和可扩展性:云原生应用设计为能在需求增长或下降时自动扩缩容,借助服务编排工具 K8s 可以根据实时流量自动添加或删除实例,确保应用始终保持高性能和高可用性,同时避免资源浪费。

        高可用性和容错性:通过微服务架构和云平台的负载均衡、故障切换功能,云原生应用能够有效应对单点故障。即使部分服务出现故障,也不会影响整个系统的正常运行,提高了系统的稳定性。

        快速迭代与持续交付:云原生倡导DevOps文化,结合CI/CD(持续集成/持续部署)流程,使得软件的构建、测试、部署自动化,加速了应用的迭代速度,缩短了市场响应时间。

        服务解耦与模块化:微服务架构让每个服务独立开发、部署和扩展,减少了服务间的依赖,便于团队专注于各自服务的优化,提高了开发效率和系统的可维护性。

        标准化和可移植性:基于容器化和标准化的云原生技术栈(如Docker、K8s),应用可在不同云环境或数据中心间无缝迁移,提高了灵活性和供应商的选择自由度。

        可观测性:云原生环境强调全面的可观测性,包括日志、监控和追踪,结合自动化运维工具,使得问题快速定位和解决,减少了人工干预,降低了维护负担。

五、总结

        云原生技术栈的采用,使组织能够在公有云、私有云和混合云等环境中快速构建、部署和运行应用,适应快速变化的市场需求,同时也促进了开发和运维团队的紧密协作,推动了业务的持续创新和快速增长。

        

往期经典推荐:

Kubernetes: 从零开始理解K8s架构-CSDN博客

Kafka VS RabbitMQ,架构师教你如何选择_消息中间件选型分析-CSDN博客

高并发架构设计模板-CSDN博客

TiDB高手进阶:揭秘自增ID热点现象与高级调优技巧-CSDN博客

Redis性能大挑战:深入剖析缓存抖动现象及有效应对的战术指南-CSDN博客

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐