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

挑战

Squarespace 站点可靠性团队的员工工程师 Kevin Lynch 表示,2014 年从单体架构转向微服务“解决了开发端的一个问题,但将这个问题推给了基础设施团队。”“我们 5000 台虚拟机主机上的基础设施部署过程拖慢了所有人的速度。”

解决方案

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

影响

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

自 2003 年在宿舍里创立以来,Squarespace 让数百万人能够轻松创建自己的网站。

然而,幕后公司的单体 Java 应用程序让其开发者们在持续改进平台方面变得不再那么简单。因此,Squarespace 站点可靠性团队的员工工程师 Kevin Lynch 表示,公司在 2014 年决定“走微服务之路”。“但我们总是在 vCenter VMware 虚拟机 [在我们自己的数据中心] 中部署我们的应用程序。微服务解决了开发端的一个问题,但将这个问题推给了基础设施团队。我们 5000 台虚拟机主机上的基础设施部署过程拖慢了所有人的速度。”

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

与此同时,Squarespace 的网络工程团队正在对其网络堆栈进行现代化改造,从传统的二层网络切换到三层脊叶网络。Lynch 说:“这与我们希望通过 Kubernetes 实现的目标完美契合。”“它使我们能够让服务器直接与机架顶部交换机通信。我们使用 Calico 作为 Kubernetes 的 CNI 网络,因此我们可以公布所有这些独立的 Kubernetes Pod IP 地址,并使其与我们仍在虚拟机中配置的其他服务无缝集成。”

几个月内,他们拥有了一个稳定的内部使用集群,并开始为生产环境推出 Kubernetes。他们还为云原生堆栈添加了 Zipkin 和 CNCF 项目 Prometheusfluentd。Lynch 说:“我们转向了 Kubernetes,一个新世界,我们也改进了我们所有其他的工具。”“它使我们能够简化我们的流程,因此我们现在可以轻松地从模板创建整个微服务项目,生成代码和部署管道,生成 Dockerfile,然后立即将一个可工作、可部署的项目发布到 Kubernetes。”Dev/QA/Stage/Prod 的部署也“大幅简化”,Lynch 补充道。“现在配置差异很小。”

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

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

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

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

对于其他刚开始使用 Kubernetes 的人,Lynch 说他最好的建议是“快速失败”:“一旦你计划好了,就立即执行。Kubernetes 对于快速尝试某事并查看它是否有效非常有帮助。”

Lynch 和他的团队计划开源他们开发的一些工具,以扩展 Kubernetes 并将其用作 API 本身。第一个工具将依赖应用程序作为容器注入到 Pod 中。他解释说:“当你发布一个应用程序时,通常它会附带一堆需要一起发布的依赖应用程序,例如用于日志记录的 fluentd。”有了这个工具,开发者就不需要担心配置了。

未来,Squarespace 的所有新服务都将部署到 Kubernetes 中,最终目标是尽可能地转换所有服务。大约四分之一的现有服务已经迁移。“我们的单体应用程序将是最后一个,因为它太庞大和复杂了,”Lynch 说。“但现在我看到其他服务被迁移过来,比如文件存储服务。有人只是做了,它就成功了——毫不费力。所以我相信,如果我们着手处理,它可能会比我们担心的容易得多。也许我应该采纳我自己的建议,快速失败!”