应用程序堆栈的复杂性不断增加。而且是大幅增加。应用程序堆栈一直都很复杂,但从未像现在这样。服务如此之多,工具如此之多,可用的计算能力如此之多,可以尝试的新技术如此之多,而且始终存在以更新、更酷、更优雅的方式解决问题的渴望和压力。有这么多玩具可以玩,而且每天都有更多玩具出现,玩具箱都快装不下了。
如果您不熟悉 stackshare.io,不妨看看。这是一个很棒的资源,可以了解公司正在使用哪些组件来构建他们的应用程序。除了实用之外,它也可能非常有趣。
花几分钟浏览一下那里的一些堆栈,您会发现人们组装的一些技术集合非常吸引人。这是一个我特别喜欢的例子:(深吸一口气)EC2 S3 Qubole MongoDB Memecached Redis Django Hadoop nginx Cassandra MySQL Google Analytics SendGrid Route53 Testdroid Varnish Zookeeper。
所以那是 Web 服务器、Web 应用程序服务器、缓存代理服务器、发现服务、一些服务即服务,以及 六个 具有各种风格和功能的“数据库”。(所有这些要么是开源的,要么是专有服务,当然。如今两者之间往往很少有中间地带。)
不太可能有人曾经站在白板前,用紫色记号笔写下 我们需要六个数据库!!!,但当您的基础设施快速扩展以满足业务需求时,事情就是这样发生的。开发人员决定新工具是最好的,无论对错,该工具都会进入生产环境。在那一刻,酷炫的新工具立即变成遗留应用程序,您必须处理它,直到您重构它(哈!)或者直到您辞职去做其他事情,让下一个可怜的倒霉蛋来处理它。
如何应对
那么,开发人员如何才能应对所有这些复杂性呢?事实证明,情况比人们预期的要好。
那个很棒的下一代位置感知在线组合赌博/约会/共享经济平台将需要许多不同的服务和组件。但是,每个宏伟的计划都有一个简单的开始,任何超大规模巨型解决方案的每个组件都始于某处的几块代码。对于大多数团队来说,那个地方是几台简陋的开发人员笔记本电脑,以及一个将它们绑在一起的 git 仓库。
我们谈论云计算革命,但我们倾向于较少谈论笔记本电脑革命。今天的开发人员笔记本电脑,结合 虚拟化 和容器化方面的进步,现在允许在笔记本电脑上完全建模复杂的多系统环境。多个“机器”现在可以成为安全的默认设置,因为这些多个独立的“机器”都可以在笔记本电脑上轻松实例化。
结果是:复杂的多系统应用程序堆栈的开发环境现在可以可靠且可重复地安装在单台笔记本电脑上,并且对环境的任何更改或对整个环境的更改都可以在整个团队中轻松共享,以便每个人都可以快速重建相同的环境。例如,ceph-ansible 是一个用于在笔记本电脑上部署和测试多节点 Ceph 集群的工具,它使用多个 VM,由 Vagrant 构建,并由 Ansible 编排,只需一个命令:vagrant up。Ceph 开发人员现在正在使用这个工具。
这种复杂的多节点部署已经变得司空见惯,这意味着对机器之间关系的建模现在与管理这些单个机器上的内容同等重要。
Docker 和 Vagrant 之所以成功,是因为它们是两种简单的方式来说明“这是这台机器上的内容,以及如何启动它”。Ansible 在两者中都取得成功,因为它是一种简单的方式来说明“这些机器是如何交互的,以及如何启动它们”。它们共同使开发人员能够构建复杂的多机器环境,以一种允许轻松描述和重建它们的方式。
人们常说,DevOps 的核心是一场对话。这可能是真的,但当每个人都说同一种语言时,这场对话才能最成功。Vagrant、Docker 和 Ansible 正在取得成功,因为它们允许人们说同一种建模和部署语言。
DevOps
本文是 Greg Dekoenigsberg 协调的 Easy DevOps 专栏的一部分。请通过 open@opensource.com 联系我们,分享您的故事和建议,这些故事和建议有助于使 DevOps 变得实用——以及来自您经验的工具、流程、文化、成功和光荣/不光荣的失败.
评论已关闭。