微服务用户为什么要用云原生网关

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-应用监控,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 下文将为你解说云原生网关如何助你解决一系列痛点,优雅玩转云上微服务架构升级。

作者:百丈


随着云原生技术的发展,微服务的架构选型也是日新月异。在 Kubernetes 重塑运维体系的云时代,我们在安全、降本提效、精细化运营等方面都有了更高的要求和更多的选择。曾经关炙手可热的 Zuul/SpringCloud Gateway/Kong 等在其网关位置上开始显得力不从心。它们欠缺发现容器服务的能力,性能可能不如 Nginx Ingress,可观测、安全等方面都需要二次开发再集成,这些关键短板都阻碍着技术发展。今天来看云原生网关如何助你解决这些痛点,优雅玩转云上微服务架构升级。


微服务(网关)的发展


微服务发展大事记


1.png


随着 Martin Fowler 在 2014 年的文章总结梳理 [1]“微服务”概念开始逐渐深入人心。之后各类开源或商业支持如雨后春笋般涌现,到如今笔者按年份简单整理了每年的大事记,其中两个变化值得大家需要关注:


  1. 微服务从单点支持向平台解决方案发展,例如 SpringCloud 解决方案、 Kubernetes 体系。

  2. 开源和商业产品融合得更加紧密,云原生的发展让技术从业者有了更多的选择。


微服务网关的变化


2.png


笔者按时间整理了几个简单对比:


  1. 2013 ZUUL:Netflix 开源的负载均衡组件,简单易上手,不过早期的 ZUUL 1 性能上限稍低。
  2. 2015 KONG:基于 Nginx 的 API 网关,性能强劲,Lua 国内开发者相对较少。
  3. 2016 SpringCloud Gateway:网关开始作为整个微服务解决方案的门面出现。
  4. 2019 Ambasssador(现在更名 Emissaey-ingress):支持 Kubernetes ingress 标准,且与 Istio 无缝集成。


微服务逐步向平台解决方案发展的同时,对网关的集成能力也有了更高的需求。这也是我们看到了这个趋势,云原生网关应运而生,而且云原生网关不仅集齐了他们的优点,而且功能更丰富、性能更强劲、稳定更可靠。  


Kubernetes 微服务


这里为什么单独提 Kubernetes 微服务?这需要回到没有 Kubernetes 的时候采用微服务架构我们碰到哪些问题?


  1. 拆分了微服务后相应的构建部署工作量开始翻倍,运维压力急剧提升;
  2. 随着业务迭代,微服务之间调用链路变的复杂,强弱依赖不清晰,故障/瓶颈排查困难;
  3. 不同业务团队使用异构的服务框架或技术栈,相互依赖集成成本增加。


通过合理的拆分服务可以降低协作成本及控制变更风险,这是微服务思想带来的价值,然而随之而来的也有巨大的治理难度和运维压力。


不过 Kubernetes 以其完整的网络、服务、负载均衡的标准定义似乎解决了我们不少问题。


统一的服务定义及服务发现机制


得益于 Kubernetes 的网络模型和 Pod 标准,Kubernetes Service 可以将运行在一组 Pods [2]上的应用程序抽象为网络服务(Kubernetes 微服务),你无需修改应用程序即可使用不熟悉的服务发现机制。Kubernetes 为 Pods 提供自己的 IP 地址,并为一组 Pod 提供相同的 DNS 名, 并且可以在它们之间进行负载均衡。


userspace 代理模式:image.gif


3.png


iptables 代理模式:


4.png

image.gif

IPVS 代理模式:
image.gif

5.png


负载均衡 Ingress 标准


Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由。流量路由由 Ingress 资源上定义的规则控制。


6.png


有了容器及 Kubernetes 的运维调度能力及标准服务、负载均衡基础,微服务架构可以往更高的层次发展,满足更多技术场景。


技术趋势及痛点


云原生时代的高要求和可选择


Kubernetes 是好,同时其庞大的体系和众多的概念标准也给技术从业者带来了学习成本,DevOps 似乎比之前多了不少的工作量,好在云原生时代,商业化产品满足高要求的同时给了我们更多的选择。


7.png


上图展示了在代码中通常包括三部分:业务代码、三方软件、处理非功能特性的代码。其中“业务代码”指实现业务逻辑的代码;“三方软件”是业务代码中依赖的所有三方库,包括业务库和基础库;“处理非功能性的代码”指实现高可用、安全、可观测性等非功能性能力的代码。

从技术的角度,云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、 可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。


精细化运营的需求

微服务架构的一路发展过来,从简单的拆分服务到服务发现机制,再到支持 Sidecar 代理治理流量,最终的形态是什么样的?或者我们技术需求是怎么样?


简单的拆分


8.png


服务发现机制


image.gif9.png


Sidecar代理流量


image.gif10.png


云原生架构成熟度模型 & API 安全质量报告


在云原生时代,云原生微服务体系将充分利用云资源的高可用和安全体系,让应用获得更有保障的弹性、 可用性与安全性。 应用构建在云所提供的基础设施与基础服务之上,充分利用云服务所带来的便捷性、稳定性, 降低应用架构的复杂度。 云原生的微服务体系也将帮助应用架构全面升级,让应用天然具有更好的可观测性、 可控制性、可容错性等特性。


