Go微服务: 服务限流原理, 负载均衡与API网关

微服务网关 Spring Cloud Gateway API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。现在Spring Cloud中引用的还是Zuul 1.x版本,而这个版本是基于过滤器的,是阻塞IO,不支持长连接。执行所有的“pre”过滤逻辑,然后发出代理请求,最后执行“post”过滤逻辑。像Nginx这类网关,性能肯定是没得说,它适合做那种门户网关,是作为整个全局的网关,是对外的,处于最外层的;优先级最高的过滤器将会是“pre”阶段中的第一个过滤器,同时它也将是“post”阶段中的最后一个过滤器。 阅读详情

微服务里面的限流 (uber/limit)概述


  • go 微服务保稳三剑客: 熔断,限流,负载均衡
  • 限流的作用
    • 限制流量,在服务端生效
      • 注意:熔断是客户端生效
    • 保护后端服务
      • 餐厅吃饭排队的问题,提供凳子,让等候,这就是限流操作
      • 如果不限流,每个客户都吃不上饭
    • 与熔断互补

限流的原理

  • 限流用到漏桶算法

左侧

  • 水龙头进水快,但是下面漏孔出水是匀速的
  • 当请求量非常大的时候,相当于进水非常大
  • 出水的孔的水滴是没有进水的流量大
  • 所以这里,会有这样一个储蓄桶
  • 不管水流有多大,出水的频率是固定的
  • 保护了我们服务端处理的频率是固定的
  • 这样就起到了对服务端进行保护的作用
  • 这样就起到了一个缓冲的作用

右侧

  • 右边是一种抽象,当客户端请求的时候
  • 服务端接入请求,当我未限流的时候,都接到桶子里面
  • 这个桶子就是进行流量控制,可以进行限流处理
  • 被限流完,满足我们的算法请求
  • 在限流里面,主要是这样一个漏桶算法
  • 还有一个 令牌桶算法 是另一个层面的,这里不做详细说明

负载均衡概述

  • go 微服务保稳三剑客: 熔断,限流,负载均衡
  • 负载均衡的作用
    • 提高系统可扩展性
      • 如果漏桶算法中的处理速度存在瓶颈不满足需求,我们就要通过负载均衡来弥补
      • 如果客户端请求,服务端压力比较大的时候,也可以用负载均衡
    • 支持 HTTP, HTTPS, TCP, UDP 请求
    • 主要算法:循环算法和随机算法,默认随机算法
      • 负载均衡可以做在服务端,也可以做在客户端
      • 主要演示,客户端调用负载均衡的算法

2 )均衡架构

  • 当一个正常的api请求过来之后
  • 这个 API 会再一个 Server上进行处理
  • 当 Server A 压力特别大的时候,就会用到负载均衡
  • 会把 Server A 横向扩展成 Server A1, Server A2, Server A3
  • 当我们调用 API 的时候,因为随机算法,可能会访问到这3台机器的任意一台
  • 这样,把系统横向扩展,提高了服务端的处理能力,这样 A1 压力就会少 2/3
  • 我们的负载均衡主要是写在客户端这块, 也就是微服务的调用方
  • 也就是说这里的 Server A1 等服务器会调用其他微服务

