上了 istio 的贼船之 API Gateway

简介: 通过将传统微服务架构的这些控制面功能解耦到 istio,可以让微服务应用本身专注于业务开发,是一个比较简的单体 springboot 应用。再结合 k8s 的高扩展性,研发整体的迭代速度和运维效率还是比较高的,缺点是无论是 k8s 还是 istio ,学习成本偏高,需要团队至少 2 人具有专业知识,对于招聘成本、系统升级都有风险。

现状


下图是我们系统的架构现状,大致介绍一下:


  • 基础设施在华为云上
  • 基本上是基于 istio on k8s 架构。
  • istio 版本为 1.3,所以组件较多(galley、pilot、citadel、telemetry......)
  • 微服务后端用 spring boot 单体,前端有 nodejs、vue
  • 应用的链路监控主要基于 skywalking, istio 的通讯层面利用 kiali可视化调用链
  • 其他比较传统


1.jpg


历史架构


主要介绍下作为服务通讯基础设施的 istio 在这里的作用


  1. 服务间通讯,依赖 envoy sidecar
  2. 注册中心,依赖 istio 控制面
  3. 服务治理(熔断、超时、重试)这部分还没有完完全全切干净,还有些 spring boot 应用依赖 hystrix,后面会全部改成利用 istio
  4. 流量管理(ingress gatewayegress gateway、负载均衡)
  5. 测试(错误注入)


通过将传统微服务架构的这些控制面功能解耦到 istio,可以让微服务应用本身专注于业务开发,是一个比较简的单体 springboot 应用。再结合 k8s 的高扩展性,研发整体的迭代速度和运维效率还是比较高的,缺点是无论是 k8s 还是 istio ,学习成本偏高,需要团队至少 2 人具有专业知识,对于招聘成本、系统升级都有风险。


上了贼船


坦白讲,如果系统最初的设计是我来做,是不会用如此“激进”的方案的,会转而用 spring cloud 为基础的架构,当然,k8s 是非常可能会使用的。但可惜我是中间接手,也想过换架构,但迫于公司业务和迭代的压力,再加上人手有限,再换架构的风险会非常高,所以既然上了 istio 的贼船,就只能走下去了,等什么时候时机成熟再并行其他架构,或切换回合适的架构。这里我要强调的是,做架构选择或者选型不是为了技术而技术,一定是要非常适合当时公司的发展现状、业务场景、团队能力、招聘成本等等,综合多种条件而得出的结论。 巧合的是 istio 的 logo 也是一个帆船的样子,果真

是上了贼船


API Gateway


终于说到本文的重点 API Gateway 了,对于这个话题,之前写过一篇文章,读者可以先脱离现在的架构从功能层面来了解下 API Gateway



回到我们现在的架构,你会发现,虽然我们有前置的 openResty,但应用层这边并没有一个担当 API Gateway 角色的服务。而无论是 openResty 或者是 nginx 对于云原生 API Gateway 的需求是不能完全满足的。


当然了解 istio 的读者可能会问:


  • istio ingress gateway 不也具有网关的功能吗 ?
  • 为什么没有用 nginx ingress controller


首先,我承认基于 k8s ingress 实现的各种 ingress controller 功能越来越完善,如果我们没有用 istio 可能会采用这种方案,但我们使用了,那么再结合 k8s ingress 就会有如如何为服务网格选择入口网关[1]中说的如下问题:


  • K8s Ingress 是独立在 Istio 体系之外的,需要单独采用 Ingress rule 进行配置,导致系统入口和内部存在两套互相独立的路由规则配置,运维和管理较为复杂。
  • K8s Ingress rule 的功能较弱,不能在入口处实现和网格内部类似的路由规则,也不具备网格 sidecar 的其它能力,导致难以从整体上为应用系统实现灰度发布、分布式跟踪等服务管控功能。


其次,没错 istio ingress gateway 除了基础的通讯功能之外,还有一些其他的应用层功能。但我们综合来比较下 k8s ingressistio ingress gateway 和我们理想中的 API Gateway,就会发现它还不够完善,主要是对于 API 管理的这部分功能欠缺。


2.jpg


未来


前文已经对各种 API Gateway的实现方案进行了讨论,结论是在目前难以找到一个同时具备API GatewayIsito Ingress能力的网关。那么再回顾一下我们的需求:


  • 我们使用 istio
  • 我们需要 API Gateway


所以,经过思考,我们未来的方案设计如下图:


