DevOps实践

作者: 沉寂之舟 | 来源:发表于2018-01-31 23:14 被阅读78次

DevOps实践.png

第一章 DevOps和持续交付简介

  1. DevOps: 包含技术与非技术两方面,还包括动手能力和软技能。
    DevOps = Developments + Opertions
    基于软件工程的复杂性,在软件开发周期中,通常是有进行分工的(编码、测试、维护由不同人,不同组进行),然而这种分工(通常还伴随着收入差)造成了信息流通的不畅,信息不对称也就产生了。这种不对称必然造成原先的协作关系转换为对立关系,造成开发效率下降、软件质量下降,这显然背离软件开发的核心目标(抢占市场、增加商业价值)。DevOps就是针对上述症状的一剂药方
  2. 敏捷软件开发宣言
    a. 个体和互动高于流程和工具(DevOps核心)
    b. 工作的软件高于详尽的文档
    c. 客户合作高于合同谈判
    d. 相应变化高于遵循计划
  3. DevOps核心目标
    a. 强调个体和互动
    b. 自动化和持续交付
  4. 敏捷不能流于形式 => Sprint回顾会议机制。

第二章 洞察全局(DevOps全流程概览)

  1. DevOps流程和持续交付
    编码->版本控制->测试->运维
    a. 开发预打包环境,包含JDK,IDE等(目标开箱即用)
    b. 版本控制(软件开发的中心),Git
    c. 构建服务器(持续集成),Jenkins
    d. 工件库(存储二进制),Nexus
    e. 包管理器(工具版本管理)
    f. 测试(单元测试,集成测试,接受测试)
    g. 预发布(蓝绿发布)
  2. 发布管理
    大量都是自动化工作,但是不可避免还是需要人工介入。
    可通过Scrum,看板等支付流水线
  3. 完整的例子

第三章 DevOps如何影响架构

  1. 软件架构介绍
    着眼于软件架构两个非功能需求:
    a. 需要频繁交付小变更(小步快跑)
    b. 需要对质量有大信心(质量保证)
  2. 单块系统场景
    整块部署,版本号管理
  3. 关注点分离
    拆分系统最重要的原则
  4. 模块化:低内聚,高耦合的系统,需要改造
  5. 软件三层结构:表示层、业务层、数据层。
  6. 数据库迁移(自动化,Liquibase)
  7. 微服务
    a.康威定律:设计软件的组织结构,等价于软件的组织结构。DevOps的目标是建立不同角色共同协作,跨职能团队。因此微服务会促进构建内聚高,功能单一的团队。而这正好契合了DevOps的目标,所以DevOps就和微服务紧密结合了。
    b.服务接口向上兼容:Tolerant Reader模式,忽略无法识别的数据。
    c.微服务和数据库:系统间隔离明显,部署就会简单,而隔离月不明显(揉合),数据模型就会简单。所以,在微服务中,数据库的划分通常没有一个最优方案。
  8. DevOps架构和弹性
    a. 复杂性:为了尽快部署,也要保证可靠,必然增加了大量的集成点,系统也更为复杂了,从概率上来说,失败的可能性就更高了。
    b. 工具依赖性:为了解决上述矛盾,必然引入自动化测试,自动化部署,自动化监控等一系列工具,从而对工具的依赖也大大加强了。

第四章 一切皆代码

  1. 源代码控制的必要性
    a. 源代码管理历史: tar包、集中式、并发集中式、去中心分布式
    b. 角色与代码:开发(无需多言,饭碗)、运维(脚本生成、网络拓扑)、质量保证(自动化测试脚本)
  2. 源代码管理选型
    目前大势就是Git:
    a. 迁移:大部分工作用在保持历史记录的完整性,而大部分企业并不关心这个。
    b. 分支策略:不是自己独立工作、团队协作才有意义;Git Flow
    c. 分支问题域:新功能,问题修复,版本控制。如果针对缺陷专门定制修复分支,对其单独修复、部署就有可能引起合并冲突,而如果在现有新功能上增加功能开关,又会增加开发工作量,并引入额外的管理工作。
    d. 工作版本号命名:不推荐用快照版本命名方式
    e. 客户端选择:要么自建Git服务器,要么使用托管服务器
    f. 大的二进制文件:mp4等视频->Git Annex
    g. 不同的GIt服务器实现:Gerrit、GitLab

第五章 构建代码

  1. 构建代码:
    a. 过程:编译、静态分析、单元测试、生成可部署产品
    b. 数量众多:每种语言都有好几种构建工具
    c. 目标: 一个开发者签出代码,应该能够在他本地开发机顺利地构建。
  2. Jenkins介绍:
  3. 管理构建依赖: Maven、RPM、Deb
  4. 最终工件:
    对于Java来说,就是生成可以部署的EAR,而对于其它语言,可能是二进制文件,而可能是特定的格式文档(shell、HTML、js)
  5. 用FPM取巧:
    命令行构建源代码RPM包
  6. 持续集成:
    用来测试把多个系统的变更统一在一个环境,测试其能否正常交互工作。
  7. 持续交付
  8. Jenkins插件,Jenkins从机
  9. 质量保证:Sonar
    (好杂乱的一章,没了解Jenkis根本跟不上)

