简介
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
实现
项目管理(规划工具)teambition
在规划阶段最重要的是要制定共同的目标、保证透明度和赋权。目前业内比较常用的规划工具主要包括 :
Asana、Taiga、GitLab、TaskTop、CollabNet VersionOne、Pivotal Tracker、Trello 、Basecamp和 Azure Boards
。
- GitLab:是基于 Web 的 DevOps 生命周期工具。它提供了一个 Git 存储库管理器,使用由 GitLab Inc. 开发的开源许可证来提供 Wiki、问题跟踪和 CI/CD 管道功能。 GitLab 提供了一些工具用来在实践中规划事务,还可以用来查看工作的范围。
- Tasktop: 可以将所有这些工具添加到 Tasktop 支持的全套敏捷和应用程序生命周期管理(ALM)、PPM 和 ITSM 工具中,从而在整个生命周期中提供前所未有的可视化特性。
- VersionOne :支持 Scrum、看板、XP、SAFe 和混合开发方法,简化了跨所有团队、程序、软件产品组合和企业的计划、跟踪和报告工作。
- Pivotal Tracker: 全球各地开发人员都可以使用这款敏捷项目管理工具,围绕一个共享的,带有优先级的 backlog 进行实时协作。
- Trello: 是基于 Web 的看板风格列表制作应用程序,是 Atlassian 的子应用。 许多团队在规划各个 sprint 时都会用它。
- Azure Boards: 可以跟踪软件项目,并使用敏捷工具(包括 Scrum boards、看板 boards 和仪表板等)改进规划工作。同时,还有工具可以帮助你可视化工作、共享计划、跟踪进度,并确保你正在向目标迈进。
项目管理(问题跟踪)Jira
问题跟踪阶段是为了提供客户响应能力,减少知识浪费,缩短反馈链路。目前业内比较常用的问题跟踪工具包括 Atlassian Jira
、JetBrains YouTrack 和、ZenDesk和禅道。
- Jira :是 Atlassian 开发的专用问题跟踪产品,提供了错误跟踪和敏捷项目管理功能。
- YouTrack : 是由 JetBrains 开发的,基于浏览器的专用商业软件,融合了错误跟踪器、问题跟踪系统以及项目管理软件。它的卖点是基于查询的问题搜索,拥有自动完成、分批处理问题、自定义问题属性集,以及创建自定义工作流的特性。
- Zendesk :可以轻松地从所有渠道跟踪每一个客户问题(CRM)。目前 Uber 和 Airbnb 等许多公司都在使用 Zendesk Support 作为他们的问题跟踪软件。
代码管理 GitLab
源代码控制主要是为了控制资产,减少沟通障碍,赋能团队。目前业内比较常用的 SCM 工具包括 Git、GitHub、GitLab、Bitbucket 和 Subversion。
- Bitbucket: 是 Atlassian 所有的、基于 Web 的版本控制库托管服务,可用在使用 Mercurial 或 Git 版本控制系统的源代码和开发项目上。
- Apache Subversion: 是一个软件版本和修订控制系统,其根据 Apache 许可开源。软件开发人员可使用 Subversion 来维护源代码、网页和文档等文件的当前和历史版本。
构建工具 Maven Nexus
构建阶段主要是为了保持打包的一致性,自动执行容易出错的活动,生成早期质量信号。目前业内比较常用的构建工具包括 Maven/Gradle
、MSBuild、Ant、Rake、JFrog Artifactory、Sonatype Nexus
和 NuGet。
- Maven/Gradle: Maven 是主要用于 Java 项目的自动化构建工具。Maven 还可以构建和管理以 C#、Ruby、Scala 等语言编写的项目。 Gradle 是一个开源的自动化构建系统,其基于 Apache Ant 和 Apache Maven 的理念,并引入了基于 Groovy 的领域特定语言,替代 Apache Maven 使用的 XML 格式来声明项目配置。
- Sonatype Nexus: 是一款存储库管理器。你可以用它代理、收集和管理依赖项,这样就用不着和一大堆 JAR 打交道了。它简化了软件分发的工作。 你可以配置自己的内部构建,然后发布到 Nexus 上供其他开发者使用。
- Microsoft Build Engine(通常称为 MSBuild):是用来托管代码及原生 C++ 代码的免费开源构建工具集,它之前是.NET Framework 的一部分。Visual Studio 依赖 MSBuild(反之则不然)。
- NuGet : 是.NET 的软件包管理器。NuGet 客户端工具提供了生成和使用软件包的功能。 NuGet Gallery 是为所有包作者和使用者提供的软件包中心存储库。
- Rake: 是一个软件任务管理和自动化构建工具。它允许用户指定任务并描述依赖关系。你也可以对命名空间中的组任务执行这些操作。
- JFrog Artifactory :这款工具可用来存储构建过程的二进制输出,以备分发和部署之用。Artifactory 支持许多软件包格式,如 Maven、Debian、npm、Helm、Ruby、Python 和 Docker。JFrog 提供了高可用性、复制、灾难恢复和可伸缩特性,并兼容许多本地和云存储产品。
测试工具 Junit
测试阶段主要是检测内部质量,建立对已部署构件的信心。目前业内常用的测试工具包括 JUnit、xUnit.net、Selenium、Jasmine 和 Cucumber。
- JUnit :是用于 Java 编程语言的单元测试框架。JUnit 在测试驱动开发的环境中扮演着重要角色,从 SUnit 起源的一组单元测试框架(统称为 xUnit)之一。
- xUnit.net :是由 NUnit 的原作者编写的,用于.NET Framework 的开源单元测试工具。
- Selenium: 是用于测试 Web 应用程序的可移植框架。Selenium 提供了一种回放工具,使用户无需学习测试脚本语言就能编写功能测试。
- Jasmine: 是用于 JavaScript 的开源测试框架。它可以在任何支持 JavaScript 的平台上运行,不会入侵应用程序或 IDE,还有着易读的语法。在它身上可以找到 Screw.Unit、JSSpec、JSpec 和 RSpec 等诸多单元测试框架的影子。
- Cucumber :是一种支持行为驱动开发的软件工具。Cucumber BDD 方法的核心是一种称为 Gherkin 的普通语言解析器。它能用客户可以理解的逻辑语言来指定预期的软件行为。
持续集成和部署(CI/CD)Jenkins
比较常用的 CI 工具包括 Jenkins
、CircleCI、Travis CI、Concourse、AWS CodePipeline 、 Azure Pipelines、Bamboo和Hudson。
- Jenkins: 是一个免费的开源自动化服务器。Jenkins 可用来自动化软件开发过程中非人类参与的工作,基于 CI 和 CD 的技术理念。这是一个基于服务器的系统,可在 servlet 容器(例如 Apache Tomcat)中运行。
- CircleCI: 是世界上最大的共享 CI/CD 平台,也是代码从构思到交付过程的中央枢纽。作为最常用的 DevOps 工具之一,CircleCI 每天处理超过 100 万个构建,因此收集了大量关于工程团队工作方式以及代码运行方式的数据。Spotify、Coinbase、Stitch Fix 和 BuzzFeed 等公司使用 CircleCI 来提升工程团队的生产力、发布更好的产品并更快地将产品推向市场。
- TravisCI: 是一项托管 CI 服务,用于构建和测试 GitHub 上托管的软件项目。Travis CI 为私有项目提供各种付费计划,并提供了开源的免费方案。TravisPro 提供了在客户自己的硬件上定制化部署专有版本的能力。
- Concourse: 是用 Go 编写的自动化系统。人们经常将它用于 CI/CD,其卖点是强大的可伸缩性,可以提供很简单或者很复杂的自动化管道。
- AWS CodePipeline: 是一项完全托管的 CD 服务,可帮助你自动化发布管道,以实现快速、可靠的应用程序和基础架构更新流程。每当你更改代码时,CodePipeline 都会根据你定义的发布模型自动执行发布流程中的构建、测试和部署阶段。这使你能够快速可靠地交付功能和更新。你可以轻松地将 AWS CodePipeline 与第三方服务(例如 GitHub)或你自己的自制插件集成。使用 AWS CodePipeline 时你按需付费即可。它没有前期费用或长期承诺。
- Azure Pipelines: 可用它获取适用于 Linux、macOS 和 Windows 的云托管管道。生成 Web、桌面和移动应用程序。部署到云端或本地。 使用 Pipelines 自动化构建和部署流程可以节约很多时间,从而腾出更多资源投入创造活动。
而 CD 工具主要是为了将复杂的管道自动化,统一团队目标。目前业内比较常用的 CD 工具包括 Spinnaker、Octopus Deploy 和 AWS CodeDeploy。
- Spinnaker : 是一个免费的开源 CD 软件平台,最初由 Netflix 开发,不久被谷歌看中并发展起来。 Spinnaker 是一个多云 CD 平台,能够以高速度和强信心来发布软件更改。它提供了强大而灵活的管道管理系统,并支持与主流云提供商的集成。
- Octopus Deploy :是全球领先的 CD 团队使用的自动部署和发布管理工具。 Octopus 是一个工具集,可以显著简化任何 DevOps 流程,以通过云或虚拟机连续测试和部署大量微服务或应用程序。
- AWS CodeDeploy: 是一项完全托管的部署服务,可自动将软件部署到各种计算服务上,例如 Amazon EC2、AWS Fargate、AWS Lambda 和你的本地服务器等。 你可以使用 AWS CodeDeploy 自动执行软件部署,无需容易出错的手动操作。
配置管理工具 apollo
配置管理工具的作用是将基础架构代码化,加强一致性。目前业内常用的配置管理工具包括 Terraform、BOSH、Chef、Ansible、Puppet、Google Cloud Deployment Manager、SaltStack和 ScriptRock GuardRail。
- Terraform :是由 HashiCorp 创建的开源基础架构即代码(IaC)软件工具。它让用户能够使用 Hashicorp 配置语言或 JSON(可选)这两种高级配置语言来定义和配置数据中心基础架构。
- BOSH : 是一个将小型和大规模云软件的发布工程、部署和生命周期管理统一在一起的项目。BOSH 可以在数百个 VM 上配置和部署软件。它还能以接近零的停机时间执行监视、故障恢复和软件更新任务。
虽然 BOSH 是为了部署 Cloud Foundry 而开发的,但它也可以用来部署几乎所有软件(例如 Hadoop)。BOSH 特别适合大型分布式系统。
此外,BOSH 支持多个基础架构即服务(IaaS)提供商,例如 VMware vSphere、Google Cloud Platform、Amazon WebServices EC2、Microsoft Azure、OpenStack 和阿里云。它带有一个云提供商界面(CPI),使用户可以扩展 BOSH 以支持其他 IaaS 提供商,如 Apache CloudStack 和 VirtualBox 等。 - Chef :是一种配置管理工具,用来处理物理服务器、虚拟机和云中的机器设置。许多公司使用 Chef 软件来控制和管理自己的基础架构,他们包括 Facebook、Etsy、Cheezburger 和 Indiegogo 等。
Chef 是持续自动化软件领域的领导者、应用程序自动化领域的创新者,也是 DevOps 运动的创始人之一。Chef 与全球 1000 多家最具创新力的公司合作,以实现他们数字化转型的愿景,并提供可快速交付软件的实践和平台。 - Ansible: 是一种开源的软件预备、配置管理和应用程序部署工具。它可以在许多类 Unix 系统上运行,既可以配置类 Unix 系统也可以配置微软 Windows。它自带声明式语言来描述系统配置。
- Puppet: 提供的能力可以定义系统所需的软件和配置,然后在初始设置后保持指定状态。
用户使用与 Ruby 类似的声明式领域特定语言(DSL)来定义指定环境或基础架构的配置参数。Puppet 使用称为 Facter 的一个实用程序获取系统信息,该程序跟随 Puppet 软件包一并安装。
Puppet master 是一个系统,使用清单来管理它所控制的所有节点的重要配置信息。
Master 控制的节点都安装了 Puppet 并运行 Puppet 代理(即守护程序)。代理收集的节点配置信息将发送到 Puppet master。然后,Puppet master 根据节点的配置策略来编制一个目录。每个节点都使用这些信息来将任何必要的配置更新应用到自己身上。
Puppet 使用的是 pull 模式,在该模式下,代理定期轮询 master,以检索特定于站点和节点的配置。在这种基础架构中,受管理的节点通常以后台服务的形式运行 Puppet 代理应用程序。 - Google Cloud Deployment Manager: 是一项基础架构管理服务,可轻松创建、部署和管理 Google Cloud Platform 资源。
服务注册与发现 zookeeper
Zookeeper
、etcd、Consul
- ZooKeeper:是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务、分布式独享锁、选举、队列等。
ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解
批量任务 xxl-job
Elastic-Job:主要负责job或工作流的调度。配置zk服务器时命名空间要与springbatch中配置的zk的namespace一致,否则无法从zk中将job获取到。 分片可以将一个job实例分配到多个服务器上执行,也可以在同一服务器上执行。
Azkaban:
Quartz:调用api方式操作任务,不人性化;需要持久化业务到底层数据表,侵入性严重;调度逻辑与jobbean耦合在同一个项目中,当调度任务多的时候,调度任务逻辑也跟着增加,调度系统性能大大受限于业务;quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。
XXL-JOB:https://www.jianshu.com/p/fa7186bea84b
Spring-batch:可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能
TBSchedule:http://code.taobao.org/p/tbschedule/wiki/index/
消息队列 RabbitMQ
RocketMQ(电商java)、RabbitMQ(小erlang)、kafka(推荐)
日志管理 ELK
ELK Stack: 是三个开源产品的集合——它们分别是 Elasticsearch、Logstash 和 Kibana。它们都是由 Elastic 公司开发、管理和维护的。
E 代表 ElasticSearch,用于存储日志
L 代表 Logstash,用于传输、处理和存储日志
K 代表 Kibana,是一种可视化工具(Web 界面)
Logentries :是一个日志管理平台,提供各种语言的客户端开发包,可以在云端对应用日志进行分析统计。该平台的服务器端是不开源的,但其各种客户端 API 都是开源的,源码地址:https://github.com/logentries
系统监控 Telegraf、Ganglia
Datadog、Graphite、Icinga、Nagios
Datadog: 是针对云规模应用程序的监视服务,可通过基于 SaaS 的数据分析平台来监视服务器、数据库、工具和服务。
Datadog Application Performance Monitoring(APM 或跟踪)可与你的日志和基础架构监视器并用,提供自动生成的仪表板(用于监视关键指标,如请求量和延迟)乃至单个请求的跟踪细节,帮助你深入了解应用程序的性能表现。
应用程序收到请求时,Datadog 可以在整个分布式系统上查看跟踪,并向你显示关于该请求状况的详细系统数据。
性能监控 Zipkin、 SkyWalking
AppDynamics、New Relic、Splunk
- Zipkin :是Twitter开源的一个分布式跟踪系统。它能收集用来解决服务架构中延迟问题所需的时序数据。其功能包括收集和查找这类数据。特点是轻量,使用部署简单。
如果日志文件中有跟踪 ID,则你可以直接跳至该跟踪 ID。否则,你可以基于属性来查询,可用属性包括服务、操作名称、tagsm 和持续时间等。系统会为你总结一些有趣的数据,例如在一个服务中花费的时间百分比,以及操作是否失败等。
-
Pinpoint:是韩国开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
-
SkyWalking:是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点同pinpoint。
-
CAT:是大众点评开源的基于编码和配置的调用链分析,应用监控分析、日志采集,监控报警等一系列的监控平台工具。
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
实现方式 | 拦截请求,发送数据至zipkin服务 | java探针,字节码增强 | java探针,字节码增强 | 代码埋点(拦截器、注解、过滤器) |
接入方式 | 基于linkerd或者sleuth方式,引入配置即可 | javaagent字节码 | javaagent字节码 | 代码入侵 |
协议 | HTTTP、MQ | thrift | gRPC | HTTP/TCP |
颗粒度 | 接口级 | 方法级 | 方法级 | 代码级 |
全局调用统计 | × | √ | √ | √ |
traceId查询 | √ | × | √ | × |
报警 | × | √ | √ | √ |
JVM监控 | × | × | √ | √ |
健壮度 | ** | ***** | **** | ***** |
数据存储 | ES、mysql、内存、Cassandra | Hbase | ES、H2 | Mysql、hdfs |
500/15000(17/9/824/21-90%/ 1385) | 117 /10/2101/263/56%/55%/ 990平均/最小/最大/90%line/ cpu/M/ 吞吐量 次好 | 201/10/7236/746/ 774 | 22/10/1026/23/50%/52%/ 1228 最好 | |
750/22500 956 | 489/10/27614/1169/ 63/55/ 582 | 681/10/28138/1919/ 56/48/ 559 | 396/10/16478/941/ 55/50/ 908 | |
1000/30000 557 | 1021/10/36836/1978/63/55/ 533 | 1148/10/40971/2648/60/52/ 514 | 824/10/25983/1758/62/55/ 667 |
- New Relic :是一家位于加州旧金山的技术公司,致力于开发基于云的软件,以帮助网站和应用程序所有者跟踪服务性能。 它 开发的用于应用程序性能监视(APM)的软件分析产品,可提供有关 Web 应用程序性能以及最终用户体验满意度的实时和趋势数据。
- Prometheus :是用于事件监视和警报的免费软件应用程序。它将实时指标记录在一个时间序列数据库中,该数据库使用 HTTP 拉取模型构建,支持灵活查询和实时警报。
Prometheus 服务器的工作方式是抓取,也就是调用监视器上配置的各个节点的指标端点。它定期收集这些指标并将其存储在本地。节点在 Prometheus 服务器抓取的端点上公开这些指标。
压力测试 JMeter
JMeter、Blaze Meter、loader.io
Web服务器 Nginx
Nginx Apache
应用服务器 Tomcat
Tomcat
数据库 Mysql ES
Mysql、Oracle、PostgreSQL等关系型数据库;InfluxDB等时序数据库; ES 、cassandra、mongoDB等NoSQL数据库
缓存 Redis
Redis
分库分表 mycat
Sharding-JDBC(当当)、TSharding(蘑菇街)、Atlas(奇虎360)、Cobar(阿里巴巴)、MyCat(基于Cobar)、Oceanus(58同城)和Vitess(谷歌)
容器调度 Docker K8s
Docker
、LXC、第三方厂商如AWS
Kubernetes
、Core、Apache Mesos、DC/OS 、 Portainer
-
Kubernetes: 是用于 Docker 容器的编排系统,使用标签和 pods 的概念将容器分为许多逻辑单元。Pod 是 Kubernetes 与其他两种解决方案之间的主要区别所在——它们是位于同一地点的容器的集合,共同组成部署和调度服务。与基于基于相似性的容器协同调度机制(如 Swarm 和 Mesos)相比,这种方法简化了集群的管理。
Kubernetes 调度程序的任务是监视 PodSpec 为空的 Pod。NodeName 赋予一个值,以将容器调度在集群中的某个位置。
这是与 Swarm 和 Mesos 不一样的地方,因为 Kubernetes 允许开发人员在运行 Pod 时通过定义 PodSpec.NodeName 来绕过调度程序。
调度程序使用谓词和优先级来定义容器应运行的节点。这些参数的默认值可以使用新的调度程序策略配置覆盖。
如果使用命令行标志 policy-config-file 指向描述启动 Kubernetes 时要使用的谓词和优先级的 JSON 文件,调度程序就会使用管理员定义的策略。 -
Mesos: 的目的是建立一个可扩展且高效的系统,以支持当前和将来的各种框架。这也是主要问题所在:Hadoop 和 MPI 之类的框架都是独立开发的,因此无法在各个框架之间进行细粒度的共享。
Mesos 的对策是添加一个资源共享薄层,为框架提供访问集群资源的公共接口。Mesos 正在将对调度的控制权委派给框架,因为许多框架已经实现了复杂的调度机制。
根据要在集群上运行的作业类型可以将框架分为四类,其中一些具有 Marathon 之类的原生 Docker 支持。Mesos 0.20.0 中添加了对 Docker 容器的支持。
我们将重点介绍 Mesos 与 Marathon 的搭配用法,因为后者是 Mesosphere 积极维护的框架,在调度方面提供了许多功能,如约束、运行状况检查、服务发现和负载平衡等。
如图所见,集群中有四个元素。ZooKeeper 帮助 Marathon 查找 Mesos master 的地址,可以使用多个实例来处理故障。
Marathon 负责启动、监视并扩展容器。Mesos master 将分配给节点的任务发送给 Marathon,并在节点具有一些可用的 CPU/RAM 时向 Marathon 提出要约。Mesos slaves 负责运行容器并提交自身可用资源的列表。
辅助工具(通讯工具)Zoom
通讯工具主要是用于多团队沟通,减少等待时间,改善协作能力。目前业内比较常用的通讯工具包括 Slack、Microsoft Teams、Google Hangouts 和 Zoom。
-
Slack :是 Slack Technologies 开发的专用即时消息平台。
Slack 本质上是整个公司的聊天室,旨在取代电子邮件作为你交流和共享信息的主要方法。它的工作空间使你可以按频道来组织小组讨论,并支持私信功能,可以一站式共享信息和文件等。 -
Microsoft Teams: 是一个统一的通信和协作平台,提供了可靠的工作聊天、视频会议、文件存储和应用程序集成特性。
Teams 是基于聊天的协作工具,可为跨越全球、远程和分散的团队提供在一个公共空间共同工作和共享信息的能力。它有一些很酷的功能,如文档协作、一对一聊天和团队聊天等等。 -
Google Hangouts : 是谷歌开发的一种通讯软件产品。Hangouts 最初是 Google+ 的功能,后来在 2013 年成为独立产品,当时谷歌也开始将 Google+ Messenger 和 Google Talk 的功能集成到 Hangouts 中。
Hangouts Chat 是一种与组织中的成员交流的有效方法。你可以向一位或多位同事发送消息,创建空间来与多人开始持续会话,并使用机器助手来帮助你自动化操作。Chat 可在你的计算机浏览器以及适用于 Android 和 iOS 的移动应用中使用。 -
Zoom Video Communications : 是一家远程会议服务公司,总部位于加州圣何塞。它提供了将视频会议、在线会议、聊天和移动协作结合在一起的远程会议服务。
对于寻求整体业务解决方案的团队来说,Skype 是更好的选择。Zoom 非常适合经常进行视频聊天和会议的团队。但是,这两种工具都不是专门为远程工作而构建的。