大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

Slack 对 Chef 架构进行改进,提高其安全性和稳定性

作者:Matt Saunders

  • 2024-11-29
    北京
  • 本文字数:1393 字

    阅读完需:约 5 分钟

Slack 对 Chef 架构进行改进,提高其安全性和稳定性

在近期的一篇博文中,Slack 的工程部详细介绍了他们在 Chef 基础架构上的重大改进,将管理着上万个 EC2 实例中运行的服务、数据库和应用程序的架构从单一的 Chef 堆栈转移为了弹性更强的分片基础架构。


这次的架构转移,Slack 希望能解决一些之前难以解决的限制问题:


  • 为节点分配分片

  • 发现周围邻居

  • 找寻 Chef

  • 上传常用代码合集(Cookbook)


在先前的设置中,Slack 是在沙盒、开发和生产这三个环境中使用一个 Chef 栈。这种架构风险很高,因为更改是会在不同环境中同时部署的,堆栈中的任何问题都可能影响整个基础架构。这套系统是用一个叫 DishPig 的流程来处理每小时触发的 cookbook 更新。



为了解决这些限制,工程团队进行了以下几项关键改动:首先是创建多个 Chef 堆栈,以便于分散负载并确保系统的弹性,新的实例采用 AWS Route53 加权 CNAME 记录并分配给特定分片。此外,Slack 工程团队还将开发和生产环境的 Chef 基础架构分离成不同的堆栈。


为解决在新分片基础架构中发现节点的难题,Slack 工程团队采用了 Consul 来做服务发现。这点需要仔细地实施,从而避免与 Nebula 重叠网络之间产生循环依赖关系。团队开发了定制的 Chef 库函数,从而简化基于各种条件的节点查询,有效地取代了先前的 Chef 搜索功能。


Slack 还创建了一项名为 Shearch(“分片 Chef 搜索”的简称) 的新服务,用于在多个 Chef 堆栈中进行搜索,还可以整合在不同分片上的搜索结果。Slack 团队还开发了一项叫做 Gnife 的新工具,取代传统 Chef Knife 命令来实现跨多个分片的操作。


团队采用 Chef Librarian 取代了 DishPig 系统,这项服务可以独立管理 cookbook 的版本和环境更新,从而实现更为可控的部署。在合并变更时,GitHub Actions 会生成一个包含全部代码库副本的压缩包,并用时间戳格式(YYYYMMDD.TIMESTAMP.0)更新 cookbook 的版本。


Chef Librarian 提供了更新环境到特定版本和环境相互匹配功能的 API 端点,利用 Chef Librarian,Slack 可以在沙盒和开发环境中对更改进行测试,然后再推送到生产环境,从而降低了出问题的更改影响所有环境的风险。这项服务会将工作版本和部署信息存储到 DynamoDB 中,可以更为方便地跟踪和查看。



当用户的变更被推送到环境中时,Slack 应用会通知用户并使用 Git 中的 commit 备注判断并标注对应的团队成员。Kubernetes CronJob 负责跨环境的版本推送和安全检查,以便在发现问题时阻止推送。


Slack 将角色简化到基本信息和运行列表,让 Chef 角色(无法通过版本控制)的风险降到最低。只有在相关环境更新时,角色才会上载到相关的 Chef 堆栈中。


Slack 在考虑更进一步地改进其 Chef 基础设施,其中一项是按照 AWS 可用性区域划分生产的 Chef 环境,这样可以对变更的部署进行更为细粒化的控制。Slack 还在探索采用 Chef PolicyFiles 和 PolicyGroups 的可行性,不过这将会对他们当前的设置带来巨大的改变。


和十年前的风光不同,Chef 不再是那么地受欢迎,这可能是由于 Ansible 和其他云原生解决方案等替代品的兴起。IT 行业向容器化的转变改变了许多企业的配置管理方式,多数企业转投了 Kubernetes 和 Docker 的怀抱。Chef 在 2020 年被 Progress Software 收购可能也影响了它在长期的采用率。


即使如此,Chef 仍然拥有坚实的用户基础,这在已实施了 Chef 或者是有适合 Chef 方法的特定用例的组织中尤为突出。


查看英文原文链接:

https://www.infoq.com/news/2024/10/slack-chef-architecture/

2024-11-29 08:1513737

评论

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

世界电信日 | 英特尔5G赋能数字化转型的实现之道

E科讯

面试让HR都能听懂的MySQL锁机制详解

linux大本营

MySQL 数据库 Linux 后台开发

SpringCloudRPC远程调用核心原理:代理模式与RPC客户端实现类

小Q

Java 学习 架构 面试

一文读懂微前端架构

EAWorld

博睿数据与阿里云签订云原生核心合作伙伴计划,推动企业智能运维落地

阿里巴巴云原生

人工智能 容器 微服务 运维 云原生

android插件化面试,渣本逆袭大厂面经分享,震撼来袭免费下载!

欢喜学安卓

android 程序员 面试 移动开发

Flink CEP 监测刷屏用户

五分钟学大数据

flink 5月日更

音视频开发视频和视频帧:ffmpeg的RTMP推流

赖猫

音视频 ffmpeg 推流 RTMP RTSP

C语言与C++学习路线、书籍、视频推荐和资料,值得收藏!

C语言与CPP编程

c++ 学习 C语言 视频 资料

前端领域的数据状态统一管理机制

鲸品堂

大前端 数据 流程图 state

消费者剩余:你愿意花多少钱买一件东西?

石云升

创业 产品 职场经验 5月日更

因你不同,2021 阿里云开发者大会重磅开启 @ 所有开发者!

阿里巴巴云原生

开发者 云原生 活动

如何模拟弱网环境?

运维研习社

Linux 运维 网络 5月日更

Redis后端之Redis持久化

赖猫

redis 后端 LinuxC/C++

60个适合练手的C语言/C++项目,值得收藏!

C语言与CPP编程

c++ 源码 C语言

从非洲血库到热带雨林:为什么普惠联接是社会的数字化支点?

脑极体

英特尔PK赛灵思,完美胜出!Agilex™ FPGA迎来大规模量产

E科讯

你是否想要自由地构筑世界?51WORLD助力数字孪生开发者快速成长

Meta 小元

开发者工具 开发者关系 数字孪生 全要素场景

Flink常见数据源

大数据技术指南

大数据 flink 5月日更

Vineyard 加入 CNCF Sandbox,将继续瞄准云原生大数据分析领域

阿里巴巴云原生

大数据 容器 开发者 云原生 存储

并发王者课-青铜1:兵分三路-从创建线程开始

MetaThoughts

Java 多线程 高并发 Java高并发 每周二四六更新

英特尔Agilex FPGA大规模量产出货,正面硬杠赛灵思

E科讯

Nextcloud一站式体验

白粥

NAS Nextcloud

上架Google Play应用如何适配Android 11?

YonBuilder低代码开发平台

看完这个刷题笔记与代码规范,距大厂又近了一步!值得收藏!

C语言与CPP编程

c++ 程序人生 算法 C语言 代码规范

Android面试题!深入理解JVM的核心知识点,值得一读!

欢喜学安卓

android 程序员 面试 移动开发

领域驱动设计(DDD)

码界行者

DDD

百亿级图数据在快手安全情报的应用与挑战

NebulaGraph

图数据库 大厂实践

架构实战营 - 模块 4- 作业

carl

金三银四面试结束后,整理的1000道Java面试题及答案

Java 程序员 架构 面试

从火星的古海洋,读懂蓝星的数据湖之变

脑极体

Slack 对 Chef 架构进行改进,提高其安全性和稳定性_架构_InfoQ精选文章