Zalando 推出 STUPS,一个运行在 AWS 之上并符合审计合规性的 PaaS

阅读数:375 2016 年 4 月 8 日

话题:AWSDevOps语言 & 开发

microXchg 2016 大会的一场演讲中,来自Zalando的演讲者为听众介绍了他们推出的一个适用于多个自治团队,并具备审计合规性的平台即服务(PaaS)产品,该产品是在 Amazon Web Services(AWS)的基础上运行的。InfoQ 近期与 Zalando 的一位云架构师Tobias Sarnowski进行了一次访谈,对于这个平台的更多技术细节进行了交流。

演讲的关键内容包括:随着一个工程性组织的发展,为了使开发工作做到同步扩张,关键在于实现具备自治能力的团队,并打造一个支持性的技术平台(PaaS);出于法律与问题诊断方面的原因,对该 PaaS 平台中产生的任何行为进行审计操作是十分必要的;确保公司里的每个人都能够对技术愿景(以及相关的“游戏规则”)达成一致和共识,这一点有助于实现一致的技术决策。

InfoQ:你好 Tobias!感谢你今天能够抽空参与 InfoQ 的访谈。你能否介绍一下你自己以及 Zalando STUPS 这个平台?

Sarnowski:当然了。我是 Tobias Sarnowski,在 Zalando 担任云架构师。Zalando 是一个地处柏林的在线时尚平台,在整个欧洲还设立了几个办公室。我从 2012 年起加入 Zalando。

STUPS是一系列工具与组件的合称,它是一个适用于多个自治团队、易于使用、并具备审计合规性的平台即服务(PaaS)产品,该产品是在 Amazon Web Services(AWS)的基础上运行的。它本质上是一个 AWS 的插件,提供了一些对于 IaaS 的自定义抽象。除此之外,它还能够为部署的应用提供元数据服务、提供了基于 Docker 的部署工具、并为 OAuth 2.0 的身份凭证提供安全分布功能。

我的团队与我在 2015 年春季公开发布了 STUPS,在那之前不久,Zalando 技术部门刚刚实施了 Radical Agility 实践。Radical Agility 的概念是基于 Daniel Pink 的著作《驱动力》(Drive)而产生的,它是一种技术组织的运作方式,提倡自治、精通、目标以及信任。从某种角度来说,STUPS 是一种促进“Radical Agility”的前提条件。我们需要这样一种平台,让我们的工程团队能够真正地以自治的方式开展工作。

InfoQ:促使你们选择开发一个属于自己的平台,而不是利用某些现有的产品(例如 Cloud Foundry、Kubernetes 和 Cisco Mantl)的动力是什么?

Sarnowski:我要澄清一点,STUPS 并非一个独立的平台,它只是一个基于 AWS 的轻量级插件,这让我们能够最大程度地利用 AWS 上的全部产品,因为我们并不想束缚使用者的手脚。我们在一开始就设立了一个目标,让员工能够完整地利用原生 AWS 的各种功能。我们只是需要对某些部分加以限制,因为我们无法追踪这部分的行为,而各种内部与外部的审计过程又需要了解这些行为。谢天谢地,我们成功了!员工们仍然能够对他们的 AWS 账号进行管理操作,而几乎没有任何限制。

InfoQ:你为什么选择基于 AWS,而不是基于 GCP 或其他平台(或者选择让 STUPS 不依赖于任何平台)打造 STUPS?

Sarnowski:在云计算平台的功能性与成熟度方面,AWS 是一种安全的选择。人们对于它的长处与诀窍已经熟知于心。它提供了各种丰富的工具,让我们能够快速地启动开发过程,而无需自行投入过多的精力。

在我们对 AWS 进行评估的同时,GCP 还在逐步完善它的各种特性。但我们已经看到了 GCP 的巨大潜力,正打算对其进行进一步的研究。

STUPS 并非一种平台独立的产品,而更像是一个 AWS 的插件,无法脱离 AWS 独立运行。它的作用是让我们以一种更符合 Zalando 标准的方式使用 AWS 服务。

InfoQ:有部分人认为你们创建的某些工具是在“重复发明轮子”,例如 mint 对应 HashiCorp Vault、fullstop 对应 Gilt Cave、Senza 则对应 Ansible?你能否为我们分享一下团队在创建这些工具时的想法?

Sarnowski:STUPS 这套工具并没有重复发明轮子,它让我们能够更完整地利用 AWS 提供的功能。举例来说,mint充分地利用了 AWS IAM 与 S3 服务以分布 secret。这是一种非常轻量级的、极度灵活的使用 AWS 与 S3 的方式,我们也无需为此维护一套复杂的基础设施。Senza只是对 AWS CloudFormation 的一个轻量级封装而已,它同样能够让我们充分利用 AWS 产品的全力功能,而不是重新发明这些功能。

Taupage是我们的 AMI 工具,它与 Senza 一起为我们提供了一套自定义的部署方式。Taupage 本身是我们用于在大规模环境中对 Docker 容器进行编排的方式。Docker 是我们用于部署服务的格式,但每个容器都会有一个专用的服务器。

AWS 的生态系统主要专注于每台服务器一个应用的模型,因此我们一开始就清楚:我们必须利用这一特点,才能够自然地利用各种特性,例如 Auto Scaling Groups 和 Elastic Load Balancers 服务所提供的特性。Senza 提倡不可变部署的概念。对于应用程序的每个版本,我们都将创建新的 CloudFormation 栈。这种部署方式有着很高的可确定性,让我们能够放心地进行蓝 / 绿部署。