第六章 测试代码

  1. 人工测试
    a. 人工测试依然是软件开发中一个重要部分,特别是接受测试,必须有测试人员介入。
    b. 为了测试人员开心:要求管理测试数据(DB可恢复),并且能尽快部署
  2. 自动化测试优缺点:
    a. 单元测试成本低、价值低、可能认为人工测试的实践动作能暴露更多的BUG(测试人员抵触)
    b. 创建自动化集成测试支架(Test cradle)较困难(技术能力)
    c. 程序随时间变化功能变化、测试必须同步维护(成本高,开发人员抵触);一个敏捷团队对自己服务的成功、维护、中断负有全部责任。
    d. 编写可靠工作的健壮测试很难(人员要求高)
    e. 写自动化测试难(本身技术复杂)
    中国公司不重视测试时有原因的,这些要素叠加的结果就是,如果要求大量自动化测试,比如增加开发人员工作量,降低单位时间产出,而中国人力成本便宜,为什么不用堆人的人工测试呢?
  3. 单元测试:
    a. 区分单元测试、功能测试。如果测试需要进行复杂设置和运行时依赖,那么它就是功能测试。
    b. Junit概念:Test Runner、Test Case、Test Fixtures、Test Suites、Test Execution、 Test Result Formatter、Assertions
    c. Mock: Mockito
    d. 测试覆盖率: Cobertura、Clover
  4. 自动化集成测试:
    较少Mock的测试,尽量模拟真实的生产环境。
    a. 使用Docker模拟
    b. Arquilian
    c. 性能测试 Jmeter
  5. 自动化接受测试: BDD,先写一个Spec,再进行编码(我的天,这么搞,把人折腾的)
  6. 自动化UI测试: Selenium
  7. 测试驱动开发: TDD
  8. 一个实例

第七章 部署代码

重点关注二进制数据包以及配置管理系统安装它们的配置。

  1. 为什么有那么多部署系统:场景复杂,一个企业级应用,比如有多套不同类别的服务需要管理:
    Web服务器、应用服务器、数据库、不同操作系统。
  2. 配置基础OS:Coller、docker。
  3. 描述集群:
  4. 系统交付包:推荐基于文件的配置管理系统(例如spring cloud config)
  5. 虚拟化栈:
    VMware、KVM、Xen、VirtualBox
  6. 一些部署工具:
    Puppet、Ansible、PalletOps、Chef、SaltStack
  7. 云计算:Aws、Azure(国内阿里云,腾讯云)

第八章 监控代码(监控系统)

  1. Nagios:始于1994年,用于监视主机状态。
  2. Munin:统计数据
  3. Ganglia:图片看似不错,不过2016年以后无新版本
  4. Graphit:实时绘图(Jhipster有用它)
    a. Graphit Web:仪表盘界面
    b. Garbon:收集指标的后台进程
    c. Whisper:时间序列的数据库类库
  5. 日志分析系统:log4j -> ELK

第九章 问题跟踪器

  1. 工作流:
    问题的基本属性:描述、报告者、指派、状态
    问题的额外属性:到期日、里程碑、附件、工作量估计、额外状态
  2. 问题跟踪器选型考虑因素:
  3. 几个问题跟踪系统:Bugzilla、Trac、Redmine、GitLab、Jira

第十章 物联网和DevOps

这章基本是作者的私货,着重介绍物联网。


总结一下:
大致把DevOps涉及的部分介绍到了,对每个需要关注的地方做了一些分析,可能用到的工具也大致做了介绍。可是感觉作者思维跳跃太大,章节内部小知识点连贯性很差,前言不搭后语的,很难跟上节奏,读起来很累。总的来说,有一点收获吧

相关文章

  • DevOps指北

    DevOps是什么 DevOps与敏捷开发 DevOps成功实践需要哪些条件 DevOps是什么 DevOps是一...

  • 互联网CD持续部署和DevOps实践

    互联网CD持续部署和DevOps落地实践 DevOps is everywhere,所有人都在说在做。DevOps...

  • devops实践指南

    devops实践指南 - 读书笔记 ***************************************...

  • DevOps和敏捷全栈开发

    DevOps和敏捷全栈开发 DevOps的介绍2.DevOps的敏捷开发3.敏捷团队中DevOps的实践过程4.D...

  • Jenkins+Maven+SVN+Nexus 搭建持续集成环境

    一、DevOps DevOps是“开发”和“运维”的缩写。 DevOps是一组最佳实践强调(IT研发、运维、测试)...

  • 实践者的 DevOps 之路(3. 持续集成 CI)

    在上一篇中我们谈到了分支模型,如果说分支模型是 DevOps 实践的开始,那么 CI 就是 DevOps 核心实践...

  • DevOps实践

    DevOps四大能力的建设需要实践与工具进行支撑,结合能力建设的要求,实践主要分布在持续交付和技术运营两大领域,包...

  • DevOps实践

    第一章 DevOps和持续交付简介 DevOps: 包含技术与非技术两方面,还包括动手能力和软技能。DevOps ...

  • DevOps实践

    最近在项目中实践DevOps,搭建了一套从需求到集成测试部署的流水线,流水线中包括了需求分析、开发、代码评审、...

  • DevOps团队之殇

    “你在团队里是做什么的?”“DevOps。”“DevOps是什么呢?”“DevOps是一种文化、一种实践,目标是加...

网友评论

    本文标题:DevOps实践

    本文链接:https://www.haomeiwen.com/subject/onlrzxtx.html