在讲云原生之前,先来讲讲云计算
其中云原生属于技术架构理念,而云计算提供应用所需的基础资源,云计算是云原生的基础,两者是相辅相成的
云计算简单来说,就是一种随时随地给大家提供解决网络资源的一种计算服务和应用
关于云计算的三种服务模式
三种模式也可以这样理解:
假如你有一个业务是需要用 Word写东西,做记录
最基础版本就是laas是服务商租你一台没有系统的电脑
中间版本paas是服务商租你一个带win10的电脑
最高版本就是saas就是服务商租你一台带win10还预装了word的电脑
专业图理解:
云原生(Cloud Native)是一种构建和运行充分利用云计算模型优势的应用程序的方法
云原生概括为4个要点:DevOps+持续交付+微服务+容器
符合云原生架构的应用程序:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率
DevOps中的Dev指的是Development(开发),Ops指的是Operations(运维),用一句话来说,DevOps就是打通开发运维的壁垒,实现开发运维一体化
DevOps是为了填补开发端和运维端之间的信息鸿沟,改善团队之间的协作关系,实际上DevOps应该还包括测试
关于软件行业的研发模式,大致有三个阶段:瀑布式开发、敏捷开发、DevOps
瀑布式开发:传统的软件开发流程,软件开发人员花费数周和数月编写代码,然后将代码交给QA(质量保障)团队进行测试,然后将最终的发布版交给运维团队去布署。所有的这三个阶段,即开发,测试,布署
也叫瀑布(Waterfall)模型,就是等一个阶段所有工作完成之后,再进入下一个阶段
敏捷开发:是一种能应对快速变化需求的软件开发能力。就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态
敏捷开发优势在于把一艘大船变成许多条小船,每条小船各司其职,分配小目标,所有的小目标合起来就能完成大目标。效率高,每个人职责分明。
不足之处在于小团队做不到拥有开阔的视野,看不到所有团队都在一起做什么事情,大家只知道埋头苦干做好自己的部分就可以,但看不到全局,不知道全局发生了什么事情。对于一些不可分割的大需求,需要一次性派很多人手同时做的需求,敏捷开发就不再合适
虽然敏捷开发大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于开发环节,对于运维人员来说,就是不要出问题,但是发生改变的时候最容易出问题。因此运维非常排斥“改变”。
因此才出现了DevOps,从目标来看,DevOps就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠
在软件开发过程中,通常会涉及以下几种环境:
开发环境:用于开发人员编写、调试和测试软件的环境,包括开发工具、集成开发环境(IDE)、调试器、编译器等软件工具,以及开发人员个人的计算机或开发服务器。
测试环境:用于软件测试的环境,包括测试服务器、测试数据库、测试数据等,用于进行单元测试、集成测试、系统测试、性能测试等各种测试活动。
集成环境:用于集成开发人员编写的各个模块或组件的环境,以验证它们在一起工作的正确性和稳定性。
部署环境:用于将开发完成的软件部署到生产环境中的环境,包括部署服务器、部署工具、配置管理工具等,用于将软件部署到生成环境中进行实际运行和使用。
生产环境:软件部署和运行的环境,包括服务器、数据库、网络设备、负载均衡器等硬件设备,以及用于部署和管理软件的相关软件工具,用于提供稳定、可靠的环境,使软件能够正常运行并满足用户需求。
对于容器技术来说,对软件开发环境带来了许多好处,主要包括以下几点:
环境一致性: 容器技术可以确保开发、测试和生产环境之间的一致性。开发人员可以在他们的开发机器上构建容器,然后将这些容器部署到测试环境和生产环境中,从而避免了“在我的机器上可以工作”的问题。
快速部署: 容器可以快速部署,因为它们包含了应用程序及其所有依赖关系。这意味着开发团队可以更快地构建、测试和部署应用程序,从而加快软件开发和交付速度。
资源利用率: 容器可以更有效地利用计算资源,因为它们可以在单个物理服务器上运行多个容器实例,而无需为每个应用程序实例分配独立的虚拟机或物理服务器。
隔离性: 容器提供了应用程序之间的隔离,这意味着即使在同一台物理服务器上运行多个容器实例,它们之间也是相互隔离的。这有助于减少因应用程序之间的冲突而导致的问题。
可移植性: 容器可以在各种不同的环境中运行,包括开发人员的个人计算机、本地数据中心、云基础设施等。这种可移植性使得开发团队能够更轻松地在不同的环境中部署和运行应用程序。
微服务架构支持: 容器技术与微服务架构天然契合。通过容器化应用程序,可以更轻松地将应用程序拆分成小型服务,并通过容器编排工具(如Kubernetes)来管理这些服务的部署和伸缩
目前最常用的容器是docker,使用go语言编写
CI/CD是持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写。它是一种软件开发实践,旨在通过自动化的流程和工具来加速软件的开发、测试和部署
持续集成(Continuous integration,简称 CI)
持续集成指的是,频繁地(一天多次)将代码集成到主干。它的好处主要有两个:
快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成
持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起
持续交付
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的
持续交付地将经过测试的代码部署到生产环境中,以便随时进行发布。持续交付旨在确保软件在任何时候都是可发布的状态,从而降低发布新功能或修复bug的成本
持续部署
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境,它通过自动化的流程将经过测试的代码自动部署到生产环境中,从而实现快速、频繁地发布软件
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段
持续部署的前提是能自动化完成测试、构建、部署等步骤
CI/CD的实施需要借助各种工具和技术,例如版本控制系统(如Git)、自动化构建工具(如Jenkins、Travis CI)、自动化测试工具、部署工具(如Docker、Kubernetes)等。通过CI/CD实践,开发团队可以加快软件的交付速度,提高软件质量,降低风险,并提高团队的生产力。这种实践在现代软件开发中被广泛采用,并成为提高软件开发效率和质量的重要手段
讲到微服务架构,是以单体架构为基础的,就像springcloud是以springboot为基础
通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应
容器是微服务架构的绝佳示例,现代云原生应用使用容器来构建微服务