InfoQ:STUPS 的开发有多长时间了,现在又有多少个生产环境中的服务运行在 STUPS 上呢?你是否有计划将所有的 Zalando 应用全部迁移至 STUPS 上?

Sarnowski:我们从 2014 年稍晚时间开始开发 STUPS,从 2015 年 5 月起,每个 Zalando 团队都可以在生产环境中使用 STUPS 了。我们所有运行在 AWS 上的微服务以及有状态服务(PostgreSQL、Cassandra、Spark 和 Kafka)目前都运行在 STUPS 上。

是的,我们目前的计划是让所有应用都在 STUPS 上运行

InfoQ:在 STUPS 网站上,你提到“团队的全体成员具有相同的权限”以及“团队是自治的,可自行选择适合自己的技术”。这一点在实践中是怎样做到的,在技术层面和组织层面采取了哪些措施?

Sarnowski:在我们宣布采用 Radical Agility 的同时,我们也实施了五条“游戏规则”,以此作为团队在技术与组织层面上的准则。在技术层面,这些准则要求我们的所有服务都提供一套定义良好的 REST API(原先由 Swagger 2.0 定义,目前改为 OpenAPI 2.0)。我们还充分利用了能够实现大规模互联网服务的各种工具,例如通过 DNS 提供服务发现,用 OAuth 2.0 实现访问控制。这使我们的整体架构能够不依赖于个别的技术决策。

为了提高 OAuth 2.0 基础设施的可伸缩性,我们最近刚刚发布了一个“B 计划”provider,能够对我们的服务进行伸缩。我们最大限度利用了 OAuth 2.0,因为每个服务调用都必须进行认证与授权。这对于 OAuth 基础设施带来了很大的压力,而通用的各种 OAuth provider 无法在处理这么大负载的同时保证其响应速度。在 OAuth 上浪费的每一毫秒会不断地累积,对级联式的微服务调用造成很大的影响。

在 B 计划的设计中,我们将利用JWT,以一种去集中化的方式对 token 进行验证,以避免在 token 验证过程中产生一个巨大的单点故障。这也让我们能够将与 token 信息相关的终结点与应用进行本地部署(即部署在同一台服务器),以避免网络延迟问题,并将负载进行平均分布。

在团队内部的沟通上,我们正在实施目标与关键结果(OKR)模式。即使在这个层面上,团队也是自治的。我们所专注的关键价值在于沟通,让团队互相协作,而不是只关注自己的工作。

InfoQ:有些人,例如 Randy Shoup 曾经表示,独立负责创建与维护微服务的团队最终需要实现某些形式的经济回馈,以确保其他团队不会无节制地滥用资源。你们是否已经开始注意这一点了呢?

实际上,我们已经注意到了。我们在微服务模型上的工作时间还不长,对于未来的需求还不完全清楚,但我们很可能会从某个阶段开始对 API 的使用进行内部计费。目前来说,每个团队都是一个独立的 SaaS 提供者,这一点很可能也能够带来计费的能力。

InfoQ:在 STUPS 中,合规性与审计的观念似乎已经扮演了一等公民的角色,你能否解释一下其中的原因吗?

Sarnowski:一方面,我们希望让团队的自治性实现最大化,让为他们授权访问原生 AWS 功能的权限。不过,我们同时也是一个公开上市的技术公司,需要遵守金融监管,以及和数据处理与保护相关的各项法律,例如 PCI、SOX 与德国的法律等等。审计员需要了解我们是否遵守了相关法规。

如何弥补这方面的缺失,是我们面对的最大挑战之一。我们所设计的系统能够与我们的开发工作流进行无缝集成,并且在发现任何不符合规定的情况下能够发送接近实时的通知。这有助于开发者立即发现这些有问题的地方并采取措施。我们会持续与各团队交换意见,以改进我们的工具和工作流,让团队不会因为合规问题而放慢脚步。

InfoQ:对于有兴趣为 STUPS 贡献代码的开发者,怎样才是最好的贡献方式?你是否希望在某些方面得到他们的帮助?

Sarnowski:首先,我们将乐于看到有更多的人愿意尝试使用 STUPS。我们目前正致力于让 STUPS 更易于实施,并且更易于为外部公司,主要是专注于自定义企业集成的公司所用。我们同时也在查找并报告各种问题,并且提供丰富的文档,让其他开发者也能够充分地使用 STUPS。如果你在使用 STUPS 方面需要帮助,或是发现了某些问题,请与我们联系。

InfoQ:感谢你今天能够参与 InfoQ 的访谈。你还有哪些东西想与我们的读者分享吗?

Sarnowski:我想说的是,STUPS 表现了我们的工程团队每天都要面对的一些非常独特的、大规模的技术挑战。Zalando 去年进行了一次巨大的转型,从“在线商店”转变为“时尚平台”。从技术角度上说,这种转变意味着我们需要构建一个大规模的基础设施,以支持各种不同的业务项目。我们除了将许多工作结果作为开源项目发布之外,还维护着一个活跃的技术博客,并且在各种会议上进行了多次演讲。对于技术团队来说,这是一段令人振奋的时光。

STUPS平台的网站上可以找到关于该平台的更多信息,在Zalando 的 STUPS GitHub 账号下可找到它的代码。

查看英文原文Zalando’s STUPS: Creating an Audit-Compliant PaaS on Top of AWS