在过去的几年中,我们的网络支持了数十万次体育赛事直播,大量软件下载,数十亿小时的流式视频内容,以及数千个Web应用程序的需求,这些应用程序都需要实时响应和全球一致的性能。 为了支持这一巨大增长,自2015年以来,我们的全球网络已增长到250 Tbps以上,需要在我们的300个POP中部署数千台新服务器。
为了应对部署不断增长和变化的网络占地面积的挑战,我们的运营团队使用StackStorm开发了一个IT自动化平台。 这是一个巨大的飞跃,改变了我们团队部署,更改,修复和停用服务器基础设施的方式,跨越了全球网络中95%以上的服务器人口。
下面介绍一下我们如何构建自动化平台,使我们能够:
- 在不到三年的时间内向我们的网络添加超过12,000台服务器。
- 在某些情况下自动生成票证,在其他情况下无需票证即可解决问题。
- 为我们的团队提供实时协作的工具。
- 减少工程师在执行一系列手动步骤时所花费的时间。
将StackStorm自定义为项目小龙虾
认识到IT自动化平台的价值和成熟度,2015年,我们成立了基础设施自动化团队,项目名为Crayfish。 我们开始认真地开发IT自动化解决方案—对于我们这样规模的组织来说,这是一项不小的任务。 我们仍在使用项目名称的选择是有意的。 长期以来,我们的工具都以鱼类和航海为主题,但除此之外,我们选择了小龙虾,因为它们用作过滤喂食器,有助于保持它们生活在清洁环境中。
最初,我们考虑开发自己的IT自动化框架,但早些时候决定StackStorm通过附加增强来支持我们独特的要求和规模,使我们能够最有效地向前发展。 StackStorm是一个开源事件驱动平台,支持DevOps自动化的”基础设施即代码”方法。 它擅长基于事件运行工作流,与我们在运营团队中使用的Slack集成,并具有本机ChatOps支持。
已对StackStorm进行了一些配置更改,以使其能够以我们需要的规模运行。 这主要涉及增加正在运行的服务实例的数量和减少数据保留。 当我们开始该项目时,我们的网络由8000台服务器组成。 现在,我们有20,000台服务器,而且还在不断增加。 我们可扩展性的关键在于能够以工作人员身份运行任意数量的StackStorm实例,而不是尝试让单个StackStorm实例处理一切。 如下图所示,这是我们开发的策略引擎实现的,该引擎基于我们的业务逻辑对向StackStorm提交请求进行了门控。 策略引擎可以选择将请求排队,并在策略确定请求安全时自动运行请求。 这些策略监控并发性,容量,流量,生产状态,基础设施,黑名单和故障率。
提交请求通过策略引擎实例路由到任意数量的StackStorm工作者,以获得几乎无限的可伸缩性。
编纂部落知识
任何IT自动化项目的基本方法都是捕获现有流程和工作流,将其转换为无需人工干预即可实施工作流步骤的代码,并将编码后的工作流存储在一个集中的存储库中,在该库中可以根据需要调用这些流程和工作流,作为其他自动化的一部分或通过ChatOps命令进行调用。
项目开始后,小龙虾团队捕获了整个组织的现有工作流和流程。 幸运的是,不同组使用的大多数最重要的过程,如网络运营中心(NOC),数据中心运营(Data Center Operation)或SysOps,都有很好的记录,可以使用Python编程语言快速编码并添加到小龙虾中。
例如,如果我们的NOC想要实施重新引导工作流,则需要根据各种策略检查来验证在计算机上工作是否安全。 例如,如果服务器处于生产状态,系统将采取措施来释放连接并更新状态。 接下来,它将执行实际重启和必要的步骤,以验证机器是否已准备好投入生产,然后最终将其返回生产。
可以肯定的是,有大量的边缘案例。 其中最具挑战性的是尚未将其纳入文件的程序。 这些部落知识案件需要跨职能协作,并与那些具有专门知识的人交谈,以确保这些案件得到正确处理。 自动化工作的另一个好处是我们能够捕捉到这些知识,确保这些知识在我们的组织中继续存在。
在某些情况下,我们甚至能够通过与了解特定任务发生了什么或如何解决特定问题的多名工程师和技术人员联系来确定处理特定任务的更有效方法。 我们发现,在某些情况下,不同团队成员的知识水平不同。 这时,我们将收集每个人的情报,并制定一个大家都同意的工作流程,以提供最高效的解决方案。
按需部署新服务器
Crayfish在许多层面上改变了我们的IT运营,例如简化服务器管理,减少服务器停机时间和加快服务器部署。 仅在2018年,ITOps就为我们的全球网络增加了22 Tbps的容量。 如果没有小龙虾的自动化,就不可能增加数千台服务器。 这项工作是在没有大幅度增加工作人员人数的情况下完成的。
目前,小龙虾为大约20种不同的服务器类型提供强大的自动化功能。 在我们的组织中,我们将服务器类型定义为一组运行大致相同服务的服务器。 不同的应用程序在不同的服务器类型上运行,在生产过程中,每种服务器类型都有不同的支持需求。 如今,Crayfish支持大约10种服务器类型的完整服务器生命周期,还可以为大约10种额外的服务器类型执行大多数修复,修订和修补。 它还提供不同程度的支撑,约40或50个以上。 由于我们专注于部署最广泛的服务器类型,Crayfish支持全球大约96%的服务器。
小龙虾的使用使CDN的性能和适应意外事件的能力得到了全面提高。 我们的网络设备完善,能够支持来自主要体育赛事流和高峰软件下载的大量不断增长的流量,例如,通过保持更多服务器投入生产,并减少在高峰流量时段从生产中移除服务器所造成的中断。
从性能的角度来看,我们的规模决定了小龙虾为何至关重要。 如果您的公司有一个数据中心,您可以安排停机时间并掌握该数据中心的需求。 但是,当您谈论几乎每个时区的数据中心时,如下面的网络图所示,您必须应对不同的配置文件,使用和使用时间。 将所有这些因素逐案考虑可能极为复杂,但小龙虾处理起来很容易。
使用小龙虾,我们仍然可以计划自动执行配置或升级等任务,但系统足够智能,足以满足本地需求。 假设在拉脱维亚发生的一个新闻事件导致视频流出现了巨大的高峰,当我们想要重新配置拉脱维亚的所有服务器时。 由于小龙虾与我们的指标收集系统已融合,系统将会增加流量,而重新供给将会停止。 如果需要,IT甚至可以将更多的服务器投入生产。
在基础设施故障变为服务中断之前捕获这些故障
小龙虾和其他监控系统显著减少了单个服务器的停机时间和维修时间。 我们的系统会持续监控网络是否存在问题或故障,并可以自动创建票据或直接应用修复程序。 借助自动化系统,员工无需”眼睛盯着眼睛”即可发现网络错误—计算机永远不会感到厌倦或疲劳,并持续进行监控。
以这种方式可以完成的检查的数量很少受到限制。 我们的Metrics系统持续运行硬件检查,无需将机器停机,而另一个系统则查找不良值,并在发现问题时调用小龙虾检查机器。 通过这种方法,我们可以很早地发现硬件故障。
例如,如果指标显示硬盘驱动器开始出现故障,自动化系统将启动小龙虾中的工作流程,以验证受影响机器上的错误并收集有关故障的详细信息,例如哪个硬盘驱动器在哪个插槽中出现故障,屏蔽号等。 然后为数据中心操作组创建特制的票证,并派遣一名技术人员安装更换件。
以往,任何需要多个部门在各个步骤之间协调或交接的手动工作流程都会造成重大延迟。 使用自动化工作流,完成时间可能是几分钟,而不是花费在票证队列中等待请求弹出的天数。 这使各个运营团队掌握了更多的控制权,他们最了解自己的系统和应用程序。
为工程师提供工具,提高他们的工作效率
我们以前的NOC工作方法涉及发出命令并等待事情发生。 如果NOC技术人员花费10,20或30分钟等待服务器正常关闭,您必须询问原因。 这是一个很好的利用时间吗? 小龙虾可以同时执行许多,许多处决。 如前所述,小龙虾的设计可水平缩放。 因此,如果我们需要更多的工作,我们可以添加一个新的节点。 如果我们突然发现自己必须一次性完成大量工作,我们可以在整个CDN中纵向扩展几个节点,然后缩小规模。
此外,技术人员在任何时候都只能在多少台机器上工作,因此只能记住这么多内存。 只有最出色的多任务处理程序才能处理五台或六台以上处于不同状态的机器,而不会丢失轨迹或出错。 但对于小龙虾,无需在各种任务之间跳转,他们可以发出命令并继续前进。
在软件基础架构和系统运营团队开发的现有智能配置系统的基础上,Crayfish完全支持服务器生命周期的其他方面,并在很大程度上自主进行,包括操作系统更新,服务器配置或重新配置固件更新以及安全补丁。 新补丁发布后,小龙虾会加快验证测试的速度,以确保补丁可以发布。
由于小龙虾与Slack集成,因此它支持正常的IT流程,并根据需求和要求的变化促进协作工作。 团队现在可以将其手动流程定义为自动化工作流程,而不是等待单个部门实施变更。 然后,他们可以将工作流提供给最终用户,以便按需运行。 还可以实施限制工作流何时可以安全运行的策略。 这还允许站在数据中心服务器前面的工程师发出命令,以更改他们要处理的服务器的生产状态。
最后的想法
随着成千上万的客户每天在我们由20,000多台服务器组成的全球网络上推送TB数据,我们实施StackStorm已成为保持服务健康和安全的重要运营工具。 它使我们能够更快地扩展我们的网络,以满足客户需求,同时在动态变化和意外流量激增的情况下提供更好的性能。 这种运营敏捷性使我们成为更可靠的服务提供商,可扩展以满足流媒体和Web应用程序的需求。
虽然大多数组织的运营规模与我们的规模不同,但仍有几个运营表利害关系可以使自动化具有吸引力,包括它能够:
- 将开发人员的精力集中在可产生更高回报的工作上
- 标准化日常任务和日常任务。
- 改善各部门之间的协作。
- 减少服务器停机时间。
- 通过实施固件更新和安全修补程序来提高安全性。
毫无疑问,迁移到IT自动化可带来极具吸引力的投资回报,但务必确保您的迁移出于正确的原因。 一个很好的方法是将自动化视为一种为工程师提供工具的方式,使他们能够更高效,更熟练,并使他们能够专注于改进。
过渡到基于工作流的自动化是社交和编纂部落知识的绝佳方式。 而不是每个人都有自己的方法-我们将部落聚集在一起,制定一个共同的工作流程,并使每个人都能将未来获得的知识贡献到单一的底线上。