挑战
瑞士在线市场 ricardo.ch 正面临速度问题,以及开发和运营之间“经典鸿沟”,双方无法很好地协同工作。“他们想合作,但没有共同点,”平台工程主管 Cedric Meury 说。“这是导致我们放慢速度的根本原因之一。” 公司开始将传统的单体应用拆分为微服务,需要在自己的数据中心部署编排工具以支持新的架构,并实现开发和运营的协同。
解决方案
公司采用 Kubernetes 进行集群管理,Prometheus 进行监控,Fluentd 进行日志记录。第一个集群于 2016 年 12 月在本地部署,三个月后第一个服务投入生产。迁移已完成约一半,公司计划在 2018 年底前完全迁移到 Google Cloud Platform。
影响
Meury 表示,将单体应用拆分为微服务“提高了速度,Kubernetes 在支持这一点方面至关重要”。生产部署数量已从每周不到 10 次增加到每天 30-60 次。以前,“当生产中出现问题时,工单或投诉会被抛给运营团队,这是典型的问题。现在,人们有机会先查看运营情况并自行排除故障,因为所有部署都以标准化方式进行,”Meury 说。他看到了日常交互中的影响:“几周前,我看到一位产品经理对一个包含一些变量的 JSON 文件进行了拉取请求,另一个人接受了它。然后几分钟甚至几秒钟后就部署了,这在以前是不可想象的。以前需要一系列事情才能发生,整个单体应用很难理解,即使对于工程师来说也是如此。因此,以前的请求会进入庞大而低效的看板,希望几周或几个月后有人会完成更改。” 以前,基础设施和平台相关的项目需要数月或数年才能完成;现在开发人员和运营人员可以合作,通过 Kubernetes 在几周甚至几天内部署基础设施部件。从长远来看,公司还预计从定制数据中心和虚拟机转向容器化基础设施和云服务将节省 50% 的成本。
“这是这些部门之间的经典鸿沟,甚至到处都有一些愤怒和沮丧,”Meury 说。“他们想合作,但没有共同点。这是导致我们放慢速度的根本原因之一。”
这一差距正在损害瑞士在线市场 ricardo.ch 的速度。该网站在高峰期每天处理多达 260 万次来自网络和移动应用程序的搜索,为其 320 万会员提供实时拍卖服务。技术团队的主要挑战是确保“物品的竞价按正确的顺序到达,并在拍卖结束之前,并且这种方式公平有效,”Meury 说。“我们有实时要求。我们还提供了一个自动竞价系统,它需要准确无误。对于分布式系统,你面临着确保排序正确的挑战。这是我们目前正在处理的事情之一。”
为了解决速度问题,ricardo.ch 首席技术官 Jeremy Seitz 建立了一个新的软件工厂,名为 EPD,由 65 名工程师、7 名产品经理和 2 名设计师组成。“我们把这三个部门聚集在一起,这样他们就可以简化流程,更密切地相互交流,”Meury 说。
公司还开始将遗留的单体应用拆分为 100 多个微服务,并需要编排工具来支持其数据中心中的新架构。“拆分单体应用提高了速度,Kubernetes 在支持这一点方面至关重要,”Meury 说。“Kubernetes 的容器化和编排帮助我们大幅减少了开发和运营之间的冲突,也使我们双方能够用相同的语言交流。”
Meury 组建了一个平台工程团队来选择工具——包括用于日志记录的 Fluentd 和用于监控的 Prometheus,以及 Grafana 可视化——并为第一个 Kubernetes 集群奠定基础,该集群于 2016 年 12 月在本地安装。几周内,新平台就可供团队使用,并提供了培训课程和文档。平台工程团队随后与工程师们一起,帮助他们在新平台上部署应用程序。第一个投入生产的服务是 ricardo.ch 的工作页面。“这是前端开发的一个练习,所以开发人员可以尝试使用新的技术栈,”Meury 说。
Meury 估计一半的应用程序已迁移到 Kubernetes。计划是到 2018 年底将所有内容迁移到 Google Cloud Platform。“我们仍然在自己的数据中心运行一些服务器,但所有容器化工作和将我们的服务描述为 Kubernetes 清单将使我们能够非常轻松地完成这一转变,”Meury 说。
影响是巨大的。从定制数据中心和虚拟机转向容器化基础设施和云服务,预计将为公司节省 50% 的成本。生产部署的数量已从每周不到 10 次增加到每天 30-60 次。以前,“当生产中出现问题时,工单或投诉会被抛给运营团队,这是典型的问题,”Meury 说。“现在,人们有机会先查看运营情况并自行排除故障,因为所有部署都以标准化方式进行。这减少了时间和不确定性。”
Meury 还在日常互动中看到了影响:“几周前,我看到一位产品经理对一个包含一些变量的 JSON 文件进行了拉取请求,另一个人接受了它。然后几分钟甚至几秒钟后就部署了,这在以前是不可想象的。以前需要一系列事情才能发生,整个单体应用很难理解,即使对于工程师来说也是如此。因此,以前的请求会进入庞大而低效的看板,希望几周或几个月后有人会完成更改。”
开发和运营之间的分歧也减少了。“几个月后,我收到人们的请求,他们说,‘嘿,你能帮我安装 Kubernetes 客户端吗?我想看看发生了什么,’”Meury 说。“人们直接查看系统状态,使他们与运营部门之间的距离大大拉近。” 以前,基础设施和平台相关的项目需要数月或数年才能完成;现在开发人员和运营人员可以合作,通过 Kubernetes 在几周甚至几天内部署基础设施部件。
对系统的洞察力也扩展到公司的其他部门。“我发现我们的一位客户支持代表通过查看 Grafana 指标来判断系统是否运行良好,这太棒了,”Meury 说。“Prometheus 直接连接到客户服务。”
ricardo.ch 的云原生之旅可能对运营团队的影响最大。“我们有一个运营团队,他们来自硬件背景,现在他们正在重新学习如何在更虚拟化和云原生的世界中运营,到目前为止取得了巨大成功,”Meury 说。“因此,除了仍然操作现场数据中心防火墙之外,他们还学习用 Go 编写代码或进行一些 Python 脚本编写。以前的网络管理员现在正在编写 Go 代码。这真的很酷。”
对 Meury 来说,这段旅程归结为这一点。“我的一位同事在 KubeCon 上听了所有的演讲,他被我们平台目前所缺乏的所有工具、技术、框架所震撼,”Meury 说。“但与此同时,他也很高兴知道,未来还有很多我们可以探索、改进和努力的事情。我们正在从到处看到问题——比如,‘这个坏了’或‘这个停机了,我们必须修复它’——更多地转向,‘我们如何才能真正改进和更多地自动化,并让开发人员和最终用户体验更好?’”