API 网关与三层架构设计

  • 引入了api网关,势必影响微服务的架构,总体架构如下
  • 通过正常的方式请求一个api的时候,比如 CartApi/FindAll
  • 它会通过网关,根据网关的规则,找到 go.micro.api.cartapi CartApi.FindAll
  • 它会访问 Cart Api 服务,基于这个服务,再去请求后端基础服务
  • 这里引入API网关之后,请求和原来使用是一样的
  • 暴露出API是对外提供使用的,并对基础服务进行简单的聚合
  • 这样把架构分了3层,API网关层,API层,基础服务层
  • 着重看下这三层的作用
    • 第一层 Micro API 网关,通过 go micro api 网关进行暴露的
    • 前端可以通过统一的网关地址,请求提供的接口
    • 所以地址不会变,后面路由转发到提供的接口上去
    • 这一块不需要我们开发,只要启动 micro api 就可以作为客户端的代理进行后端的请求
    • 第二层 聚合业务层,就是我们暴露出去的api, 我们实现业务的聚合,通过 聚合业务层 把基于基础服务查询到的数据
    • 通过业务逻辑代码组装起来,返回到请求上去
    • 这样分层设计的好处:可以有效复用代码,越基础的代码,越稳定,复用率越高,确保底层服务职责单一,并且提高扩展性
    • 越是底层的,就需要再业务上进行稳定,不需要经常修改,越是表层的东西根据业务逻辑的不同,而经常调整
    • 这样,可以提高扩展性,聚合底层服务,满足业务需求
    • 第三层 基础服务层,基础服务层就是之前代码中的 service, 处理最底层的业务逻辑,保证服务的单一职责
    • 这个就是引入网关之后,整体架构带来的影响
  • 在基础服务层的基础上,来开发聚合业务层,告诉我们聚合业务层api如何去开发
    • 以及在聚合业务层,如何去跟 api 网关进行关联

微服务之API 网关 与 gin 框架

  • 在标准三层架构中,通过网关请求 /greeter/say/hello, 这个路径网关会将请求转发到
  • go.micro.api.greeter 服务的 Say.Hello方法处理
  • 这里 go.micro.api 是网关默认服务名的前缀
  • 路径中 /cartApi/cartApi/findAll 也可以写成 /cartApi/findAll
  • 注意,go-micro的版本更新较为频繁,很多旧版的api都会升级,进而不适用新版go环境
  • 在使用的时候,可以看官网对应的版本来看,go-micro 默认提供网关功能
  • 在不使用三层架构的场景下,也可以不这么做,在一般业务开发中
  • 我会倾向选择一个更具有开发效率的框架代替 go micro 生成的一些模板来开发API网关
  • 比如 gin 或 beego框架,在某个特定的路由里面去组织和调用
  • 其实,比如在 gin 框架中,使用路由定义不同的访问路径,这个就充当第一层,即网关的功能
  • 在gin框架相关路由对应的控制器处理中作为第二层,聚合业务层
  • 在对应控制器中调用的远程微服务,远程微服务就作为第三层基础服务层
  • 这种不是标准的三层架构,个人认为只要设计耦合性比较低,并且便于管理即可
基于Go Web的后端微服务架构搭建 本文旨在为开发者提供一份全面的指南,介绍如何使用Go语言构建现代化的后端微服务架构。我们将覆盖从基础概念到高级主题的全方位内容,包括服务拆分、通信机制、数据一致性、监控和部署等关键方面。核心概念和架构设计关键技术组件详解具体实现和代码示例部署和运维实践性能优化和扩展策略微服务:将单一应用程序划分成一组小型服务的方法服务发现:微服务动态发现和调用其他服务的机制API网关:系统的统一入口,处理路由、认证和限流等容器化:将应用及其依赖打包到标准化单元中的技术。 阅读详情

相关推荐

go-tcp-balance:用GO编写的TCP负载均衡器。 SSH负载平衡的主要用途

go-tcp平衡器 一个用Go编写的小型TCP负载均衡器,它基于: 笔记 此负载平衡器并非用于平衡许多连接(例如每秒数百或数千),而是用于相对较少的连接(例如SSH连接),这会产生大量负载(因为用户启动任务)。 在我工作的地方,该程序用于“通用”计算服务器,以运行MATLAB作业或运行一些已编译的C代码。 大学正在使用它来以最低的负载将客户端分发到服务器。 设置 如果将此项目移动到文件系统中的其他位置,则必须更新初始化脚本,以便它们正确启动。 进程的PWD必须与PHP脚本位于同一目录中! 负载均衡策略 负载平衡器知道两种转发客户端的策略。 最低负荷 为此,您需要安装nrpe客户端。 nrpe是nagios使用的客户端。 然后,负载平衡器将运行nrpe命令check_load ,该命令必须在nrpe.cfg如下配置: command[check_load]=/usr/lib64/na

