1. 简介

随着公司业务的不断迅速增长,使得管理复杂的IT基础设施需求变得更为艰难。解决应对这一复杂变幻的挑战的最佳方法是让开发团队和运维团队紧密协作,实现灵活应对。拥有一个DevOps专家团队可以实现在最少时间服务中断的情况下实现IT基础设施的动态伸缩。

DevOps团队执行各种任务, 如:

  • 新虚拟机的配置
  • 配置网络设备和服务器
  • 应用程序部署
  • 收集和聚合的日志
  • 性能监视服务、网络和应用程序
  • 报警和自动修复的问题
  • 服务器和服务可用性监控

如果不使用正确的工具集来执行这些任务将会是一件即费时又费钱的事。某些DevOps工具需要巨大的投资, 而有一些却很容易获取,因为它们是开源。你可以进行一个简单的成本效益分析, 然后选择一组工具, 帮助你解决当前应用场景下遇到的问题。

2. 7个变革DevOps的工具

以下是7个顶级DevOps工具,将彻底改变DevOps的未来。



2.1 Docker

容器能帮助结合应用程序及其依赖项封装到一个包中,因此开发人员和系统管理员可以放心的将应用程序运行在任何linux系统上,而无需担心系统环境和配置存在差异化。

近几年,一个名叫DOCER的新容器技术获得了业界的青睐,许多DevOps专家和公司都在尝试加快使用这一技术的步伐。许多公司正计划着将他们的应用程序部署方式从虚拟机/物理服务器(VMs/Servers)切换为容器化的部署方式。

使用Docker技术使你能够用容器化的技术创建、部署和运行应用程序。Docker和虚拟机(VM)有些相似,但有所不同,Docker依赖于Linux内核来和主机进行资源隔离。Docker使用命名空间,cgroup,LXC等内核功能实现容器资源和主机资源的隔离,从而提高了应用的性能、减少了应用的大小。

Docker的日益普及归因于这一事实,一些领先的组织在早期采用了这项技术,这里有一些有趣的数据描述了Docker的快速普及情况。

下面是使用Docker的一些利好:

  1. 快速应用部署
    Docker容器拥有对运行时环境的最小要求,这减少了应用部署文件的大小和部署时间。
  2. 可移植性和复用性
    一旦你编译生成好了一个docker image, 它就可以用docker engine部署到任何机器上。比如说,同一个docker image可以部署运行在生产、测试和staging阶段上的机器。
  3. 应用配置 vs 系统环境配置
    docker image中可以集成应用运行环境所需的所有环境配置和应用设置。
  4. 版本控制和组件重用
    你可以跟踪你的容器的版本更新,检查版本差异,如果有需要的话,可以回滚到以前的版本。容器会复用之前使用的layer中组件,这使得它非常轻量化。
  5. 更好的CI/CD管道
    从开发到生产环境,docker为应用程序提供了一个一致的环境,从而使得代码开发、测试和部署管道变得更快速、高效和容易。

我们这样使用Docker

我们所有的应用都有一个基础的docker image,在很短的时间里,我们可以很快地将它们部署到开发/staging/生产环境中,并对这些images进行更新和维护。 Docker帮助我们在多个docker容器里对资源进行分配和简单隔离,改善了我们的构建管道,并让我们在构建自身过程中运行完整的合理性测试。

2.2 Jenkins

在开发过程中,代码集成以及监测代码改动造成的回归性功能缺陷是一件即费时又费力的工作。持续集成(CI)于是成了敏捷开发中很重要的一部分。CI作为一个集成性的框架,可以帮助开发人员和测试人员在CI服务器上对代码更新后进行自动测试
Jenkins是一个用于持续集成部署的开源工具。它可能不像其他独立CI工具(如Atlassian, Bamboo, Teamcity)那样功能强大,但它有一个
庞大的插件库,可实现高度的可扩展和定制化。
下面是使用Jenkins的一些利好:
  1. 软件/应用程序测试
  2. 自动化代码部署
  3. 构建和测试报告失败
  4. 运行Shell脚本
  5. 与许多其他工具集成像Maven,Ant,Docker,Git等。
  6. 像Cron作业自动化任务
这里有一些有趣的数据描述了Jenkins的使用普及情况。


我们这样使用Jenkins

Jenkins允许我们使用其庞大的插件库进行自定制,所以我们使用它来进行完整的构建和部署。在Jenkins的帮助下,我们实现了自动化加载测试环境。Jenkins从GIT版本中拉取最新的提交版本后,自动加载测试环境并执行加载测试。我们也使用Jenkins来实现一键按需性能测试环境的搭建。


2.3 New Relic:应用性能监测

New Relic是一个非常著名的应用程序性能监测工具。它能获取应用程序关键性的性能数据,如应用程序加载时间。使用New Relic你可以监视你的应用程序在世界各地的响应时间以及一些核心的应用组件如关键事务、自定义错误记录、外部服务调用和可伸缩性/负载分析等。

下面是使用New Relic提供的一些监测解决方案:


  1. APM
    帮助你监测应用程序的性能。
  2. 移动设备
    通过提供端对端日志、错误信息以及各角度下的吞吐量等信息,帮你监视和管理iOS/Android应用程序的性能。
  3. 服务器
    提供服务器健康状态的最新信息以及服务器上CPU、内存以及硬盘等状态最新变化的事件通知等。
  4. 浏览器
    对用户在网站上的使用体验提供深入和可操作的优化策略和见解。
  5. 集成环境
    提供自动化,可编写脚本的工具来监控你的网站,关键业务事务和API端点。
  6. 洞见
    收集和分析你的软件资源,并提供可视化的数据见解来提高你的业务增长。


