云原生的定义
云原生指构建和运行应用以充分利用通过云交付模式交付的分布式计算。云原生应用旨在充分利用云平台特有的可扩展性、弹性和灵活性优势。
根据云原生计算基金会 (CNCF) 的定义,云原生技术可帮助企业在公有云、私有云和混合云上构建和运行可扩展的应用。云原生方法的典型特性包括容器、服务网格、微服务、不可变基础设施以及声明式应用编程接口 (API) 等等。
借助这些特性,企业可以获得松散耦合的弹性、可管理、可观察的系统,工程师也能尽可能减轻工作负担,高频实施重大变更。
云原生之核心技术
容器
容器(container)这一概念最早出现在Linux中出现的,又称LXC(Linux Container),主要是通过Cgroups的资源管理能力和Namespace的资源隔离能力结合在一起实现进程级别的隔离。
K8s
全称是Kubernetes,由Google 基于 Borg 开源的容器编排调度系统,是一种基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,用户不需要再过度的关注资源的管理问题,降低操作的复杂度,提高了大规模容器集群管理的便捷性。
微服务(Microservices)
微服务则是一种用于构建应用的架构方案,微服务架构有别于为传统的单体应用的是将应用拆分成多个核心功能,每个功能都被称为一个独立的服务,可以单独构建和部署,其中某个服务出现故障也不会影响其他的功能模块,这句体现了其针对特定服务发布,影响小,风险小等特点。
服务网格(Service Mesh)
服务网格指的是用于微服务应用的可配置基础架构层。在使用服务网格时通常会提供一个sidecar代理实例,主要处理 service 间的通信、监控、以及一些安全相关的考量,每个serivce里面都会有一个sidecar,同样也提供了服务发现、负载均衡、授权等功能。
无服务(Serverless)
根据 CNCF 的定义,Serverless 是指构建和运行不需要服务器管理的应用程序的概念。即开发人员无需关注底层的基础设施,只需要关注应用程序的业务本身就行,且该服务是可以自动扩展。
DevOps
早期的项目使用的是‘瀑布模型’进行软件交付,即一个阶段所有的完成工作之后再往下一个阶段,但这样的模式无法满足业务快速开发交付及变更需求的情况,于是后面就出现了敏捷开发这一概念,即一种快速应对需求变化软件开发能力,而DevOps就是基于敏捷开发将软件开发/测试人员/IT运维关联在一起,通过工具、组织等方式使开发、测试、发布流程自动化,软件发布频繁,高效。
云(Cloud)
常常听到的‘公有云’,‘私有云’,‘混合云’都是基于这个生态衍生出来的各种场景,不同的云搭建环境,所需资源亦有所不同,比如公有云是在互联网上发布的云计算服务,而私有云则是在公司内网发布的云计算服务,目前没有一种云计算类型可以解决所有场景出现的问题,怎么选择适合自己的场景则需要根据技术需求决定。
云原生应用的优势
云原生应用,或者说原生云应用 (NCA),是专为云计算架构而设计的程序。它们具有多重优势。
独立:云原生应用架构支持企业构建相互独立的云原生应用,同时单独管理和部署各个云原生应用。
可恢复性:即便基础设施发生故障,云原生应用也能继续运行,保持联机状态。
基于标准:为实现出色的互操作性和工作负载可移植性,云原生服务通常基于开源和标准技术构建而成。这有助于降低供应商依赖,提高可移植性。
业务敏捷性:云原生应用支持跨网络灵活部署,同时相比传统应用规模更小,更易于开发、部署和迭代。
自动化:云原生应用支持 DevOps 自动化特性,支持持续交付以及持续部署定期软件变更。此外,开发人员还可以使用蓝绿部署和金丝雀部署等方法来优化应用,避免对用户体验产生任何不利影响。
零停机:借助 Kubernetes 等容器编排器,企业可以零停机地部署软件更新。