云原生是什么什么程序适合云原生CNCF又是什么
云原生是什么?什么程序适合云原生?CNCF又是什么?
云原生是什么?什么程序适合云原生?CNCF又是什么?
一、什么是云原生?
江湖规矩:先说结论
小结
:
简单的讲云原生不是一个产品,也不是某一种技术,而是一套技术体系和一套方法论的总称
。云原生即包含技术(微服务,容器等基础设施),也包含管理(DevOps,持续交付,重组等)。云原生也可以说是一系列云技术、企业管理方法的集合。其目前主要的技术包括:
容器化
,
微服务
,
DevOps
,
CI/CD(持续交付)
。
简单的说,就是为了让应用程序(项目,服务软件) 都运行在云上的解决方案,这样的方案就可以称为云原生
- 云 是和 本地 相对的,传统的应用必须跑在本地服务器上,现在的应用都跑在云上。总之,就是将各种软、硬件资源抽象为一种服务能力,直接提供给开发者使用。
- 原生 大概就是原始生长的意思,我们在开始设计应用的时候,就考虑到应用将来是运行在云环境里面的,要充分利用云资源的优点,比如️云服务的 弹性 和 分布式 优势。
二、如何开发出适合于在云环境里面部署的程序呢?
主要是需要遵循几个原则,也可以说是满足以下特点:
容器化
容器化分为容器运行时技术和容器编排技术,它的好处在于运维的时候不需要再关心每个服务所使用的技术栈,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护,现在比较流行的工具是
docker
和
Kubernetes
。
容器化的产生也是又一段历史的,后面再细聊
微服务
微服务解决的是我们软件开发中一直追求的 高内聚+低耦合 ,
与微服务对应的是我们传统的单体应用,例如一个tomcat容器中部署一个超大型管理系统的场景,
而微服务的本质是把一块大饼分成若干块低耦合的小饼,
比如一块小饼专门负责接收外部的数据,一块小饼专门负责响应前台的操作,小饼可以进一步拆分,比如负责接收外部数据的小饼可以继续分成多块负责接收不同类型数据的小饼,这样每个小饼出问题了,其它小饼还能正常对外提供服务。
微服务是一种用于构建应用的架构方案。微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能。 每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。
CI/CD 持续交付
CI/CD的核心概念是持续集成、持续交付和持续部署 。是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。
持续交付的意思就是:在不影响用户使用服务的前提下频繁把新功能发布给用户使用 。
要做到对用户不受影响,对于研发的设计要求是非常高的,我们很多时候可能因为前期某一个不合理的表设计就会让用户感觉到明显的产品变化,这块儿只能在团队中持续打磨,再有了一定抽象能力和产品能力以后才能有所进步。
DevOps
DevOps
这个词,其实就是
Development
和
Operations
两个词的组合。
DevOps
的意思就是开发和运维不再是分开的两个团队,而是你中有我,我中有你的一个团队。
开发和运维由一个团队完成,快速适应业务变化,以更加定制化的方式实现客户需求,提供超出客户预期的产品
。
从目标来看,
DevOps
就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠。
三、CNCF又是什么?
CNCF,英文全称为
Cloud Native Computing Foundation
,中文译为“
云原生计算基金会
”。成立于2015年12月11日。
CNCF是Linux基金会旗下的基金会,可以理解为一个非盈利组织。
当年谷歌内部一直用于编排容器的Borg项目开源了,为了该项目更好的发展,谷歌与Linux基金会一起创办了CNCF。同时,谷歌把Borg用Go语言重写,更名为Kubernetes并捐赠给了CNCF。
这个组织的初衷或者愿景:
- 推动云原生计算可持续发展 ;
- 帮助云原生技术开发人员快速地构建出色的产品 ;
CNCF通过建立社区、管理众多开源项目等手段来推广技术和生态系统发展。
云原生计算技术栈非常宽阔,它囊括了存储、计算、编排、调度、CI/CD、DevOps、服务治理、服务网关等诸多领域。
因此与之相对应的开源项目就非常多。CNCF基金会与Linux基金会、Apache基金会类似,负责社区的管理、技术的推广,使得云原生领域的技术不断成长。
- 比如,源于谷歌的Kubernetes(容器编排引擎)开源项目就被吸收到CNCF,Kubernetes也因此受到更多的人关注。
- 再比如,源于华为的KubeEdge(边缘计算平台)开源项目也被CNCF吸纳,也吸引了很多人参与进来。
CNCF的愿景: 为云原生软件构建可持续生态系统
CNCF全景图:
四、展望
云原生不只是说要迁移到云,而是要充分利用云基础设施和服务的独特性来快速交付业务价值。
以前的基础设施是静态的:
- CPU、网卡、磁盘、内存、GPU…
- 机柜、服务器、交换机…
现在的则是动态的:
动态启动的计算单元(VM,容器)
服务编排平台(K8s)
Serverless(Lambda/Cloud Function)
Serverless拆开看server 服务, less 无 。合在一起称为无服务 ,即不需要服务器。
站在用户的角度考虑问题,用户只需要使用云服务器即可,在云服务器所有的基础环境,软件环境都不需要用户自己考虑。
未来:服务开发都是Serverless,企业都构建了自己的私有云环境,或者是使用公有云环境。
云存储(EBS、S3)
云厂商会自己控制硬件(设计、生产),并对业务层透明
五、总结
不难发现,云原生是一个很广的概念,想要开发一个支持云原生的应用并不难,
可能就是简单的实现可基于容器部署、使用
Kubernetes
进行编排与调度,集成
CI/CD
工具以及
Prometheus
监控工具等
。
但是,想要构建一个真正云原生的系统,要求我们考虑到系统的方方面面,只有各方面能力的提升,才能在云原生时代构建出云原生的应用或系统。