3.jpg


  • 仍然利用 istio ingress gateway作为入口
  • istio ingress gateway接到 LB
  • API Gateway纳入到istio cluster管理的范畴当中,即拥有sidecar proxy,可被istio控制面控制。API Gateway的选型很有可能使用云原生应用网关,如 API SIX
  • 应用层微服务不会利用如 spring cloud gateway 编码一个服务网关


总结:使用API GatewaySidecar Proxy一起为服务网格提供外部流量入口。


还有没有问题?


有的,根据 Service Mesh 和 API Gateway关系深度探讨[2]上述方案的优势在于API GatewaySidecar独立部署,职责明确,架构清晰。但是,和Service Mesh使用sidecar被质疑多一跳会造成性能开销影响效率一样,API Gateway使用Sidecar也被同样的质疑:多了一跳……

对了多了这一跳,从整个架构每一段的网络耗时及其作用来看,这一跳多出的时间,几乎可以忽略不计。


性能如何?


作为 sidecarenvoy的性能应该是毋庸置疑了。至于istio ingress gateway虽然官方给出的数据也不错,但还是要在实践中观察。而作为 Cloud Native API Gateway  比如 API SIX 我对它有足够的信心,至少在我司现阶段业务体量以及未来百倍增长规模下都不会担心性能问题。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
缓存 监控 前端开发
每日一博 - 闲聊 API GateWay
每日一博 - 闲聊 API GateWay
50 0
|
7月前
|
Kubernetes 应用服务中间件 API
5 分钟了解 Kubernetes Ingress 和 Gateway API
5 分钟了解 Kubernetes Ingress 和 Gateway API
211 0
|
3天前
|
Java API 开发者
Java一分钟之-Spring Cloud Gateway:API网关
【6月更文挑战第10天】Spring Cloud Gateway是Spring Cloud生态中的API网关组件,基于Spring Framework 5、Reactor和Spring Boot 2.0,支持响应式编程。它提供路由转发、过滤器链(包括预处理、路由和后处理)和断言功能。快速入门涉及添加相关依赖和配置路由规则。常见问题包括路由冲突、过滤器顺序和性能瓶颈。通过动态路由和过滤器示例,展示了其灵活性。Spring Cloud Gateway是微服务架构的有力工具,可提升系统稳定性和开发效率。
110 0
|
21天前
|
监控 Cloud Native 安全
【阿里云云原生专栏】云原生下的API管理:阿里云API Gateway的应用场景与优势
【5月更文挑战第23天】阿里云API Gateway是高性能的API托管服务,适用于微服务API聚合、安全管理及流量控制。它提供统一入口、多种认证方式和流量控制策略,确保服务稳定性。具备高度可扩展性、丰富插件生态和简化API生命周期管理等特点。通过简单步骤,如创建API、配置后端服务、设置认证和发布,即可快速上手。作为云原生时代的API管理解决方案,阿里云API Gateway助力企业高效、安全地管理API,推动业务创新和数字化转型。
38 1
|
22天前
|
设计模式 缓存 Java
【设计模式】JAVA Design Patterns——API Gateway(API网关模式)
【设计模式】JAVA Design Patterns——API Gateway(API网关模式)
|
29天前
|
API
Higress的Annotation对Gateway API也是支持的。
【2月更文挑战第10天】Higress的Annotation对Gateway API也是支持的。
45 5
|
29天前
|
API 网络架构
Amazon API Gateway CORS 实战
Amazon API Gateway CORS 实战
24 0
|
11月前
|
Kubernetes JavaScript API
如何理解 Istio Ingress, 它与 API Gateway 有什么区别?东西流量?南北流量?
这三者都和流量治理密切相关,那么流量治理在过去和现在有什么区别呢?都是如何做的呢? 在学习istio的时候对流量管理加深了理解。什么是东西流量?什么是南北流量?
201 0
|
10月前
|
监控 Java API
基于Spring-Cloud-Gateway开发API网关的思路
基于Spring-Cloud-Gateway开发API网关的思路
|
8天前
|
监控 供应链 搜索推荐
数据驱动电商:深度利用淘宝API接口掌握商品详情
本文探讨了如何利用淘宝API接口获取商品详情数据以助力电商决策。通过API,商家能获取商品标题、价格、库存等信息,从而进行市场分析、库存优化、定价策略制定及个性化推荐。步骤包括注册获取API权限、理解文档、构建数据收集流程、处理分析数据以及应用结果。示例代码展示了如何用Python调用API获取商品详情。善用API和数据驱动策略可在电商市场中取得优势。请注意遵循淘宝的API使用规范。