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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

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也进行了修正。

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

20170413113546476.jpg

图片来源: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(转载)

目录
相关文章
|
4天前
|
设计模式 Java API
Java 可扩展 API 设计:打造灵活的应用架构
【4月更文挑战第27天】设计可扩展的 API 是构建灵活、易于维护的应用程序架构的关键。Java 提供了丰富的工具和技术来实现这一目标,使开发者能够构建具有高度可扩展性的应用程序。
44 4
|
4天前
|
SpringCloudAlibaba 负载均衡 Java
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
14 0
|
4天前
|
人工智能 API
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态。
|
4天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 04 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
4天前
|
缓存 负载均衡 API
微服务架构下的API网关性能优化实践
【5月更文挑战第10天】在微服务架构中,API网关作为前端和后端服务之间的关键枢纽,其性能直接影响到整个系统的响应速度和稳定性。本文将探讨在高并发场景下,如何通过缓存策略、负载均衡、异步处理等技术手段对API网关进行性能优化,以确保用户体验和服务的可靠性。
|
4天前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。
|
4天前
|
缓存 安全 API
构建高效可扩展的RESTful API:后端架构的艺术
【4月更文挑战第25天】 在数字化时代的浪潮中,一个稳定、高效且易于扩展的后端系统是企业成功的关键。本文将探讨如何构建一个满足现代业务需求的RESTful API。我们将深入分析关键设计原则,如模块化、服务分层、缓存策略以及数据库优化,并讨论这些原则如何融入实际开发流程中。通过具体案例和最佳实践,我们的目标是为读者提供一套实用的工具和方法,以支持他们自己的后端开发工作。
|
1天前
|
运维 监控 Docker
使用Docker进行微服务架构的部署
【5月更文挑战第18天】本文探讨了如何使用Docker进行微服务架构部署,介绍了Docker的基本概念,如容器化平台和核心组件,以及它与微服务的关系。通过Docker,每个微服务可独立运行在容器中,便于构建、测试和部署。文章详细阐述了使用Docker部署微服务的步骤,包括定义服务、编写Dockerfile、构建镜像、运行容器、配置服务通信、监控和日志管理以及扩展和更新。Docker为微服务提供了可移植、可扩展的解决方案,是现代微服务架构的理想选择。
|
1天前
|
敏捷开发 监控 API
构建高效微服务架构:从理论到实践
【5月更文挑战第18天】 在当今快速发展的软件开发领域,微服务架构已经成为一种流行的设计模式,它通过将大型应用程序分解为一系列小型、独立的服务来提高系统的可伸缩性、弹性和维护性。本文旨在探讨如何从理论走向实践,构建一个高效的微服务架构。文章首先介绍微服务的基本概念和优势,然后详细讨论了在设计和部署微服务时需要考虑的关键因素,包括服务划分、通信机制、数据一致性、容错处理和监控策略。最后,结合具体案例分析,展示如何在现实世界中应用这些原则,确保微服务架构的高效运行。
|
1天前
|
存储 弹性计算 运维
探索微服务架构下的服务治理
【5月更文挑战第18天】 在当今软件工程领域,微服务架构因其灵活性、可扩展性以及促进团队协作等优势而受到广泛青睐。然而,随着系统规模的增长和服务数量的膨胀,服务治理成为确保系统稳定性和高效性的关键因素。本文将深入探讨微服务环境下的服务治理实践,包括服务发现、配置管理、负载均衡、故障处理等关键方面,旨在为开发者提供一套行之有效的服务治理策略。
http://www.vxiaotou.com