写点什么

如何通过 StackStorm 自动支持 2 万多台服务器

  • 2019-04-02
  • 本文字数:4025 字

    阅读完需:约 13 分钟

如何通过StackStorm自动支持2万多台服务器

在过去的三年中,我们的网络为成千上万次直播体育赛事、海量软件下载、数十亿小时流媒体视频内容以及数千个需要实时响应的 Web 应用程序提供支持。为了支持这种大规模的增长,从 2015 年开始,我们的全球网络已经增加到 71 Tbps,我们在 135 个 PoP 中部署了数千台新服务器。


网络部署规模不断增长和变化,为了解决这方面的挑战,我们的运营团队使用 StackStorm 开发了一个 IT 自动化平台。这是一个巨大的飞跃,改变了我们部署、变更、修复和停用服务器的方式,这些服务器占到了我们全球网络 95%以上的比例。


以下是这个自动化平台给我们带来的好处:


  • 在三年内将 12,000 多台服务器添加到我们的网络中。

  • 在某些情况下自动生成 ticket,在没有 ticket 的情况下自动解决问题。

  • 为团队提供工具,让他们可以进行实时的协作。

  • 遵循一系列手动步骤为工程师节省时间。

基于 StackStorm 的自定义项目 Crayfish

因为认识到 IT 自动化平台的价值以及这种平台的日益成熟,2015 年,我们成立了基础设施自动化团队,并开始了 Crayfish(小龙虾)项目,认真开发 IT 自动化解决方案——对于我们这样规模的企业来说,这是一项艰巨的任务。项目名称的选择——我们现在仍在使用——是有意而为之的。一直以来,我们的工具都以鱼类和航海为主题,我们之所以选择 Crayfish,是因为小龙虾是滤食性动物,可以保持环境的清洁。