New Relic是应用性能监控市场的领导者,它能指出你应用程序中真正的痛点。

我们这样使用New Relic

New Relic APM 帮助我们诊断出应用程序中的瓶颈,包括耗时最长的查询和模块。New Relic Servers 帮助我们监控服务器的关键指标如CPU、网络、磁盘、内存、进程。New Relic Synthetics 帮助我们监控在全球范围内的私有端点。

2.4  Ansible

在过去的十年来,云计算越来越被大幅地采用。云服务不再是一个简单的存储和检索服务,而是一个运行完整的业务关键程序的有用技术。随着云计算的发展,大大增加了基础设施和环境的复杂性,通过手动更新来管理整个应用程序堆栈和基础设施变得不再可行。作为一个自动化(配置管理工具)平台, Ansible允许你持续不断地定义,建立和维护复杂的云基础设施。

下面是使用Ansible的一些利好:

  1. Ansible是开源的
  2. Ansible能用于以下方面:
    a. 系统配置 b. 持续集成  c. 管理应用部署  d. 编制联排
  3. 无代理架构
    它适用于ssh协议,因此不需要安装远程代理。
  4. 轻量级,易于使用
  5. 简单的配置语言(使用YAML文件)

我们这样使用Ansible

Ansible允许我们集中管理所有的变化。我们也使用Ansible在EC2实例群上安装和更新软件包,如apt-get update,docker, 漏洞检测(shellshock 和 heartbleed)等。


2.5  SaltStack

尽管在配置管理领域,Chef和Puppet同样是市场领先者,SaltStack在各大领先的DevOps组织中还是迅速取得了一席之地。SaltStack使用Python开发, 它基于推式方法如推送配置文件到客户端。SaltStack需要通过主服务器和代理部署到目标服务器进行通信和控制,它使用ZeroMQ通讯层, 这使得它相对比其他的配置管理工具更快。

下面是使用SaltStack的一些利好以及应用场景:


  1. 非常高的性能
  2. 容易扩展和部署
  3. 内部透明,很容易看到内部细节。
  4. 输入、输出和配置一致——都采用YAML

SaltStack的一些特性:

  1. 使用在master和minion之间采用ZeroMQ通讯协议,比ssh协议要快很多
  2. 支持多主机架构,因此能实现快速扩展和容错。

2.6  Splunk

我们发现在服务器和云平台上有大量的可用数据。Splunk是一个可以从这些海量数据中获取洞见的数据平台。Splunk让你紧密关注通常被忽略的数据。Splunk提供的洞见帮助企业分析数据提供决策,从而提高生产力和盈利能力。Splunk在一个可搜索的数据中心捕获、索引和关联实时数据,并由此生成图表,报告、警报、可视化信息。

下面是使用SaltStack的一些利好以及应用场景:

  1. 从任何可能的数据源收集和索引日志和机器数据
  2. 强大的搜索、分析和可视化功能
  3. 提供安全、IT运营、商业分析等方面的应用解决方案
  4. 提供不同规模、安全性和可用性,以适合任何组织
  5. 可用作为一个软件或SaaS解决方案

2.7  Kubernetes

Kubernetes是一个开源的docker编排工具,它是一个轻量级、多重云、可扩展和自愈平台。它可帮助你即时扩展你的应用程序、发布推出新的功能、优化硬件使用资源。Kubernetes是Google于2014年启动的一个项目。

下面是使用Kubernetes的一些关键特性:

  1. 自动bin打包
  2. 水平扩展
  3. 自动发布和回滚
  4. 自愈
  5. 服务发现和负载均衡器
  6. 密钥和配置管理
  7. 存储编排
  8. 批处理执行

我们这样使用Kubernetes

Kubernetes帮助我们减少QA/Prod环境上的支出,因为它使我们能够更好地利用现有的资源。Kubernetes加速构建和部署次数从每周30增长到55。Kubernetes提供开箱即用的部署特性(如滚动更新),我们可以做零停机生产环境部署。

在过去的几年里,docker被大幅度地使用,下面是一些关键统计数据,显示最近被使用的容器联排工具的基本情况。

3. 结论

随着越来越多的公司组织把他们的开发和运营团队紧密结合,使用上述工具,将能帮你更有效地提高产品的交付管道。基于用例场景以及功能特性等,你可以很容易地选择最适合你的DevOps工具。在Welldum Studio, 我们会根据用户的使用场景和用例选用上述合适的工具。通过这种方式,我们显著地减少花费在日常操作任务的时间。我们曾在一个项目上通过使用Kubernetes在docker部署微服务的架构模式将部署时间从20分钟减少为3分钟;我们也使用New Relic来监测应用程序的瓶颈。

4. 关于作者

David, CTO of Welldum Studio

David有10多年丰富的互联网开发和架构经验,曾就职于腾讯无线产品部,负责手机网游的开发工作;后赴美加入硅谷某大型互联网门户网站任全栈工程师,负责网站的整体架构、性能优化以及数据挖掘等工作。欢迎添加作者微信进行技术探讨和交流。

5. 关于Welldum Studio

Welldum Studio成立于2014年,核心团队来自硅谷、BAT、清华大学和中科院,我们提供全栈式技术开发服务。我们的服务范围包括UX/UI设计、网站开发、App开发、微信开发、游戏开发、大数据挖掘和大规模分布式高负载并发系统的设计开发以及性能优化等。我们的官网是 http://www.wlelldum.com, 欢迎咨询交流。

注:本文是Welldum Studio( http://www.welldum.com )的原创文章,版权所有,转载请注明文章的出处。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