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

微服务里面的限流 (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框架相关路由对应的控制器处理中作为第二层,聚合业务层
  • 在对应控制器中调用的远程微服务,远程微服务就作为第三层基础服务层
  • 这种不是标准的三层架构,个人认为只要设计耦合性比较低,并且便于管理即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/549026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 221. 最大正方形

心路历程: 这道题是一个动态规划题,但是其实递推关系很难想到,如下图所示: MDP建模: 状态:以i,j为右下角的正方形 动作候选集:这道题的动作候选集其实是是否选择其左上角邻接的三个位置&#x…

安达发|体育产业体育装备生产车间APS排产软件

在体育产业中,体育装备的生产是保障运动员成绩和安全的关键一环。随着市场需求的多样化和个性化,传统的生产排程方法已经难以满足现代体育装备生产的复杂性和灵活性。因此,应用高级排产软件(APS)进行生产计划和控制成为…

Docker仅需3步搭建免费私有化的AI搜索引擎-FreeAskInternet

简介 FreeAskInternet 是一个完全免费、私有且本地运行的搜索引擎,并使用 LLM 生成答案,无需 GPU。用户可以提出问题,系统会进行多引擎搜索,并将搜索结果合并到ChatGPT3.5 LLM中,并根据搜索结果生成答案。 什么是 Fr…

2024年A特种设备相关管理(电梯)证考试题库及A特种设备相关管理(电梯)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年A特种设备相关管理(电梯)证考试题库及A特种设备相关管理(电梯)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲…

深入理解神经网络学习率(定义、影响因素、常见调参方法、关键代码实现)

目录 什么是学习率? 有哪些影响因素? 常用调整方法? 博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平…

中科驭数:DPU是构建高效智算中心基础设施的必选项

4 月 15 日,在江苏省未来网络创新研究院、网络通信与安全紫金山实验室举办的“2024智算网络技术与应用创新峰会”上,中科驭数作为DPU算力基础设施领军企业,受邀出席本次峰会。中科驭数产品运营部副总经理曹辉先生在《基于DPU的高效智算中心算…

libcurl 简单使用

LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP、FTP、SMTP、POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发送HTTP请求、下载文件、发送电子邮件等…

BackTrader 中文文档(十八)

原文:www.backtrader.com/ OCO 订单 原文:www.backtrader.com/blog/posts/2017-03-19-oco/oco/ 版本 1.9.34.116 添加了OCO(又称一次取消其他)到回测工具中。 注意 这只在回测中实现,尚未实现对实时经纪商的实现 注…

PHP直播电商平台APP开发应该具有的功能和搭建之前应该思考的过程?

直播电商平台是一个充满活力和潜力的领域,可以为用户提供全新的购物体验。以下是一些开发和搭建直播电商平台的想法: 功能丰富的直播模块: 实现主播与观众之间的实时互动,包括文字聊天、语音聊天、送礼物、打赏等功能。 商品展示…

SpringBoot + minio实现分片上传、秒传、续传

什么是minio MinIO是一个基于Go实现的高性能、兼容S3协议的对象存储。它采用GNU AGPL v3开源协议,项目地址是https://github.com/minio/minio。 引用官网: MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储。它与Amazon S3云存储服务兼容…

Window安装Redis

安装Redis-Service 下载并安装最新版Redis-windows : https://github.com/redis-windows/redis-windows 安装Redis-Manager Another Redis Desktop Manager 是一款优秀Redis桌面(GUI)管理客户端 参考链接 https://redis.io/

如何解决3dmax渲染大图时出现的噪点问题?

3dmax效果图云渲染平台——渲染100以3ds Max 2024、VR 6.2、CR 11.2等最新版本为基础,兼容fp、acescg等常用插件,同时LUT滤镜等参数也得到了同步支持。注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 在3ds Max中渲染大尺寸图像时,噪点问题…

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2

目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数(先序遍历):Swap 函数(中序遍历) 不可行:Swap 函数(后序遍历)&#xff…

打造属于你的体育直播平台:使用东莞梦幻网络源码缺点和优点

随着互联网的快速发展,体育直播平台已经成为了人们获取体育赛事信息和互动交流的重要渠道。为了快速搭建这样一个平台,许多企业和个人选择使用现成的源码,其中东莞梦幻网络科技提供的体育直播源码备受关注。然而,在选择使用该源码…

授权协议OAuth 2.0之JWT

写在前面 本文看下JWT相关内容。 1:为什么需要JWT OAuth2.0规范中并没有规定access_token使用什么样的格式,只要求满足,不连续性,不可猜测性,不可重复性就可以了,所以我们在生成accest_token的时候就比较…

解决:IDEA编译报错,自动切换JDK编译版本

一、IDEA切换JDK版本 要想在IDEA中完成对JDK版本的切换有多个地方需要我们进行修改 File | Settings | Build, Execution, Deployment | Compiler | Java Compiler File->ProjectStruct->platform settings->SDKS File->ProjectStruct->projectSettings->…

算法|基础算法|高精度算法

基础算法|位运算 1.高精度加法 2.高精度减法 3.高精度乘法 4.高精度除法 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 高精度加法 …

GPT-4 都已经这么强了,那未来的 GPT-5 会是什么样子?

GPT-4 可以说是再一次颠覆了我对 AI 的认知,从文本到图片视频,再到逻辑推理,简直是神进步。 GPT5上线前夕,把GPT4慢慢弄成GPT3.5的效果,把GPT3.5逐渐弄成GPT3的效果,GPT5横空出世的时候就如GPT4对GPT3.5的…

麦多馅饼创始人是谁,麦多馅饼品牌历程?

麦多馅饼的创始人是刘占华先生,他于2006年创建了吉林通化麦多食品有限公司。刘先生有着超过20年的餐饮连锁管理经验,是麦多馅饼品类的原创者。他的故事充满了奋斗和创业的精神,是中国餐饮行业的一段佳话。 品牌历程充满了刘占华先生的智慧和…

天工杂志社《天工》杂志社2024年第5期目录

业界翘楚 巍巍者昆仑 煌煌者华夏 乔彦鹏; 6-8 工美史话 日月之光照澈幽冥——墓葬铜镜中柿蒂纹意象辨析 周昕怡;刘春芽; 9-11 西藏传统手工艺技能教育发展历程研究 吕元菊; 12-14 探索研究《天工》投稿:cn7kantougao163.com 传统装饰艺术设计美学的…