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

挑战

作为一家瑞士在线市场,ricardo.ch 在速度方面遇到了一些问题,而且开发和运维之间存在“经典的隔阂”,双方无法很好地协作。“他们想协作,但没有共同的基础,”平台工程主管塞德里克·莫里说。“这是导致我们速度变慢的根本原因之一。”该公司开始将传统的单体应用程序分解为微服务,并且需要编排来支持其自身数据中心中的新架构,以及将开发和运维整合在一起。

解决方案

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

影响

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

2016 年,塞德里克·莫里加入 ricardo.ch 时,他发现运维和开发之间存在明显的鸿沟。实际上,它们之间存在着实实在在的距离:工程团队在法国工作,而组织的其他成员则在瑞士。

“这两个部门之间存在着典型的隔阂,甚至还有一些怒气和沮丧,”莫里说。“他们想一起工作,但没有共同的基础。这是导致我们速度变慢的根本原因之一。”

这种隔阂损害了瑞士在线市场 ricardo.ch 的速度。该网站在高峰日从网页和移动应用程序中处理多达 260 万次搜索,为 320 万会员提供实时拍卖服务。技术团队的主要挑战是确保“商品的竞拍以正确的顺序进行,并在拍卖结束之前,并且以公平的方式进行,”莫里说。“我们有实时需求。我们还提供自动竞拍系统,它需要准确无误。在分布式系统中,你面临的挑战是确保排序正确。这也是我们目前正在处理的问题之一。”

为了解决速度问题,ricardo.ch 的首席技术官杰里米·赛茨创建了一个名为 EPD 的新软件工厂,该工厂拥有 65 名工程师、7 位产品经理和 2 位设计师。“我们将这三个部门整合在一起,以便他们可以简化流程,彼此之间进行更密切的沟通,”莫里说。

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

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

莫里估计,一半的应用程序已经迁移到 Kubernetes。计划到 2018 年底将所有东西迁移到 Google Cloud Platform。“我们仍然在自己的数据中心运行一些服务器,但是所有容器化工作以及将我们的服务描述为 Kubernetes 清单将使我们能够非常轻松地完成此迁移,”莫里说。

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

莫里还看到了日常互动中的影响:“几周前,我看到一位产品经理正在进行一个 JSON 文件的拉取请求,该文件包含一些变量,另一个人接受了它。它甚至在几分钟或几秒钟后就部署了,这是以前无法想象的。以前需要经历一系列步骤,整个单体应用程序很难理解,即使对于工程师也是如此。因此,以前请求会被放到大型的、低效的看板上,希望有人能在几周或几个月后完成更改。”

开发和运维之间的鸿沟也缩小了。“几个月后,我收到了人们的请求,说‘嘿,你能帮我安装 Kubernetes 客户端吗?我实际上想看看发生了什么,”莫里说。“人们直接查看系统状态,这让他们与运维部门的距离近了很多。”以前,基础设施和平台相关项目需要几个月甚至几年的时间才能完成;现在,开发人员和运维人员可以通过 Kubernetes 在几周甚至几天内协同部署基础设施部分。

能够洞察系统的能力也扩展到了公司的其他部门。“我发现我们的一位客户支持代表会查看 Grafana 指标,以了解系统是否正常运行,这太棒了,”莫里说。“Prometheus 直接连接到客户服务。”

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

对于莫里来说,这段旅程归结为以下几点。“我的一个同事在 KubeCon 上听了所有演讲,他对目前我们平台上缺少的所有工具、技术、框架感到不知所措,”莫里说。“但同时,他也很高兴知道,未来还有很多可以探索、改进和努力的方向。我们正在从到处看到问题,比如‘这坏了’或者‘这宕机了,我们必须修复它’,转变为‘我们如何才能真正改进和自动化,使它对开发人员,最终对最终用户更友好?’"