公司 ricardo.ch 地点 瑞士苏黎世 行业 电子商务

挑战

瑞士在线市场 ricardo.ch 在速度方面遇到了问题,并且开发和运营之间存在“经典差距”,双方无法良好合作。平台工程主管 Cedric Meury 表示:“他们想合作,但他们没有共同点。这是拖慢我们速度的根本原因之一。”该公司开始将传统的单体应用分解为微服务,并且需要编排来支持其自身数据中心中的新架构,并将开发和运营结合在一起。

解决方案

该公司采用 Kubernetes 进行集群管理,采用 Prometheus 进行监控,并采用 Fluentd 进行日志记录。第一个集群于 2016 年 12 月在本地部署,第一个服务在三个月后投入生产。迁移工作已完成大约一半,该公司计划在 2018 年底之前完全迁移到 Google Cloud Platform

影响

Meury 表示,将单体应用拆分为微服务“提高了速度,而 Kubernetes 对此至关重要”。生产部署的数量已从每周不到 10 次增加到每天 30-60 次。Meury 说,以前,“当生产中出现问题时,会将故障单或投诉抛给运营部门,这是个典型问题。现在,人们有机会先自行查看运营情况并进行故障排除,因为一切都以标准化的方式部署”。他看到了日常互动中的影响:“几周前,我看到一位产品经理为包含一些变量的 JSON 文件提交了一个拉取请求,另一个人接受了它。它甚至在几分钟或几秒钟后就部署了,这在以前是不可想象的。过去需要做很多事情,整个单体应用很难理解,即使对工程师来说也是如此。因此,以前请求会进入大型、低效的看板,希望有人会在几周或几个月后完成更改。”以前,与基础设施和平台相关的项目需要数月或数年才能完成;现在,开发人员和运营人员可以协同工作,在几周甚至几天内通过 Kubernetes 部署基础设施部分。从长远来看,该公司还希望通过从定制数据中心和虚拟机转向容器化基础设施和云服务来节省 50% 的成本。

Cedric Meury 于 2016 年加入 ricardo.ch 时,他发现运营和开发之间存在明显的分歧。事实上,他们之间存在着字面上的距离:工程团队在法国工作,而组织的其他成员则在瑞士。

Meury 说:“这些部门之间存在着典型的差距,甚至还有一些愤怒和沮丧。他们想一起工作,但他们没有共同点。这是拖慢我们速度的根本原因之一。”

这种差距损害了瑞士在线市场 ricardo.ch 的速度。该网站在高峰日处理来自网络和移动应用程序的多达 260 万次搜索,通过其实时拍卖为 320 万会员提供服务。Meury 说,技术团队的主要挑战是确保“商品的出价顺序正确,并且在拍卖结束之前完成,并且以公平的方式进行。我们有实时需求。我们还提供了一个自动出价系统,它需要准确无误。在分布式系统中,您面临的挑战是确保排序正确。这是我们目前正在处理的事情之一。”

为了解决速度问题,ricardo.ch 首席技术官 Jeremy Seitz 建立了一个名为 EPD 的新软件工厂,该工厂由 65 名工程师、7 名产品经理和 2 名设计师组成。Meury 说:“我们把这三个部门聚集在一起,这样他们就可以简化流程,更密切地相互交流。”

该公司还开始将传统的单体应用分解为 100 多个微服务,并且需要编排来支持其自身数据中心中的新架构。Meury 说:“将单体应用拆分提高了速度,而 Kubernetes 对此至关重要。Kubernetes 的容器化和编排帮助我们大大减少了开发和运营之间的冲突,也让我们能够在双方使用相同的语言。”

Meury 组建了一个平台工程团队来选择工具(包括用于日志记录的 Fluentd 和用于监控的 Prometheus,以及 Grafana 可视化),并为第一个 Kubernetes 集群奠定了基础,该集群于 2016 年 12 月在本地安装。几周内,新平台就可供团队使用,并为他们提供了培训课程和文档。然后,平台工程团队与工程师合作,帮助他们在新平台上部署他们的应用程序。第一个投入生产的服务是 ricardo.ch 工作页面。Meury 说:“这是一个前端开发练习,因此开发人员可以使用新的堆栈进行实验。”

Meury 估计有一半的应用程序已迁移到 Kubernetes。计划是在 2018 年底之前将所有内容迁移到 Google Cloud Platform。Meury 说:“我们仍在自己的数据中心运行一些服务器,但所有容器化工作以及将我们的服务描述为 Kubernetes 清单将使我们能够非常轻松地进行这种转变。”

影响是巨大的。预计从定制数据中心和虚拟机转向容器化基础设施和云服务将为公司节省 50% 的成本。生产部署的数量已从每周不到 10 次增加到每天 30-60 次。Meury 说,以前,“当生产中出现问题时,会将故障单或投诉抛给运营部门,这是个典型问题。现在,人们有机会先自行查看运营情况并进行故障排除,因为一切都以标准化的方式部署。这减少了时间和不确定性。”

Meury 还看到了日常互动中的影响:“几周前,我看到一位产品经理为包含一些变量的 JSON 文件提交了一个拉取请求,另一个人接受了它。它甚至在几分钟或几秒钟后就部署了,这在以前是不可想象的。过去需要做很多事情,整个单体应用很难理解,即使对工程师来说也是如此。因此,以前请求会进入大型、低效的看板,希望有人会在几周或几个月后完成更改。”

开发和运营之间的隔阂也减少了。Meury 说:“几个月后,我收到了人们的请求,‘嘿,你能帮我安装 Kubernetes 客户端吗?我想看看发生了什么。’人们直接查看系统的状态,这让他们更接近运营。”以前,与基础设施和平台相关的项目需要数月或数年才能完成;现在,开发人员和运营人员可以协同工作,在几周甚至几天内通过 Kubernetes 部署基础设施部分。

洞察系统的能力也扩展到了公司的其他部门。Meury 说:“我发现我们的一位客户支持代表会查看 Grafana 指标,以了解系统是否运行良好,这太棒了。Prometheus 直接与客户服务相关联。”

ricardo.ch 的云原生之旅可能对运维团队的影响最大。Meury 说:“我们有一个来自硬件背景的运维团队,现在他们正在重新学习如何在更加虚拟化和云原生的环境中进行运维,并且迄今为止取得了巨大的成功。因此,除了仍在运营现场数据中心防火墙之外,他们还学习用 Go 语言编码或同时编写一些 Python 脚本。以前的网络管理员正在编写 Go 代码。这真的很酷。”

对 Meury 来说,这段旅程可以归结为以下几点。“我的一位同事听了 KubeCon 上的所有演讲,他被我们平台目前缺乏的所有工具、技术和框架所震撼,”Meury 说。“但与此同时,他很高兴地知道,未来还有很多东西我们可以探索、改进和努力。我们正在从到处看到问题——比如‘这个坏了’或‘这个坏了,我们必须修复它’——转变为‘我们如何才能真正地改进和自动化更多,让开发者和最终用户更方便?’”