一、云原生定义【简单说就是基于云的应用系统,从云里生出来的应用系统】
云原生是指应用从设计开始就是基于云服务的基础上完成的应用部署扩容等使用方面的应用系统。
借助权威定义,即:2015年谷歌主导CNCF成立之后,给出的1.0云原生定义主要:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。
三个特点:容器化封装(方便部署)、动态化管理(方便扩容)、面向微服务解耦(方便插拔)。
- 容器化封装:以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离
- 动态管理:通过集中式的编排调度系统来动态的管理和调度。
- 面向微服务:明确服务间的依赖,互相解耦。
二、云原生所用到的主要技术
1、容器技术(源自操作系统)
容器(container)这一概念最早出现在Linux中出现的,又称LXC(Linux Container),主要是通过Cgroups的资源管理能力和Namespace的资源隔离能力结合在一起实现进程级别的隔离。
2、K8s(容器管理工具)
全称是Kubernetes,由Google 基于 Borg 开源的容器编排调度系统,是一种基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,用户不需要再过度的关注资源的管理问题,降低操作的复杂度,提高了大规模容器集群管理的便捷性。
3、微服务(Microservices)(一种面向敏捷的架构设计理念)
微服务则是一种用于构建应用的架构方案,微服务架构有别于为传统的单体应用的是将应用拆分成多个核心功能,每个功能都被称为一个独立的服务,可以单独构建和部署,其中某个服务出现故障也不会影响其他的功能模块,这句体现了其针对特定服务发布,影响小,风险小等特点。
4、服务网格(Service Mesh)(对大量微服务的管理方案)
服务网格指的是用于微服务应用的可配置基础架构层。在使用服务网格时通常会提供一个sidecar【国内有的翻译是边车】代理实例,主要处理 service 间的通信、监控、以及一些安全相关的考量,每个serivce里面都会有一个sidecar,同样也提供了服务发现、负载均衡、授权等功能。
5、无服务(Serverless)(貌似目前就是这么干的,大家封装自己的强大底层,开发重点关注业务需求,技术实现直接使用)
根据 CNCF 的定义,Serverless 是指构建和运行不需要服务器管理的应用程序的概念。即开发人员无需关注底层的基础设施,只需要关注应用程序的业务本身就行,且该服务是可以自动扩展。
6、DevOps(自动化开发的解决方案之一)
早期的项目使用的是‘瀑布模型’进行软件交付,即一个阶段所有的完成工作之后再往下一个阶段,但这样的模式无法满足业务快速开发交付及变更需求的情况,于是后面就出现了敏捷开发这一概念,即一种快速应对需求变化软件开发能力,而DevOps就是基于敏捷开发将软件开发/测试人员/IT运维关联在一起,通过工具、组织等方式使开发、测试、发布流程自动化,软件发布频繁,高效。
7、CI/CD(极限编程、敏捷开发等思想的倒逼结果)
持续集成(CONTINUOUS INTEGRATION,CI),其核心是新提交的代码与原代码正确的集成。开发人员多次、频繁的将代码提交到代码仓库中,在合并到指定分支之前,对新提交上来的内容进行编译、自动化检测(如:代码格式检测)的验证,这样的过程既保证了代码的完整性、安全性,为后面的工作提供了质量保证。
持续交付(CONTINUOUS DELIVERY,CD),其重点不在代码本身,而是可以交付的产品上。在发布到生产环境之前,对新增的代码进行测试(test) -> 模拟(staging) -> 生产(produciton),即简化繁琐的发布流程,又保障新添加的代码在生产环境是可用的。
CICD关注整个开发到交付的过程,中间的测试、模拟、自动部署等都是整条生产链上的所需要的每一步都是需要去关注的。而DevOps则更关注于各部门、不同岗位之间的协同过程,尤其是开发和运维之间的沟通壁垒。总的来说,DevOps是CICD思想的延伸,CICD是DevOps的基础核心,如果没有CICD自动化的工具和流程,DevOps是没有意义的。
8、云(Cloud)(虚拟化技术的最佳实践之一)
常常听到的‘公有云’,‘私有云’,‘混合云’都是基于这个生态衍生出来的各种场景,不同的云搭建环境,所需资源亦有所不同,比如公有云是在互联网上发布的云计算服务,而私有云则是在公司内网发布的云计算服务,目前没有一种云计算类型可以解决所有场景出现的问题,怎么选择适合自己的场景则需要根据技术需求决定。
三、总结
当云无处不在的时候,应用会自然进入云原生的时代。貌似现在已经进入了,且云原生的覆盖程度基于大家上云的进展情况。上云的最大好处是节约成本,最大的不好就是“合规”和“万一出问题的顾虑”。不过时代洪流不因个人意志为转移,况且是国家战略情况下呢?