【云原生】这么火,你不来了解下?
一、前言
随着云计算的不断发展与完善。在这样的浪潮中,各种我们熟悉又陌生的词汇层出不穷。云原生( CloudNative )、 元宇宙 ( Metaverse )也在这波浪潮中应运而生。
不知道大家是不是跟我一样,都听说它们很火很火,活到什么程度呢?每天只要你一打开公众号、博客平台等等,都在说云原生。
一个公司新产品上线,也会在产品名前加上“云”。
如果一个产品不带着“云”,或者你不知道云原生。你就更不上时代步伐了。
那么到底什么才是云原生呢?
想必大家跟我一样好奇,会去网上搜罗各种云原生相关文章来看。看完文章之后呢,完全就是雾里看花,云里雾里的,对云原生概念更是一知半解。
相信会由一些小伙伴可能会跟我一样,陷入自我怀疑当中,怀疑自己是不是太笨了,理解不了。
事后想想,其实也没必要。就像自己关注的博主“三太子敖丙”经常说的,你知道的越多,不知道的越多
二、大家对云原生的理解
看了很多文章,视频。网上对云原生的理解也是众说纷纭,每个人都有自己的理解。
下面列举一些网友的说法:
- 云原生是基于云计算 ,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系
- 云原生是Cloud +Native,将云和原生分开,就是原生应用上云的一整套解决方案
- 云原生是指应用上云后可以 利用和发挥云平台的弹性+分布式优势
- 云原生是一种架构设计模式,帮助我们解决传统应用存在的各种问题
三、云原生的产生
目前比较权威的定义主要来自Pivotal公司和云原生计算基金会 ( CNCF )
①Pivotal公司定义
- Pivotal公司是云原生应用的提出者
- 2015年,提出云原生应用架构需要具有:12因素、微服务、 自敏捷架构、基于API协作、扛脆弱性 的特性
- 2017年, Pivotal对云原生概括为4个要点:DevOps+持续交付+微服务+容器
② CNCF的定义
- 起初CNCF对云原生(Cloud Native)的定义包含以下三个方面:应用容器化、面向微服务架构、应用支持容器的编排调度
- 2018年,随着云原生生态的不断壮大 , CNCF对云原生进行了重新定位 。 云原生技术有利于各组织在公有云、私有云和混合云等环境中,构建、运行和可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
说了这么多,还是很乱。其实可以简单的把云原生理解为 **DevOps+持续交付+微服务+容器 **。这样云原生在脑中就清晰了很多,也很容易理解了。
四、DevOps+持续交付+微服务+容器化的理解
①DevOps
DevOps(Development & Operations,开发和运维)是软件开发人员和 IT 运维人员之间的合作过程 ,最终的目的就是让流程实现自动化。 DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。
②持续交付
在日常新功能模块开发完成后,我们经常会面临一个问题,新开发的功能模块要怎么打版更新,才会对客户的影响最小,在更新一些class文件时候,一般也要伴随着停机重启应用。
而持续交付,正是要解决这个传统模式的更新。做到不停机更新,开发版和稳定版本并存。 避免重复性劳动,减少人工操作的错误; 更频繁地迭代 更新;提高产品质量;
③ 微服务
传统的应用一般都是单体应用,单体应用经常会面临这么一个问题,这个功能出问题了,怎么另外一个功能也用不了了。作为开发运维人员,我们经常就会面临这样的灵魂拷问: 为啥这两个会互相影响?
而微服务的 应运而生 正是为了解决以上问题,降低各个模块之间的耦合度,也就是我们经常听到的解耦。不把所有鸡蛋放到一个篮子里,把一块蛋糕分成若干份低耦合的小块,各块负责不同的功能。
④容器化
我们在部署一个新应用到新的服务器的时候,往往会面临在自己电脑上跑的好好的,怎么应用部署到生产服务器就启不起来的尴尬局面。应用启不起来,原因可能很多。比如缺少配置文件、生产环境跟我们开发、测试时候的环境不一致又或者少了什么数据。
而Dockers作为一个“集装箱”的身份出现,可以把应用需要的环境,各种配置文件、运行文件打包隔离运行,以保证我们开发出来的程序,不管部署到那台服务器上,都不会因为缺少东西,或者环境问题而运行不正常。
集装箱顾名思义,就是把各种零碎的物品收集到一个容器里,包装零散的物件不容易丢失。
五、云原生技术栈
下面是官网上找的一张图,真是森罗万象,看得我们眼花缭乱。
图片地址:
【 https://landscape.cncf.io/?category=app-definition-and-development&grouping=category 】
六、怎么学习云原生呢?
看到官网云原生的技术栈图,你慌了没有?反正我是慌了,不知道从什么入手才好。
作为一名Java攻城狮,该如何入手云原生呢?
答案是: Docker+k8s+KubeSphere+Spring Cloud +DevOps 。当然了,这个不是我说的。前面B站看云原生视频的时候,雷神大佬总结的。
上面的名词对我们来说应该不陌生了。这里不做过多的说明,只简单说下,感兴趣的小伙伴可以关注后面文章。
Ⅰ docker
① 什么是docker?
docker是一个用来装应用的容器,就像杯子可以装水,笔筒可以放笔,书包可以放书,可以把hello word放在docker中,可以把网站放入docker中,可以把任何想得到的程序放在docker中
官方解释:Docker is the world’s leading software containerizatior platform.
? Docker公司开发、开源、托管在github,跨平台、支持Linux、Windows、Macos
②解决什么问题?
一个新产品的出现往往是为了解决某种问题,其实上面在容器化中已经说了。
这里就不赘述了,在这里在补充那么一点。docker也属于一种虚拟化技术。它是从传统硬件层面上的虚拟化发展而来的。相比传统虚拟化技术,容器技术节省了更多性能。
③docker运行原理及相关命令
Ⅱ k8s
① k8s 是什么?
k8s 是 Kubernetes 的缩写,首字母K和尾字母s中间共8个字母,为了好记,k8s便诞生了
② k8s 干嘛的?
结合上图,和上一小节说的容器。随着容器技术的出现,一台服务器上可能运行着很多很多个容器,那么怎么管理这些容器呢。这就是k8s要做的事了
③ k8s有哪些特性?(我太懒了,下面完全是从官网拿过来的)
- 服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。 - 存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。 - 自动部署和回滚
你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。 - 自动完成装箱计算
Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。 - 自我修复
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。 - 密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥
Ⅲ KubeSphere
① KubeSphere 是什么?
KubeSphere 愿景是打造一个以 Kubernetes 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一分发和运维管理
② 官方地址
Ⅳ Spring Cloud
① Spring Cloud 是什么?
Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量
② Spring Cloud 优缺点
- Spring Cloud 包含了微服务架构的方方面面
- 约定优于配置,基于注解,没有配置文件
- 轻量级组件,Spring Cloud 整合的组件大多比较轻量级,且都是各自领域的佼佼者
- 开发简便,Spring Cloud 对各个组件进行了大量的封装,从而简化了开发
- 开发灵活,Spring Cloud 的组件都是解耦的,开发人员可以灵活按需选择组件
当然了它也存在着很明显的确定
-
项目结构复杂,每一个组件或者每一个服务都需要创建一个项目
-
部署门槛高,项目部署需要配合 Docker 等容器技术进行集群部署
Ⅴ DevOps
①DevOps是什么?
DevOps 是一系列做法和工具,可以使 IT 和软件开发团队之间的流程实现自动化。使我们可以快速、安全、可靠地将内部软件部署到生产环境。
七、部署实战
Ⅰ 项目推荐
知道再多理论的东西,没有实战都是纸上谈兵。
如果你也心动了,那就赶紧行动起来吧。
这里给大家推荐一款全部开源的 基于SpringBoot的权限管理系统。
它就是RuoYi,相信你肯定也听过了。随着RuoYi项目的不断发展,已经衍生出不少版本,从一开始的单体应用到前后端分离版本、微服务版本
不少博主、up主在推荐入门项目、讲解相关知识点、应用部署实战时,首选也是RuoYi。
若依作者的更新频率很高,一直在维护和更新
项目地址:https://gitee.com/y_project
若依有很多版本,这里呢我们当然是选RuoYi-Cloud微服务版本
项目地址:https://gitee.com/y_project/RuoYi-Cloud
Ⅱ 项目架构
Ⅲ 实战部署
具体部署,RuoYi官方有了很详细的文档,照着文档来就可以了,这里就不多说了。
文档地址:http://doc.ruoyi.vip/ruoyi-cloud/
八、小结
以上就是个人对云原生 的一些理解,云原生简单的说就是**DevOps+持续交付+微服务+容器 **(我又再次把这几个词搬过来了(●'?'●))。
不知道你看完文章后有没有对云原生 更加清楚了呢。当然了,我也是小白,也正在努力学习中,有什么说的不对的地方欢迎大家指出来,大家共同学习哈。