上一节我们谈到了《微服务技术》,要实施微服务一个关键动力取决于企业的运维能力。

相比于传统架构,微服务的落地增加了大量的运维工作。随着服务的增多,有更多的服务需要部署、监控。另外,随着服务的增多,出错的可能性大大增加,出错时如何快速恢复也是件很复杂的事。

因此,在实施微服务的过程中,运维能力直接决定了实施的效率和产出。如果开发团队和运维团队之间无法密切协作,那实施过程将会存在很大的沟通成本。

所以引入DevOps很有必要!

一.DevOps 是什么

对于DevOps的定义和理解,大家都是望文生义,众说纷纭,争论不休。

  • 有人说DevOps是开发与运维的协作

  • 有人说DevOps是流程自动化

  • 有人说DevOps是频繁的最小交付

  • 有人说DevOps是…

其实大家说的都对,只是角度不同,正所谓:“一千个读者就有一千个哈姆雷特”。

DevOps一词来自于Development和Operations的组合,重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。

DevOps是为了填补开发端和运维端之间的信息鸿沟,改善团队之间的协作关系。不过需要澄清的一点是,从开发到运维,中间还有测试环节。DevOps其实包含了三个部分:开发、测试和运维。 如下图所示:
云原生系列技术(四):DevOps技术
换句话说,DevOps希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。下面这个DevOps能力图,良好的闭环可以大大增加整体的产出。
云原生系列技术(四):DevOps技术
DevOps涵盖了代码、部署目标的发布和反馈等环节,闭合成一个无限大符号形状的能力环。

二.DevOps的价值

1. 加速软件交付

扩大协作,让开发、测试、运维、用户处于一条业务生产线, 以便消除组织沟通和管理的障碍。

2. 平衡速度、成本、质量和风险

软件交付过程自动化,以便消除人力、资源的浪费和工期延误。

3. 降低客户反馈时间

扩大用户反馈圈,以便可以持续提高产品质量。

三.DevOps的组成元素

关于DevOps,平时我们谈的最多的应该是流程和工具,但DevOps最重要的一个组成元素是文化。如下图所示:
云原生系列技术(四):DevOps技术

  1. 从文化角度上,DevOps应该成为组织文化的一个内在要求。

    首先,企业关注的产品应该转向最终交付价值以及响应用户和市场变化的能力。

    其次,企业需要从组织架构上解决遗留下来的Dev和Ops隔离的状态,为他们走向融合提供组织上的保障。

    最后,DevOps文化强调跨部门协作和直接主动沟通。

  2. 从流程角度上,DevOps打通了开发、构建、测试、部署、运维、修复等各个环节,是最大化交付价值的最佳实践。

  3. 从工具角度上,DevOps是一种工具链,这其中包括代码管理工具,持续构建工具,代码部署工具,系统监控与运维工具等。

四.DevOps实施

DevOps落地指导原则:自上而下的文化渗透,自下而上的逐步实施。

以下是一个简单的DevOps流水线:
云原生系列技术(四):DevOps技术
这个图看上去很简单,但实际落地涉及到的细节还是很多,建议分阶段开展:

  1. 一个小团队走通最小的一个闭环,打通从开发到上线(测试环境),再到测试的全部流程。

  2. 其他(微服务)团队逐个引入,然后将各个团队开发的功能服务集成到一起。

  3. 企业内部所有流程走通且成熟稳定后,扩展到生产环境。

五.DevOps实施工具

DevOps实施的硬性要求:工具上的准备。现将工具类型及对应的不完全列举整理如下:

• 代码管理: GitHub、GitLab、SubVersion

• 构建工具:Ant、Gradle、maven

• 持续集成(CI): TeamCity、Jenkins、Bamboo

• 配置管理:Ansible、Chef、Puppet

• 容器:Docker、LXC

• 编排:Kubernetes

• 脚本语言:python、ruby、shell

• 日志管理:ELK(ElasticSearch, Logstash, Kibana)、EFK(ElasticSearch, Fluentd, Kibana)

• 系统监控:Prometheus 、Zabbix

• 压力测试:JMeter

在工具的选择上,需要结合公司业务需求和技术团队情况而定。

六.对DevOps的思考

DevOps带来的技术冲击,远远胜过容器技术:

对于IT从业人员:
  • 请走出舒适区,学习提升技能和方法,留给你的时间不多了。

  • 请延伸自己的技术和知识面,成为通才,这是市场发展的要求。

对于研发人员:
  • 需要实践内建质量的软件工程。

  • 注重保证质量和流程工具的使用。

  • 提高自己的抽象思维能力。

  • 在设计和研发时,需要考虑可持续集成性、可测试性、可部署性、可自动化运维能力。

对于测试人员:
  • 多学习使用脚本语言,不断提升自动化测试的开发能力。

  • 能够针对系统性能和稳定性提出要求和建议。

对于运维人员:
  • 不断提升自动化运维的开发能力。

  • 熟练使用各种自动化运维的脚本和工具。

  • 提高系统调优和问题定位能力。

总结

云计算和容器技术的快速普及,DevOps越来越被重视,甚至成为保证公司生产力的最佳之选,但DevOps成功与否,公司组织文化是否利于协作是关键,其次是流程的设计,最后才是具体的工具选择。

说到工具,现流行的容器集群管理系统–kubernetes想必大家有所耳闻,下节就为大家分享《Kubernetes 快速上手》

分类:

技术点:

相关文章: