云原生技术:我们为何需要了解?

发表时间: 2022-11-22 00:10

时代在发展,技术在迭代。传统的软件架构从自建服务架构模式转变为云计算模式

到现在发展为云原生模式。一起来学习一下云原生到底给我们带来了什么变化。

什么是云原生

云原生可以拆分为两个单词:云(Cloud),原生( Native)。其实这里还隐藏了一个词——“计算”(Computing),因为云原生本质上是一种与云计算(Cloud Computing)相同的计算方式,因此通常我们在说云原生的时候,实际上是暗指云原生计算(Cloud Native Computing)。

传统的自建的架构有很多缺点:

  • 扩容维护费力,业务突然激增都来不及操作
  • 安全系差,应用的部署权限、整体流程安全漏洞太多
  • 部署流程不规范,缺少自动化的过程。好点的会搞个运维脚本,差点的完全人肉运维。每次部署都是一次生死考验

在轰轰烈烈的上云运动中,有逐渐演化为云原生。

云原生:是一套构建、运行应用的技术体系和方法论,一切的开发都基于云,技术栈都是基于开源、开放的技术标准。


所以,从云原生的定位可以看到,云原生包含大量新的PaaS层技术和新的开发理念,是释放云计算价值的最短路径,也推动着云计算的再升级。

云原生带来了哪些技术上的变化

云原生不仅是对使用云的应用架构的再升级,也是对云平台的技术和云服务的再升级。

从构建现代化应用的角度,我们可以发现,云原生对应用的重构体现在应用开发的整个生命周期中

  1. 重塑研发流水线

应用持续交付能力往往会许多的挑战,比如配置基线,版本管理,自动化。这些有时候是牵一发而动全身,很容易出现差错。

应用云原生之后我们可以通过容器结合GitOps和不可变的基础设施,对整个应用打包和分发就可实现软件环境的整体部署。整个过程高度自动化,支持版本追踪和回溯,也解决了持续发布遇到的挑战,减少了CI/CD中错误发生的几率,从而提高了整体的质量和效率。

  1. 重新定义软件交付模式

在传统软件交付模式下,交付人员需要学习手册/文档,然后完成应用的 "安装配置" 和“与老系统的集成”方面的工作。

安装配置点:包括硬件上的安装配置、软件的安装配置和应用本身的安装配置。

集成点:包括新环境中硬件、软件和老系统的集成工作(如:监控、服务调用、消息集成等)

云原生软件交付模式主要有如下几个变化:

1、利用容器做整体交付

整体交付减少容器内部组件之间的安装配置工作可通过工具和脚本自动完成软件交付,提升效率

2、将Git作为“Single Version of Truth”(唯一真实版本)

  • Git作为交付和运维的仓库,记录了所有软件变更的版本、配置参数、脚本、用户名和密码等信息
  • 所有脚本、工具和Kubernetes的Operator,都读取Git中的信息作为事实的唯一来源,即使是做版本升级或回滚,以及变更评审,都以Git中的信息为准。

3、声明式API

  • 声明式API首先是“告诉”系统期望的目标状态是什么(如:在这种环境下部署需要用到两个实例)
  • 声明式API实际上它是一种开发理念的彻底升级,因为系统更多的是关注需要什么(达到什么状态),所有的“如何做”都是围绕这个目标状态来服务的

4、尽量采用OpenAPI作为系统间的集成方式

  • 标准化的OpenAPI更有利于系统间的集成,因为OpenAPI有明确的契约描述或接口规格描述,且提供了各种开放的工具,可以用来做IoT(连通性测试)、SIT(集成测试)等
  • 其开放接口(比如,基于RESTful)的特性,可以实现快速集成,从而提升集成的效率

所以,云原生软件交付模式可以方便地提升软件交付过程的自动化程度,更便于企业实施CI/CD,也可以极大地提升交付效率。

  1. 运维模式的升级

传统运维更多的是面向操作的运维,其本质是基于规则的运维。也就是运维人员提前准备好规则 ,在满足规则的情况下采取相应的操作。

云原生运维可以基于标准化基础设施的运维,通过完整的可观测性实现系统中各类异常的实时可见,也可以结合声明式API实现自动化运维

  1. 架构的升级

应用使用云原生技术有如下两种方式:

  • re-platform: 这种方式是在不重构代码或不重写代码的情况下,尽量采用云原生技术。(如:使用容器对应用进行打包和部署,把Kafka替换为云服务,把MySQL替换为RDS)
  • re-build: 这种方式需要重构甚至完全重写应用 (如:把单体架构(Architecture)改为微服务架构,实施存储状态分离,业务实现采用Serverless技术编写,采用事件驱动架构)

re-platform与re-build,两者最大的差别是前者没有进行架构升级,这样就很难构建更好的现代化应用。

总结

云原生,就是在上云的过程中,充分发挥云平台的弹性计算、弹性存储的优势,尽量把应用设计成适合云计算的架构,把部署设计成简单易用的流程,这样才能实现业务快速上线,快速迭代。

其真正的目的:降低开发成本,是开发者专注于业务。提升软件交付能力,专业的人做专业的事