基于go-micro微服务的实战-Gateway网关层的限流降级(八)

go-micro网关层的限流降级

toegg的博客 1045

TJA1445/TJA1465 CAN收发器硬件设计与软件配置实战指南

控制器局域网(CAN)总线是汽车电子和工业控制领域实现电子控制单元(ECU)间可靠通信的核心技术。其工作原理是将数字信号转换为差分信号进行抗干扰传输,技术价值在于构建稳定、高效的分布式实时控制系统。随着汽车电子架构向域集中式演进,对CAN总线的通信速率、网络复杂度和静态功耗提出了更高要求,这催生了支持CAN FD协议和智能电源管理的新一代高速CAN收发器。在车载网关、域控制器及工业网络节点等应用场景中,NXP的TJA1445和TJA1465系列收发器凭借其部分组网(Partial Networking)和选

weixin_29655587的博客 411

go-micro介绍及环境搭建和使用

Micro是一个简化分布式开发的微服务生态系统,该系统为开发分布式应用程序提供了高效,便捷的模块构建。主要目的是简化分布式系统的开发。学习完该框架以后,可以方便开发者们非常简单的开发出微服务架构的项目,并且随着业务模块的增加和功能的增加,Micro还能够提供管理微服务环境的工具和功能。启用API作为一个网关或代理,来作为微服务访问的单一入口。它应该在您的基础架构的边缘运行。它将HTTP请求转换为RPC并转发给相应的服务。

wang11876的博客 3306

STM32H7多通道ADC数据采集实战:CubeMX配置ADC1/2/3+DMA/BDMA+Cache避坑全记录

本文详细解析了STM32H7多通道ADC数据采集的实战配置,涵盖CubeMX中ADC1/2/3与DMA/BDMA的协同设置及Cache一致性处理。通过硬件架构分析、DMA优化技巧和Cache避坑指南,帮助开发者实现高精度数据采集,适用于电机控制、环境监测等嵌入式系统。

weixin_28744613的博客 292

Centos7配置阿里云镜像源的教程

查看你的Centos版本,版本过低会导致安装失败,验证网络是否可以连接阿里云镜像,使用阿里云是需要网络的。# wget命令下载: wget [options] [url]# curl命令下载: curl [options] [url]我上面这个图片由于电脑问题是还没有加载完的。删除原来或者之前的yun源。

lyhshs的博客 2261

Go 限流器-漏桶 VS 令牌桶 常用包原理解析

本文主要介绍两个包Uber漏桶,time/rate令牌桶 可以了解到: 1. 使用方法 2. 漏桶/令牌桶 两种限流思想 and 实现原理 3. 区别及适用场景 4. 应用Case

t949500898的博客 2602

【第六届起重机创意大赛国一作品——资料分享】

文章目录前言一、比赛内容分析二、确定方案与作品模型1.方案简图2.作品模型三、电控部分控制思路单片机选择与资源分配拓展板的设计接线与走线代码分享总结

qq_19308801的博客 7783

15. Go实现负载均衡算法

在实际工作中,为了避免单点故障,一个服务一般都是会部署多个实例的,那么请求来的时候,到底使用哪个服务器处理请求呢?这便涉及到了负载均衡算法了。

YouMing_Li的博客 617

保姆级教程:用YOLOv5s搞定钢材表面缺陷检测,从数据集NEU-DET到模型部署全流程

本文提供了一份详细的YOLOv5s钢材表面缺陷检测教程,涵盖从NEU-DET数据集处理到模型部署的全流程。针对工业环境中的实际限制,如计算资源有限和标注样本少等问题,提供了优化方案和实用技巧,帮助开发者快速实现高效的钢材缺陷检测系统。

