HelloFresh迁移至新的API网关,实现微服务架构

简介:

HelloFresh最近以零停机的方式将应用迁移到了一个新的API网关,其技术总监ítalo Lelis de Vietro在一篇文章中分享了他们所面临的挑战以及迁移的过程。

在这次迁移之前,HelloFresh已有的API是单体架构的。为了迁移至微服务架构并让微服务的创建更加简单,同时还要与他们的基础设施进行集成,他们构建了一个新的API网关,这个网关会涵盖已有的和新的服务。他们的基础设施已经有了一些组件,包括服务发现、基于Ansible的自动化以及广泛存在的日志和监控,这些组件都会让微服务更加易于实现。为了解决零停机以及向后兼容的难题,团队编写了一个代理脚本将旧服务转换为新的模式。迁移过程的第一次尝试失败了,然而第二次尝试按照预期得到了成功。

HelloFresh已有的基础设施使用Consul来实现服务发现,并使用HAProxy实现客户端的负载均衡。这两个因素促使他们转向了微服务。团队还有一个约定,那就是所有的新服务必须要从Ansible自动化开始着手。这种自动化几乎涵盖了整个技术栈,包括网络、DNS、CI以及机器的供应。在分布式系统多个服务存在交互的场景下,可见性(Visibility)是至关重要的,HelloFresh存在着广泛的日志和监控功能。Statsd和Grafana用于实现监控和仪表盘, ELK则被用来详细分析服务的行为,它们组成了这方面的技术栈。

除了新的网关,新的认证服务也已经进行了规划,它将会代替旧API中的认证模块。这需要旧应用进行重构。

团队预迁移的挑战在于要向后兼容移动应用,确保所有的服务通过新的网关调用,所有的调用能够安全传输,已有的API规则在新的API网关中能够继续得到遵循。不能对用户强制要求移动应用的更新,因此API要保持向后的兼容性。正在使用的API同时包含公开的和私有的端点,所有的这些端点必须要使用新的网关进行注册。微服务和网关之间的服务调用传输必须是安全的。API按照 OpenAPI格式进行文档化,这是用于描述REST API的一个标准。这样的话,团队就能够使用Go来编写导入脚本,它会在旧API和新API间进行转换,并保持像配额(quotas)、CORS设置以及限速这样的规则。

迁移的第一次尝试包括将旧的API替换为新的,首先在staging环境,然后是在生产环境,每一步都有相关的测试用例。这次尝试最终失败了,因为认证数据库由于大量的请求出现负荷超载了。团队低估了负载,数据库开始拒绝连接。另外,在导入脚本方面有一些CORS错误配置。监控系统能够捕获到问题,迁移过程被回滚了。

第二次部署尝试基于第一次所学习到的经验教训。团队规划了一个蓝绿(blue-green)部署,预先准备了一个使用新网关的生产环境副本。这种设置使得新旧环境的切换变得更加容易,所需要的是配置的变更。机器的容量进行了重新的规划,这基于正在运行的应用的指标以及第一次部署的负载指标所确定的。他们使用了一个开源的负载测试工具Gatling来运行性能测试。认证服务中一些已知的issue也进行了修正。

迁移之后,基础设施如下图所示:

图片来源:http://highscalability.com/blog/2017/2/20/scaling-hellofresh-api-gateway.html

API网关是HelloFresh基础设施的前沿。团队为什么要构建自己的网关,而不是采用已有的解决方案呢?de Vietro在评论区是这样回应的:

我们曾经尝试Amazon API网关和Tyk,但是我们有自己的认证提供商(provider),将它与AWS网关集成的效果并不理想。我们必须要处理lambdas(AWS的云服务——译注)来添加自定义的认证提供商。将相关指标数据集成到grafana也会更加复杂一些,另外一点就是我们会锁定到相同的供应商上面。Tyk并没有在自定义认证提供商方面给出什么方案(至少当时如此),我们必须要使用他们的内置策略、用户管理以及ACL,这并不是我们想要的结果。我觉得现在的产品已经有了很大的不同,但这就是当时的原因所在。另外,借助我们自己的网关,可以版本化git上的路由配置文件,为其保留变更日志对我们来说至关重要。



   


 


  

本文转自d1net(转载)

目录
相关文章
|
10月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
3609 0
|
人工智能 负载均衡 API
长连接网关技术专题(十二):大模型时代多模型AI网关的架构设计与实现
随着 AI 技术快速发展,业务对 AI 能力的渴求日益增长。当 AI 服务面对处理大规模请求和高并发流量时,AI 网关从中扮演着至关重要的角色。AI 服务通常涉及大量的计算任务和设备资源占用,此时需要一个 AI 网关负责协调这些请求来确保系统的稳定性与高效性。因此,与传统微服务架构类似,我们将相关 API 管理的功能(如流量控制、用户鉴权、配额计费、负载均衡、API 路由等)集中放置在 AI 网关层,可以降低系统整体复杂度并提升可维护性。 本文要分享的是B站在大模型时代基于多模型AI的网关架构设计和实践总结,希望能带给你启发。
1368 4
|
人工智能 算法 网络安全
基于PAI+专属网关+私网连接:构建全链路Deepseek云上私有化部署与模型调用架构
本文介绍了阿里云通过PAI+专属网关+私网连接方案,帮助企业实现DeepSeek-R1模型的私有化部署。方案解决了算力成本高、资源紧张、部署复杂和数据安全等问题,支持全链路零公网暴露及全球低延迟算力网络,最终实现技术可控、成本优化与安全可靠的AI部署路径,满足企业全球化业务需求。
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
451 8
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
241 2
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
287 3
|
人工智能 运维 Cloud Native
上新丨统一多层网关架构系列视频课程
《统一多层网关架构系列视频教程》将于 11 月初上线。通过该课程,您将体系化了解应用网关的发展趋势和最佳实践。课程配套资料或服务包括 PPT(PDF 版)、演示 Demo、视频回放和群内答疑等。
489 94
|
缓存 监控 API
探索微服务架构中的API网关模式
【10月更文挑战第5天】随着微服务架构的兴起,企业纷纷采用这一模式构建复杂应用。在这种架构下,应用被拆分成若干小型、独立的服务,每个服务围绕特定业务功能构建并通过HTTP协议协作。随着服务数量增加,统一管理这些服务间的交互变得至关重要。API网关作为微服务架构的关键组件,承担起路由请求、聚合数据、处理认证与授权等功能。本文通过一个在线零售平台的具体案例,探讨API网关的优势及其实现细节,展示其在简化客户端集成、提升安全性和性能方面的关键作用。
312 2