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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红黑树(Red Black Tree)

红黑树(Red Black Tree) 红黑树(Red Black Tree) 是一种自平衡二叉查找树 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)后来,在1978年…

海外商城小程序开发分析

【内容摘要】 在海外做商城小程序的可行性、优势与劣势。 我们将从市场需求、技术实现、竞争环境、政策法规等方面进行分析,为有意进军海外市场的企业提供有价值的参考。 【正文】 一、可行性分析 1. 市场需求:随着全球化的加速,海外市场…

喜讯 | “泰迪杯”数据挖掘挑战赛再次进入计算机类竞赛指数榜单

4月15日,第61届中国高等教育博览会在福州召开。在教师教学发展与创新人才培养论坛上,浙江大学何钦铭教授代表《全国普通高校大学生计算机类竞赛指数》专家工作组发布了最新一年的竞赛指数。据悉,今年的竞赛项目清单包含了28项赛事&#xff0c…

中国人工智能产业年会智能交通与自动驾驶专题全景扫描

中国人工智能产业年会(CAIIAC)是中国人工智能技术发展和应用的重要展示平台,不仅关注创新,还涵盖了市场和监管方面的内容,对于促进人工智能领域的发展起到了重要作用。年会汇集了来自学术界、工业界和政府的专家&#…

Udio——革命性的AI音乐生成软件

Udio是一款革命性的AI音乐生成软件,由前谷歌DeepMind的顶尖AI研究人员和工程师共同创立,得到著名风险投资公司a16z的支持。它旨在为音乐爱好者和专业人士提供一个全新的音乐创作和分享平台。用户可以通过文本提示来生成音乐,支持广泛的音乐风…

java-spring 图灵 02 手写spring

01.idea中创建一个maven管理的空项目 02.模拟创建出spring容器类,这里叫wzpApplicationContext,创建的时候会自动加载配置类的数据: 这里wzpApplicationContext对标的是AnnotationConfigApplicationContext public class wzpApplicationCo…

泰迪智能科技携手韩山师范学院“企业微专业合作办学招生宣讲”圆满结束

为进一步深化校企合作,落实高校应用型人才培养。2024年4月11日,泰迪智能科技携手韩山师范学院开展企业微专业合作办学招生宣讲会在韩山师范学院顺利举行,本次宣讲会旨在与韩山师范学院学子深入讲解数字经济时代下的企业用工需求,着…

升级win11后无线鼠标失灵,win11鼠标用不了

鼠标失灵是常见的设备故障问题,今天带来相关的解决方法,本文主要是针对升级win11后无线鼠标失灵的处理方法。不少小伙伴在使用电脑的过程中,都遇到过鼠标移动缓慢或者动不了的情况,升级到win11系统的小伙伴也不例外。一般刚升级新…

c# 服务创建

服务 创建服务 编写服务 可以对server1.cs重新命名,点击你的server按F7进入代码编辑模式,编写脚本 双击你的server.cs右击空白位置,添加安装程序,此时会生成“serviceInstaller1”及“serviceProcessInstaller1” 后续可以点击P…

Five86-1 靶机实战

Nmap: 1.存活探测: nmap -sn 192.168.20.1/24 2.端口探测: nmap -sS -p- 192.168.20.131 3.服务探测: nmap -sVC -p 22,80,10000 -O --version-all 192.168.20.131 这里发现 10000 端口也是http服务。 服务漏扫: nmap -p 2…

Shell——执行方式详解

一.什么是shell Shell 是一个计算机程序,它提供了用户与操作系统内核之间的交互界面。它接受来自用户或其他程序的命令,并将其转换为操作系统能理解的形式,然后执行这些命令并将结果返回给用户或程序。 Shell 在操作系统中扮演着重要的角色…

Proxmox VE 实现批量增加多网络

前言 实现批量创建多网络,更改主机名称,hosts解析 初始化网卡,主机名称,hosts解析,重启网卡 我的主机六个网卡,使用的有四个网卡,以下一键创建和初始化主机名称我是以硬件的SN号最为主机的名…