weixin_30568591的博客 465

基于Simulink的永磁同步电机三闭环(位置/速度/电流)伺服仿真

本文详细介绍了基于Simulink的永磁同步电机三闭环伺服控制系统的设计与实现,针对机器人关节控制场景。系统采用位置环(外环)、速度环(中环)和电流环(内环)的嵌套结构,通过精确的带宽匹配(电流环1kHz、速度环200Hz、位置环20Hz)实现亚微米级位置跟踪。文中提供了完整的Simulink建模步骤,包括主电路搭建、三环PI控制器实现及坐标变换模块,并验证了系统性能:阶跃响应时间35ms,位置误差<0.05°,正弦跟踪误差<0.15°,负载突加恢复时间0.08s。最后提出了参数自适应整定、前馈

amy_mhd的博客 279

微服务网关,如何选择?

API网关(API Gateway)是微服务架构中的一个关键组件,它充当了客户端与后端服务之间的中间层。其主要功能包括请求路由、协议转换、负载均衡、安全认证、限流熔断等。通过API网关,客户端无需直接与多个微服务交互,而是通过统一的入口访问后端服务,从而简化了系统的复杂性。

cherryの技术文档 1935

cherry使用MCP协议Streamable HTTP实践

摘要:Streamable HTTP协议是针对传统HTTP+SSE传输方式的改进方案,解决了连接恢复、服务器资源占用和单向通信等问题。该协议基于普通HTTP实现,支持无状态服务器、纯HTTP服务和多轮对话,同时兼容现有基础设施。通过演示展示了服务端和客户端的配置方法,体现了其灵活性和实用性。MCP(多轮对话协议)作为扩展LLM能力的关键技术,代表着未来交互式AI的发展趋势。

全网120W+关注AI拉呱,专注人工智能以及科技前沿! 563

第五课 Go容器化微服务系统实战-熔断、限流和负载均衡

第五课 Go容器化微服务系统实战-熔断、限流和负载均衡 tags: GO 慕课网 categories: 熔断(hystrix-go) 限流 负载均衡 API网关 文章目录第五课 Go容器化微服务系统实战-熔断、限流和负载均衡第一节 微服务熔断、限流、负载均衡、网关介绍安装1.1 微服务熔断(hystrix-go)介绍1.2 微服务熔断(hystrix-go)核心概念1.3 微服务熔断(hystrix-go)观测面板安装1.4 微服务限流介绍1.5 微服务负载均衡介绍1.6 微服务API网关介绍第

QnHyn 974

LangChain与LangGraph核心区别解析

LangChain与LangGraph是当前大语言模型(LLM)应用开发中两个紧密相关且极具影响力的开源框架。它们源于LangChain AI公司,设计哲学互补,旨在解决不同维度的LLM工程化问题,共同构成了构建复杂智能应用的强大工具集。

weixin_35774598的博客 1929

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Go微服务网关搭建指南】:手把手教你打造可扩展的网关系统

掌握Go网关实现核心技巧,手把手教你构建高性能微服务网关。适用于多服务统一入口、路由管理与鉴权场景,基于Go语言高并发优势,实现可扩展、易维护的网关系统。架构清晰,组件灵活,值得收藏。

AlgoChat的博客 1111

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

(精华)2020年9月25日 微服务 API网关Ocelot的使用

if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }

愚公智库 44万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

浅析API网关——Ocelot[网关]+Consul[服务发现负载均衡]+Polly[服务熔断]+Ids4[服务认证]

API网关 本文将讲述以下内容: 概念------为什么------如何使用oclet-----内部概念(上游和下游)、路由-----ocelot内部运行原理-----如何做步骤-----ocelot配置文件介绍----路由基本使用----路由负载均衡------路由consul支持-----路由多个服务操作-----路由多个服务聚合----路由限流----路由熔断----路由缓存----路由身份验证。 1.什么是API网关 就是用来限制客户端访问服务端api一到门槛,在图例中已经进行了展示 1.1 什么