我们可能需要类似上述一个模型描述架构在服务化能力、弹性能力、可观测性及自动化能力等维度的成熟度,虽然这样比较全面,似乎不太适合总结沟通。如果用简单概念来描述,笔者总结几个阶段层次:


  1. 极致弹性应对突发流量,弹性能力是重要的手段,是否极致对应着故障的恢复速度,弹性能力有时候还依赖于服务化程度。
  2. 可观测体验:能够应对突发流量后开始关注性能优化及故障处理,体系化的可观测体验及指标数据对我们的治理工作至关重要。
  3. 故障无感自愈:能够 360 度发现问题就能总结规律制定常用的预案及检查机制,常规故障即可自动化恢复。


最重要的结果衡量还有我们用户的体验,比较好代表用户的应该就是 API 安全质量报告,如果 API 的可用率提升了,如果 API 的响应 RT 减少了,这显然说明架构升级/治理给我们带来了巨大的价值,满足精细化运营的需求。


架构升级的痛点

架构升级(治理)能带来的价值有目共睹,甚至我们也有了相关架构持续演进的闭环方法论。


11.png


网关作为技术架构的门面,在架构整体成熟度的度量及可持续演进集成兼容等方面至关重要,以网关作为架构治理升级的切入口是个不错选择,但是,有些痛点还是实实在在的摆在我们面前:


  1. 怎么发现当前微服务架构的问题?
  2. Kubernetes Ingress 后面再部署微服务网关影响性能吗?
  3. 用户登录鉴权逻辑能否集中处理/升级?
  4. 多个 Kubernetes 集群是否可以共用一个网关?
  5. 同时使用 SpringCloud 和 Kubernetes svc 怎么灰度?


此处只是稍作举例,实际的痛点大家深有体会,开源产品往往和我们的业务需求不是那么匹配,接下来看云原生网关是如何解决这些问题的。


云原生网关的优势


云原生网关=流量网关+微服务网关+?

云原生网关从开始就一直在强调,将流量网关(Kubernetes Ingress、Nginx)和微服务网关(Spring Cloud Gateway、Zuul 网关等)二合一,降低 50%资源成本,同时缩短了请求时间,降低运维复杂度。


12.png


仅仅只是二合一显然不够满足我们的期望,看看它还有什么:


  1. 开箱即用, 默认支持全局看板、实例监控、日志检索、业务 TOP 榜、日志投递、链路追踪及报警管理等体系化可观测能力,让你轻松了解微服务及 API 质量情况。
  2. 卓越的性能,详见下文性能更强劲。
  3. 支持 Ingress 标准,Kubernetes 体系首选网关产品。
  4. 多种服务发现,支持 ACK 容器服务、Nacos 等多种服务发现方式,可以同时接入多个 Kubernetes 集群。
  5. 基于 envoy+istio 实现,完美兼容服务网格,技术大势所趋。


功能更丰富


13.png


除了体系化的可观测能力,还有完整的安全防护能力、丰富的服务/流量治理能力、生产大规模实践的高可用经验以及精细化的 API 管理和扩展支持。  


性能更强劲


14.png

image.gif

压测结果:


  • 云原生网关的 TPS 基本是 SpringCloud Gateway 的 2 倍,是Zuul 1 的 5 倍。
  • 云原生网关的 TPS 相比 Nginx Ingress 高出约 90%。

 

稳定更可靠


15.png


  • 自内部 2020.5 上线,云原生网关已在支付宝、钉钉、淘宝、天猫、优酷、飞猪、口碑等阿里各业务系统中使用,两年以来可用率 100%,无任何故障
  • 历经 2020、2021 双 11 海量请求的考验,大促日可轻松承载每秒承载数 10 万笔请求,日请求量达到百亿级别。


重磅功能层出不穷


16.png


相关链接


1. Martin Fowler 在 2014 年的文章总结梳理

https://martinfowler.com/articles/microservices.html 


2.Pods

https://kubernetes.io/docs/concepts/workloads/pods/


新春福利,嗨购 2022,现在购买 MSE 云原生网关预付费全规格立享 7 折优惠。


也可钉钉搜索群号 34754806 可加入用户群交流、答疑。


17.png


点击文末此处,了解更多详情~

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
25天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
5天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
23天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
25天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
2天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
1天前
|
Cloud Native API 微服务
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 11 月产品动态。
|
23天前
|
负载均衡 监控 API
dotnet微服务之API网关Ocelot
Ocelot 是一个基于 .NET 的 API 网关,适用于微服务架构。本文介绍了如何创建一个 Web API 项目并使用 Ocelot 进行 API 请求路由、负载均衡等。通过配置 `ocelot.json` 和修改 `Program.cs`,实现对 `GoodApi` 和 `OrderApi` 两个项目的路由管理。最终,通过访问 `https://localhost:7122/good/Hello` 和 `https://localhost:7122/order/Hello` 验证配置成功。
29 1
dotnet微服务之API网关Ocelot
|
12天前
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
22天前
|
Cloud Native API 微服务
微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 10 月产品动态。
|
23天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
43 5