公司 Squarespace 地点 纽约州纽约市 行业 软件即服务,网站建设平台

挑战

Squarespace 网站可靠性团队的员工工程师 Kevin Lynch 表示,2014 年从单体架构迁移到微服务“解决了开发方面的问题,但将问题推给了基础设施团队。我们在 5,000 台虚拟机主机上的基础设施部署过程拖慢了所有人的速度。”

解决方案

该团队尝试了容器编排平台,发现 Kubernetes“回答了我们所有的问题”,Lynch 说。该公司于 2016 年开始在其数据中心运行 Kubernetes。

影响

自从 Squarespace 迁移到 Kubernetes 并对其网络堆栈进行现代化改造以来,部署时间缩减了近 85%。以前,他们的虚拟机部署需要半小时;Lynch 说,现在“有人可以在五分钟内生成一个模板化的应用程序,将其部署完毕,并在此时让实际实例容器化,并在我们的暂存环境中运行。” 他补充说,正因为如此,“生产力时间是最大的成本节省”。“当我们开始 Kubernetes 项目时,我们可能有十几个微服务。如今,在建管道中积极开发的微服务数量是当时的两倍。” Kubernetes 还提高了弹性:“如果一个节点宕机,它会立即重新调度,并且不会对性能造成影响。”

Squarespace 成立于 2003 年,最初只是一个宿舍项目,如今已发展成为一个帮助数百万人轻松创建自己网站的平台。

然而,在幕后,该公司的单体 Java 应用程序却让其开发人员难以不断改进平台。因此,Squarespace 网站可靠性团队的员工工程师 Kevin Lynch 表示,该公司在 2014 年决定“走微服务道路”。“但我们始终将应用程序部署在 [我们自己的数据中心] 的 vCenter VMware 虚拟机中。微服务解决了开发方面的问题,但将问题推给了基础设施团队。我们在 5,000 台虚拟机主机上的基础设施部署过程拖慢了所有人的速度。”

Lynch 说,在尝试了另一个容器编排平台并“以非常痛苦的方式将其破坏”之后,该团队于 2016 年年中开始尝试 Kubernetes,并发现它“回答了我们所有的问题”。在数据中心而不是公有云中部署它是他们面临的最大挑战,而且当时,没有多少其他公司这样做。“我们必须弄清楚如何在我们的基础设施中自行部署它,并且必须将其与我们的其他应用程序集成,”Lynch 说。

与此同时,Squarespace 的网络工程团队正在对其网络堆栈进行现代化改造,从传统的第二层网络切换到第三层主干-叶网络。“它与我们想用 Kubernetes 做的事情完美契合,”Lynch 说。“它使我们的服务器能够直接与架顶式交换机通信。我们将 Calico 用于 Kubernetes 的 CNI 网络,因此我们可以公布所有这些单独的 Kubernetes Pod IP 地址,并让它们与我们仍在虚拟机中配置的其他服务无缝集成。”

几个月后,他们有了一个稳定的集群供内部使用,并开始为生产环境推出 Kubernetes。他们还将 Zipkin 和 CNCF 项目 Prometheusfluentd 添加到他们的云原生堆栈中。“我们切换到了 Kubernetes,一个全新的世界,我们也改造了所有其他工具,”Lynch 说。“它让我们能够简化流程,因此我们现在可以轻松地从模板创建整个微服务项目,生成代码和部署管道,生成 Dockerfile,然后立即将可行的、可部署的项目交付给 Kubernetes。” Lynch 补充说,跨开发/质量保证/阶段/生产环境的部署也“得到了极大的简化”。“现在配置差异很小。”

整个过程只需五分钟,与他们的虚拟机部署相比,时间缩短了近 85%。“从头到尾可能需要半小时,这还没有考虑到基础设施工程师将负责执行此操作,因此其中也会有一些业务延迟。”

Lynch 说,随着部署速度的加快,“生产力时间是最大的成本节省”。“我们有一个团队正在实施新的文件存储服务,他们在没有我们参与的情况下就开始将其与我们的存储后端集成”——这在 Kubernetes 出现之前是不可能实现的。他补充说:“当我们开始 Kubernetes 项目时,我们可能有十几个微服务。如今,在建管道中积极开发的微服务数量是当时的两倍。”

这对应用程序的弹性也产生了积极影响。“当我们部署虚拟机时,我们必须构建工具来确保服务适当地分布在机架上,并且能够承受故障,”他说。“Kubernetes 就能做到这一点。如果一个节点宕机,它会立即重新调度,并且不会对性能造成影响。”

另一个很大的好处是自动扩展。“在我们使用 VMware 的方式下,这实际上是不可能的,”Lynch 说,“但现在我们可以直接通过 Kubernetes 添加适当的自动扩展功能,然后,随着需求的增加,它就会自动扩展。而且它开箱即用。”

对于 Kubernetes 的新手,Lynch 说他最好的建议是“快速失败”:“一旦你计划好了,就执行。Kubernetes 非常适合快速尝试一些东西,看看它是否有效。”

Lynch 和他的团队计划开源他们开发的一些工具,以扩展 Kubernetes 并将其自身用作 API。第一个工具将依赖应用程序作为容器注入到 Pod 中。“当你交付一个应用程序时,通常它会附带一大堆需要随附的依赖应用程序,例如,用于日志记录的 fluentd,”他解释说。使用此工具,开发人员无需担心配置。

展望未来,Squarespace 的所有新服务都将进入 Kubernetes,最终目标是转换所有可以转换的服务。大约四分之一的现有服务已经迁移。“我们的单体应用程序将是最后一个,因为它太庞大、太复杂了,”Lynch 说。“但现在我看到其他服务也被迁移过来了,比如文件存储服务。有人就这么做了,而且很顺利——毫不费力。所以我相信,如果我们去解决它,它可能会比我们担心的要容易得多。也许我应该听从自己的建议,快速失败!”