老陈聊架构 2644

go-zero网关实现:API Gateway在微服务架构中的应用

你是否还在为微服务架构中的API管理、流量控制和服务治理而烦恼?本文将详细介绍go-zero框架中API Gateway(网关)的实现原理与应用场景,帮助你快速掌握在微服务架构中构建高效、可靠的网关系统。读完本文后,你将了解go-zero网关的核心功能、实现方式以及如何在实际项目中应用。 ## 微服务架构中的网关角色 在微服务架构中,API Gateway(网关)扮演着至关重要的角色,它作为客...

gitblog_00449的博客 513

vivo: 微服务 API 网关架构实践

网关作为微服务生态中的重要一环,由于历史原因,中间件团队没有统一的微服务API网关,为此准备技术预研打造一个功能齐全、可用性高的业务网关。接下来我们简要介绍一下 Zuul2 关键知识点。Zuul2 的架构图:为了解释上面这张图,接下来会分别介绍几个点如何解析 HTTP 协议Zuul2 的数据流转两个责任链:Netty ChannelPipeline责任链 + Filter责任链上面介绍了Zuul2的部分知识点,接下来介绍网关的整体功能。

猪猪 1102

kong网关

1. kong网关简介 Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡 配置把请求均匀地分发到各个Server,来应对大批量的网络请求。 2. 为什么需要 API 网关 API网关是一个服务器,是系统的

Hello World 1万+

微服务:简述微服务架构中的API网关

微服务:简述微服务架构中的API网关       API网关是任何微服务架构的重要组成部分。有了它我们可以在一个独立的模块上方便的处理一些非业务逻辑,可以让微服务本身专注在自身特定的功能上,使得每个微服务的开发更容易和更快速。 一、为什么需要API网关       在我们的项目...

王小二(海阔天空) 1371

从单体到微服务:Python API网关迁移实战,轻松应对千万级请求

掌握高并发场景下的API网关Python开发,本文详解从单体到微服务的迁移方案。涵盖负载均衡、鉴权与限流实现,助力系统轻松应对千万级请求,提升性能与可维护性,值得收藏。

ProceShoal的博客 958

微服务API网关设计难题,PHP如何扛住百万级请求?

解决高并发下API网关性能瓶颈,本文深入探讨PHP在微服务架构中的API网关实现,涵盖路由转发、鉴权限流等核心机制,结合Swoole提升处理能力,支撑百万级请求。适用中大型系统架构优化,值得收藏。

codeink的博客 908

微服务网关选型和实践:Zuul、Spring Cloud GetWay、Kong和Traefik

常用API网关的对比和选型,并讲解我司自研的微服务网关,干货满满! 往期精选: 如何看待程序员35岁职业危机? 2年经验总结,告诉你如何做好项目管理 Java全套学习资料(14W字),耗时半年整理 我肝了三个月,为你写出了GO核心手册 消息队列原理和选型:RabbitMQ、Kafka、RocketMQ和ActiveMQ 微服务网关选型和实践:Zuul、Spring Cloud GetWay、Kong和Traefik RPC框架原理和...

飞楼踏梦 5302

微服务--API网关

就是用来限制客户端访问服务端api一到门槛,在图例中已经进行了展示API是Application Programming Interface缩写,翻译成中文就是应用程序接口。在实际微服务中可以理解一个个功能方法。就比如你一个用户服务的微服务,可以对外提供 API 接口为,查找用户,创建用户等。网关, wiki 上定义。在计算机网络中,网关(英语:Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。

不求上进的码农的博客 380
上一篇: Go微服务: 服务熔断hystrix原理
下一篇: K8s: 关于Kubernetes中的Pod的创建,实现原理,Job调度pod以及pod网络
Wang's Blog
博客等级 码龄12年 7433粉丝 2418原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值