最开始我们也考虑过开发自己的 IT 自动化框架,后来决定使用 StackStorm(https://stackstorm.com/),并通过增强功能来支持我们独特的需求和规模,让我们能够更高效地往前走。


StackStorm 是一个开源的基于事件驱动的平台,支持“基础设施即代码”。它擅长基于事件运行工作流,可以与 Slack 集成,并提供了原生的 ChatOps 支持。


我们已经对 StackStorm 做出了一些配置变更来满足我们所需的规模。首先,我们需要增加服务实例的数量,并减少数据保留。在项目启动时,我们的网络有 8,000 台服务器,而现在服务器数量已经达到 20,000 台。可伸缩性的关键在于能够运行任意数量的 StackStorm 实例,并把它们作为 worker 运行,而不是让单个 StackStorm 实例处理所有的东西。如下图所示,我们开发的一个叫作 Policy Engine 的东西可以帮我们做到这一点,它会根据我们的业务逻辑将提交的请求转发给 StackStorm。Policy Engine 还可以将请求放在队列中,并在安全的情况下自动处理这些请求。这些策略用来监控并发、容量、流量、生产状态、基础设施、黑名单和故障率。


编撰部落知识

IT 自动化项目的基本方法是捕获现有流程和工作流,然后将它们转换为可以在不需要人工干预的情况下实现工作流步骤的代码,并将它们存储在中央存储库中,然后作为自动化的一部分或通过 ChatOps 命令来调用它们。


项目开始后,Crayfish 团队捕获了整个组织现有的工作流程和流程。所幸的是,不同部门使用的大多数重要的流程(例如网络运营中心、数据中心运营或 SysOps)都有详细的记录,可以使用 Python 来快速编码并添加到 Crayfish 中。


例如,如果我们的网络运营中心想要实现一个重启工作流,它首先需要根据各种策略验证在机器上运行工作流是否安全。如果服务器处于生产环境中,系统将会采取措施来消耗连接并更新状态。接下来,它将执行实际的重启动作和必要的步骤来验证机器是否已经准备好进入生产状态。


可以肯定的是,我们遇到了很多边缘案例,其中最具挑战性的是那些还没有被记录到文档中的流程。为了搞定这些边缘案例,我们需要进行跨职能合作,并与正确的人沟通。自动化的一个好处是我们可以捕获到这些知识,确保它们在我们的组织中继续存在。


在某些情况下,我们甚至与一些了解特定任务或知道如何解决特定问题的工程师和技术人员一起合作,找出更有效处理特定任务的方法。我们发现,在某些情况下,不同团队成员的知识水平是不一样的。那时候,我们开始收集每个人的意见,提出一个每个人都同意的工作流,并将其作为最有效的解决方案。

按需部署新服务器

Crayfish 已经从多个层面改变了我们的 IT 运营,例如简化服务器管理、减少服务器停机时间以及加快服务器部署。仅在 2018 年一年,ITOps 就为我们的全球网络增加了 22 Tbps 的容量。如果没有 Crayfish 的自动化,就不可能新增数千台服务器,而且这是在不需要显著提高员工技术水平的情况下完成的。


目前,Crayfish 为大约 20 种不同的服务器类型提供强大的自动化功能。我们将服务器类型定义为运行相似服务的一组服务器。不同的应用程序运行在不同的服务器类型上,因此每种服务器类型在生产环境中需要得到不同的支持。今天,Crayfish 支持大约 10 种服务器类型的完整生命周期,并且还可以对大约 10 种其他服务器类型做出修复、更改和打补丁。它还为大约 40 或 50 多种服务器类型提供不同程度的支持。由于我们专注于部署使用最广泛的服务器类型,因此 Crayfish 可以为约 96%服务器提供支持。


因为使用了 Crayfish,CDN 的整体性能得到了提升,并且具备了应对意外事件的能力。我们的网络设备齐全,可以支持来自主要体育赛事和峰值软件下载的流量,例如,将更多的服务器保留在生产环境中,减少在高峰期间从生产环境中移除服务器所造成的中断。


从性能的角度来看,因为我们的规模够大,所以才体现出 Crayfish 的重要性。如果你的公司有一个数据中心,并且你可以控制停机时间,那么你就完全可以掌控数据中心。但如果是像下图所示的那样,数据中心跨越了几乎所有的时区,那么你就不得不去应对不同的配置文件、使用情况和使用时间。如果把所有这些考虑因素考虑在内,具体情况可能会非常复杂,但 Crayfish 可以轻松处理它们。



在使用 Crayfish 时,我们仍然可以调度任务,例如自动执行配置或升级,但系统可以智能地满足本地需求。例如,当我们想要重新配置拉脱维亚的所有服务器时,拉脱维亚的某个新闻事件会导致视频流量大幅增加。因为 Crayfish 与我们的度量收集系统集成在一起,所以系统将会看到流量增加,重新配置操作就会停止。如果有必要,甚至可以将更多服务器加入到生产环境中。

在服务中断之前捕获基础设施故障

Crayfish 与其他监控系统相结合可以显著减少个别服务器的停机时间和维修时间。我们的系统持续监控网络是否出现了问题或故障,并且可以自动创建故障 ticket 或直接打补丁。有了自动化系统,我们的员工不需要通过“死盯”的方式来发现网络错误——计算机会永不疲倦地进行持续的监控。


我们可以通过这种方式完成的检查几乎没有数量上的限制。我们的度量系统不断运行硬件检查,不需要将机器撤出生产环境,而另一个系统会查找错误,并在发现问题时调用 Crayfish 对机器执行检查。通过这种方法,我们能够及早地发现硬件故障。


例如,如果有指标显示硬盘驱动器开始出现故障,自动化系统将启动 Crayfish 中的工作流,对受影响的计算机进行错误验证,并收集有关故障的详细信息,例如硬盘驱动器在哪个插槽中出现故障、屏蔽号码,等等。然后,它会为数据中心运维组创建 ticket,运维组会派技术人员前往安装替换硬件。


根据经验,任何需要多个部门协作或多个步骤之间需要手动切换的工作流都会带来严重的延迟。有了自动化工作流,完成时间可以是几分钟,而不是几天。这给了每个运维团队更大的控制权,他们是最了解他们系统和应用程序的人。

为工程师提供可以让他们变得更高效的工具

我们以前都是向网络运营中心发出命令,然后等待事情发生。如果网络运营中心的技术人员花了 10 分钟、20 分钟或 30 分钟等待服务器正常关闭,你必须要去问为什么。而 Crayfish 可以并行执行多个任务,而且支持横向扩展。因此,如果我们需要处理更多的工作负载,可以添加新节点。如果我们突然发现需要同时处理大量的工作负载,可以跨整个 CDN 扩展多个节点,在处理完成后再缩减节点。


而且,技术人员的工作记忆是有限的,他们在同一时间只能操作几台机器。只有最出色的多任务处理程序才能同时处理五六台处于不同状态的机器,而且保证不会丢失跟踪状态或出现错误。在使用 Crayfish 时,不需要在各种任务之间切换,它们发出命令,然后继续后续的处理。


Crayfish 构建在由软件基础设施和系统运营团队开发的智能配置系统之上,所以完全支持服务器生命周期的其他方面,并在很大程度上是自治的,包括操作系统更新、服务器配置或重新配置、固件更新和安全补丁。当有新补丁发布时,Crayfish 会快速进行验证,以确保补丁可以发布。


因为 Crayfish 与 Slack 进行了集成,所以它也支持一般性的 IT 流程,并在需求发生变化时能够促进团队之间的协作。现在,团队可以将手动流程定义为自动化工作流,而不需要等待某个部门实现变更。然后,他们可以为最终用户提供按需运行的工作流。现在还可以限制安全运行工作流的策略。在数据中心里工作的工程师也可以发出命令来修改服务器的生产状态。

最后的想法

由于成千上万的客户每天通过我们的 20,000 多台服务器推送数 TB 的数据,StackStorm 已经成为保持服务健康和安全的重要运维工具。我们现在能够更快地扩展网络来满足客户的需求,同时在发生动态变化和意外流量激增的情况下提供更好的性能。这种运营灵活性让我们成为更可靠的服务提供商,并具备足够的伸缩性来满足流媒体和 Web 应用程序的需求。


虽然其他大多数企业的规模与我们不同,但仍然有很多东西可以进行自动化,包括:


  • 让开发人员专注于能够带来更高回报的工作。

  • 标准化普通的日常任务。

  • 改善跨部门的协作。

  • 减少服务器停机时间。

  • 通过固件更新和安全补丁来提高安全性。


毫无疑问,向 IT 自动化的转变提供了非常有吸引力的投资回报,但最重要的是要确保你的初衷是正确的。我们可以将自动化视为一种为工程师提供工具的方法,这些工具可以提高他们的工作效率和熟练程度,并使他们能够专注于做出改进。


如果做得好,向基于工作流的自动化过渡是社交化和编撰部落知识的一种非常好的方式。我们将部落聚集在一起,提出一个共同的工作流,并让每个人都能在未来基于共同的基线贡献自己的知识。


英文原文:https://medium.com/@verizondigital/using-stackstorm-to-automate-support-for-20-000-servers-4b47ae3a4e98


2019-04-02 08:5811904
用户头像

发布了 731 篇内容, 共 449.5 次阅读, 收获喜欢 2002 次。

关注

评论

发布
暂无评论
发现更多内容

OSI模型第一层:物理层,基石般的存在!

wljslmz

物理层 网络技术 OSI模型 7月月更

IntelliJ IDEA使用

GalaxyCreater

Java IDEA

【Go实现】实践GoF的23种设计模式:观察者模式

元闰子

Go 设计模式 观察者模式 Go 语言

Protocol buffers 的问题和滥用

HoneyMoose

@Entity 里面的 JPA 注解

Damon

7月月更

springMvc参数获取

沃德

Java 7月月更

类的基础

GalaxyCreater

多线程&高并发(全网最新:面试题+导图+笔记)面试手稳心不慌

冉然学Java

Java 编程 多线程并发 高并发系统 资料分享

自动驾驶产品化竞备开启:百度Apollo如何定义量产车?

脑极体

李宏毅《机器学习》丨7. Conclusion(总结)

AXYZdong

7月月更

全新出品!Github总榜排行第七的SpringCloud生态全栈笔记我粉了

Java全栈架构师

Java 程序员 面试 微服务 SpringCloud

Java开发环境配置 / Vscode搭建

攻城狮杰森

Java jdk 7月月更

7大专题详解SpringBoot,阿里这套SpringBoot全栈笔记真香

Java永远的神

Java 程序员 面试 程序人生 springboot

界面设计四大原则

空城机

设计模式 7月月更

python小知识-代码规范最佳实践

AIWeker

7月月更 pyhon小知识

MySQL数据库索引

技术小生

索引 7月月更

OpenIM重大优化-消息按需加载 一致性缓存 uniapp发布

Geek_1ef48b

面试官:MySQL 数据库查询慢,除了索引问题还可能是什么原因?

Java全栈架构师

Java MySQL 数据库 面试 后端

一时跳槽一时爽,一直跳槽一直爽?

KEY.L

7月月更

Vue Router 守卫

程序员海军

Vue 7月月更

节流和防抖的说明和实现

南极一块修炼千年的大冰块

7月月更

12张图+6K字图解ZGC垃圾回收器及调优技巧

程序员小毕

程序员 面试 程序人生 ZGC JVM

图的存储结构与方法(二)

乔乔

7月月更

Docker安装Elasticsearch、ik分词器、可视化工具

宁在春

Docker Elastic Stack 7月月更

mysql进阶(十九)SQL语句如何精准查找某一时间段的数据

No Silver Bullet

MySQL 7月月更 精确查找

参与开源社区还有证书拿?

玩转Devop和研发效能DevStream/DevLake

GitHub 开源 开发者 证书

作为一名后台开发人员,你必须知道的两种过滤器

C++后台开发

后台开发 后端开发 Linux服务器开发 C/C++后台开发 C/C++开发

做一个有职业操守的软件匠人

Bruce Talk

技术 敏捷 TDD Agile

基于 Web SDK 实现视频通话场景 | 声网 SDK 教程

声网

视频 SDK 教程

SpringBoot项目使用Tomcat为什么让大厂禁止?

Java程序员

Java 程序员 Sprint Boot

深入浅出边缘云 | 1. 概述

俞凡

架构 边缘计算 网络 深入浅出边缘云

如何通过StackStorm自动支持2万多台服务器_软件工程_维珍数字媒体服务团队_InfoQ精选文章