SpringCloud微服务实战(十一)-微服务网关及其实现原理(Zuul为例讲解)(上)

简介: SpringCloud微服务实战(十一)-微服务网关及其实现原理(Zuul为例讲解)(上)

1 简介

1.1 网关服务的意义

1.1.1 点对点

  • 服务之间直接调用,每个微服务都开放Rest API,并调用其他微服务的接口
  • image.png

1.1.2 API网关(使用最广)

随着服务数量增多,如果还是每个服务都直接对外部客户端提供接口,就会变得很复杂,最显然的就是每个服务都得自己实现鉴权。

这时,就需要一个角色充当 request 请求的统一入口,即服务网关。

业务接口通过API网关暴露,是所有客户端接口的唯一入口。 微服务之间的通信也通过API网关。

image.png

1.2 网关要素及演进史

  • 稳定,高可用
  • 安全性
  • 性能、并发性
  • 扩展性
  • 限流熔断
  • 动态路由和负载均衡

基于 Path 的路由

api.xxx.com/pathx

截获器链

日志采集和 Metrics 埋点

响应流优化

网关是具体核心业务服务的看门神,相比于具体实现业务的系统服务,它是一个边缘服务,主要提供动态路由,监控,弹性,安全性等功能。


下面我们从单体应用到多体应用的演化过程来讲解网关的演化历程,一般业务系统发展历程都是基本相似的,从单体应用到多应用,从本地调用到远程调用。

1.2.1 单体应用

由于只需一个应用,所有业务模块的功能都打包为了一个 War 包进行部署,这可以减少机器资源和部署的繁琐。

image.png

单体应用中,网关模块和应用部署到同一JVM进程,当外部移动设备或者web站点访问单体应用的功能时,请求是先被应用的网关模块拦截,网关模块对请求进行鉴权、限流等动作后在把具体的请求转发到当前应用对应的模块处理。

多体应用

先看个不用网关的案例,有的公司架构,虽然是微服务,但全部通过 nginx 进行请求转发

image.png

这样有啥缺点呢?

每个暴露的服务都需要自己的域名,且一旦修改,其他各个使用该服务的服务配置都需要修改。这些服务直接暴露在公网,存在安全问题。而且随着外部设备种类增多,大量兼容适配工作繁杂。

image.png

随着业务发展,网站流量越来越大,在单体应用中简单的通过加机器的方式可以带来的承受流量冲击的能力也越来越低,这时候就会考虑根据业务将单体应用拆成若干功能独立应用,单体应用拆为多个应用后,由于不同的应用开发对应的功能,所以多应用开发之间可以独立开发而不用去理解对方的业务,另外不同的应用模块只承受对应业务流量的压力,不会对其他应用模块造成影响,这时多体的分布式系统就出现了,如下

image.png

多体应用中业务模块A和B单独启个应用,每个应用里有自己的网关模块。

如果业务模块太多,每个应用都有自己的网关模块,复用性不好,考虑把网关模块提出来,单独作为一个应用做服务路由,如下

image.png

如上图当移动设备发起请求时候是具体发送到网关应用的,经过鉴权后请求会被转发到具体的后端服务应用上,对应前端移动设备来说他们不在乎也不知道后端服务器应用是一个还是多个,他们只能感知到网关应用的存在。

目录
相关文章
|
2月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
501 126
|
2月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
303 0
|
2月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
2月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
2月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
4月前
|
负载均衡 监控 Java
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
在微服务架构中,高可用与稳定性至关重要。本文详解熔断、限流与负载均衡三大关键技术,结合API网关与Hystrix-Go实战,帮助构建健壮、弹性的微服务系统。
543 1
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
|
3月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
237 1
|
3月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
496 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
3月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
461 0

热门文章

最新文章