在部门已经两个月了,在这段时间里,慢慢地对DevOps有了更多的了解,但总感觉没有一个比较全面的认识。为了填补这种内心的不安,完整的读一本书是一个不错的选择。优点如下。
- 可以系统化了解一门学科或者技术的背景,以及发展的逻辑等。
- 可以更好的了解这们学科与技术的专有名称,在跟同行业交流起来可以更高效。
- 可以让自己了解目前所处的位置,以及未来会怎么样。
- 可以所涉及的技术,以及作者的思考。
选择《DevOps实践》这本书,首先是由于其比较薄,全书一共200页,其次,是因为实践,最后是买书的时候发现亚马逊评价也还不错。
阅读时间: 5个小时左右(个人读书比较慢)。
推荐指数:对于刚入门 ***** 老司机 *
读后感
全书也是按照软件的生成过程来讲的,常见的是源代码管理,构建,测试,部署等,在此之上,作者还叙述了DevOps如何影响架构的,问题的跟踪以及物联网和DevOps。总体来说,有技术和非技术两个方面。涵盖面基本上包含了DevOps所设计的各个方面,但确实是一本科普书,讲的很浅,也有可能跟DevOps注重流程有关,对相关的技术了解并会用即可(这个目前看来也不是一件简单的事情,而且可以满足一般的需求),但如果需要做好,个人感觉还是需要对所涉及的知识还是要有一定深度的熟悉。
下面用思维导图简单的梳理一下全书的内容。
DevOps和持续交付简介
这章节,主要讲解了DevOps的目的:鼓励不同的部门合作,达到提高效率以及软件质量的目的。这里面,提到这是涉及一个技术和非技术的问题。这个也和《敏捷宣言》的第一条很相关,”个体与互动 高于 流程和工具“。在谈及DevOps的特点,快,的时候,作者提到一种观点,当你感觉到自己因为不必要的等待而注意力不集中的时候,说明流程有了问题。这里也列举了打气球的例子,之前好像kent在另一本书中也提到这个问题。可以把打气球类比于打王者。在实践中,作者提到一点,我们要思考我们是否在做正确的事情,或者在做的路上?这个我也是非常赞同的,因为很容易在做的过程中迷失自己。对于ITIL我目前好像还不是很能准确的理解其含义,或者说对应不到公司的产品架构上。
洞察全局
这个章节主要是大概讲解了CI的各个系统之间是如何协同工作的,也讲了这个系统上各个人员的需求与责任,比如开发人员需要随时可用的多套开发环境,开发人员是流程的第一个的负责人,要对自己的代码有一定的保证。工件库,保存可交付物件,包管理器用来安装和升级,并且自动安装依赖。在谈到发布管理,特别强调了人工的介入在目前来说的必要性(因为要做到完全自动化需要很强的信心)。最后,很重要的一点,就是要时刻关注自己做什么,并且识别问题的范围。
DevOps如何影响架构
这里谈及到DevOps和CD的两个非功能关注点。
- 需要频繁交付小的变更。
- 需要对质量有大的信心。 这章还提及到一个关注点分离原则,常说的高内聚,低耦合就是这个典型代表。根据以上两个,我们时常会考虑到微服务的概念,微服务确实更适合DevOps的概念,这个也是目前要做的事情。 康威定律:设计软件的架构等价于软件的组织架构。
一切皆为代码
这章节谈及了代码的管理,现在大多数公司估计都是选择Git和Svn,大多数都是两者并存的状态(可能是历史遗留问题和业务需要)。在谈及分支策略的时候,作者的建议是规范和事先规则好。工件版本命名也要有自己的规则,这样才能方便识别和管理。在谈及大二进制的文件存储时,作者提及目前也没有一个很好的解决方案,目前也遇到这个问题,还在找方案解决。
构建代码
构建包含,源代码编译成字节码,代码分析,单元测试,生成可部署的产品。Jenkins作为目前最好用的CI/CD工具,应该很好的被掌握,而且Jenkins只是用来触发构建的,并不是自己构建,这个对其他部分人解释的时候要很好的解释清楚。 在构建机器的选择上,应该选择磁盘空间大、处理器核数核内存都比较好的机器,因为机器比人工便宜。
这里还讲了一个很重要的问题,何时触发的问题。
- poll 代码库
- 设定在固定的时间,通常是夜晚。
- 上游job触发下游job。 任务链和构建流水线,作者也认为是未来的趋势,因为可以更加可视化、细粒度的是我们所需要的。这里也谈及了对jenkin中job的容灾,这个比较简单。
测试代码
这章节主要讨论了三个话题,如何让人工测试更加的简单和不易出错,如何在实践中应用各种类型的测试,以及如何自动化集成测试等。由于之前做过一段时间的测试,对测试的理解也是,自动化只是测试的一种工具,替代不了手工测试,这是一个balance的过程,根据业务和收益来调整比列。这里涉及到都是测试要做到事情,比如如何管理多套测试数据,如何快速验证缺陷的修复(需要快速的构建)。就我目前的工作来看,我觉着如何mock数据(尤其是大数据),如何多套测试环境,以及如何自动化流程性的测试是很值得思考和解决的问题。
部署代码
这部分讲解了部署问题,当前的技术环境,部署需要自动化来完成。这里面,主要是讲解了一些工具,我只是看了大概,部署涉及的问题,就是分发的监控的问题(个人理解),目前涉及到的概念也就是Ansible和docker,也在研究。
监控代码
在部署以后,我们需要监控我们的代码,主要是监控线上环境,这个应该属于传统运维那一块(目前还没接触)。这里提供了几种方案,不过我感觉现在很多公司都有自己的工具。
问题跟踪、物联网和DevOps
问题跟踪属于管理上的过程,主要是描述一个问题从开始到关闭的状态机,各个公司都有自己的管理工具,开源软件也存在这样的工具,比如gitlab等。关于物联网和DevOps,个人觉着是一个不错的方向,但是目前还没有具体了解过,身边也没听说谁在做这一块。
总结
这本书,整体来说,只是大概了讲解了DevOps中的一些概念以及各个流程的问题以及目前存在的一些工具,对整体上了解DevOps还是有作用的,不过感觉对老人并没有什么作用。如果大家有不错的书和文章可以推荐一下。
ps: 目前也在总结DevOps所需要的知识图谱,如果有不错的,或者已经有人建立了,可以分享一下。
下面是作为刚入门的我,目前总结的,以后还要不断的加。