开发者学习笔记【阿里云DevOps助理工程师认证(ACA)课程:云原生与DevOps】
课程地址:https://edu.aliyun.com/course/3112069/lesson/18997
云原生与DevOps
内容介绍:
一、云原生的基本概念
二、微服务
三、容器
四、CI/CD及DevOps
一、云原生的基本概念
1、基本概念
根据Cloud Native Computing Foundation,云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。云原生的定义一直在变,不同组织有不同的定义,比如,CNCF的定义以及最早的Pivotal公司给出的定义。同一个组织在不同的时间点有不同的定义,同一个人在不同的时间点也会有不同的定义。云原生的定义在未来还会变,现在最新的定义是由CNCF给出的1.0版本的定义,也就是刚刚提到过的定义。
2、云计算的服务模型
云计算有两种分法。第一种模型是指按层次来分,分为三种:第一种是基础设施即服务(IaaS),它提供的是云计算的基础设施,比如说计算、网络和存储的服务;第二种是平台即服务(PaaS),它指的是提供计算与编程语言或者是函数库、数据库这一类的服务;第三种是软件即服务(SaaS),指的是给最终用户提供一个成型的软件去使用这种服务。云服务的另一种分类方式叫做三朵云,它包括公共云、私有云和混合云。公共云指的是所有人都可以进行购买和使用的所有人共享的服务。私有云是把技术部署在客户、自己的机房。混合云是公有云和私有云的混合,客户的服务一部分是在公有云,一部分在私有云。
3、云原生应用的关注点
云原生应有的大的关注点有四个:微服务、CI/CD以及DevOps
二、微服务
1、微服务架构的演进
微服务是从单体架构演进而来,单体架构实现快但是维护成本较高;后来演化为垂直架构,实现了模块化以及负载均衡;再向后,由于服务管理和RPC技术的支持实现了服务架构也就是SOA架构,从服务架构进一步演化把所有大的服务redown成小的服务就是微服务架构。
2、微服务带来的好处
微服务架构带来了很多好处。首先是独立的可扩展性,每个微服务都可以独立进行横向或纵向扩展,根据业务实际增长情况来进行快速扩展。其次它可以提供独立的可升级性,每个微服务都可以独立进行服务升级、更新,不用依赖于其它服务,结合持续集成工具可以进行持续发布,开发人员就可以独立快速完成服务升级发布流程。另外,它还提供语言无关性,研发人员可以选用自己最为熟悉的语言和框架来完成他们的微服务项目。最后,微服务提供了故障和资源的隔离性,在系统中出现不好的资源操作行为时,将仅仅只会影响单个的微服务。
3、微服务带来的挑战
首先是微服务分布式系统的复杂性,它带来API数目的成倍增加,调试分布式系统很复杂,跨服务的重构会很困难,并且很难在测试中重建和生产环境一致的环境。第二大类的挑战是运维开销更大,多个服务需要多种编程语言运行服务,多个服务需要集群来处理故障转移和负载均衡,并且需要高质量的服务监控和运维基础设施,对健壮和自动化的部署要求更高。最后一类是对团队的要求更高,首先是组织结构需要转型到自治的、跨功能的团队,其次是团队的技术能力技术栈需要扩展,另外要求团队有更高的DevOps水平。
三、容器
1、什么是容器
容器是与系统其他部分隔离开的一系列进程。容器提供了一种逻辑打包机制,以这种机制打包的应用可以脱离其实际运行的环境。大家可以把容器理解为虚拟机,目前,市场上最流行的容器是Docker,同时还有CoreOS rkt、LXC、OpenVZ等同时在市场上存在的容器技术,目前还有containerd以及CRI-O新的容器技术出现。所以说,容器是一个快速发展的技术。
2、Docker基本概念
在Docker里面有四个最基础的概念:容器、镜像、Docker File和仓库。从一个 Docker File 可以 build 一个 images,这个容器的 images 通过push操作可以把它上传到容器仓库里,同时,通过pull操作可以从容器仓库把容器 images 下载到本地,有了 images,通过 run 操作,可以启动一个容器。
3、Docker工作流
从 Docker File 可以 build image,然后把 image push 到容器仓库,这就叫 Ship,然后把 image 运行起来成一个容器实例,这就叫 Run。基本的工作流就包括这三个部分。
四、CI/CD及DevOps
1、概念
CI Continuous Intergretion,它包括编码、构建、集成和测试,CD,持续部署,叫做 Continuous Deployment,它包含CI的所有部分,并增加了部署这一部分,而DevOps从字面上直观的理解是开发运维一体化,它包含开发的整个过程,即CI、CD的所有部分,并另外包含了项目计划和运维。
2、CI持续集成流程
持续集成指的是开发人员频繁的向代码库提交代码,提交的代码需要经过构建、测试验证并及时得到结果反馈。自动构建包括自动检测代码、自动从代码库拉取代码并且自动执行代码构建。自动测试包括自动执行单测、自动执行代码扫描、自动化测试用例执行。自动结果通知指的是在测试结果出来之后可以及时通知到开发人员并且通知到错误失败的案例,错误代码段的定位以及测试覆盖率。
3、CD持续部署/持续交付
持续部署的主要目标是持续部署是持续集成的延伸,将集成后的代码部署到生产环境。频繁的部署确保可以小批次发布,在发生问题时可以轻松排除故障。
4、DevOps 的定义
根据维基百科,DevOps 的定义是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障部门之间的沟通、协作与整合。DevOps 经常被描述为“开发图案对于运营团队之间更具协作性、更高效的关系”。
5、阿里 DevOps 策略:打造一站式 DevOps 效能平台交付式流水线
它包含三个部分,第一部分是打破孤立团队的模式,从原来的敏捷团队进化为 DevOps 团队,这个策略带来的挑战是组织文化转型;第二个策略是开发人员进行更多的测试,从原来的开发人员只进行单元测试到开发自测,这所带来的挑战是测试赋能的开发,因为测试人员最开始是不熟悉整个的测试工作,他只熟悉开发的单元测试;第三个策略是必须采用新工具自动化,这会带来众多的工具并且需要学习,这所面临的挑战是工具学习曲线过高,因为工具的数量非常之多。