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

news2025/2/6 7:42:18

微服务里面的限流 (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.coloradmin.cn/o/1598731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建k8s deploy yaml文件的imagePullSecrets语句

镜像仓库是harbor kubectl create secret docker-registry key --docker-server192.168.0.190 --docker-usernameadmin --docker-passwordHarbor12345

【网络安全入门】什么是网络安全?

如今,组织的信息系统和数据面临着许多威胁。而人们了解网络安全的所有基本要素是应对这些威胁的第一步。 网络安全是确保信息完整性、机密性和可用性(ICA)的做法。它代表了应对硬盘故障、断电事故,以及来自黑客或竞争对手攻击等防御和恢复能力。而后者包…

解析数据科学,探索ChatGPT背后的奥秘

在当今这个由数据驱动和AI蓬勃发展的时代,数据科学作为一门融合多种学科的综合性领域,对于推动各行各业实现数字化转型升级起着至关重要的作用。近年来,大语言模型技术发展态势强劲,为数据科学的进步做出了巨大贡献。其中&#xf…

如何保护企业邮箱数据安全?看这里

在数字化时代,电子邮件已成为日常生活和商务交流的重要工具。然而,随着网络威胁的日益严峻,确保电子邮件通信的安全性至关重要。在此背景下,电子邮件SSL证书(Secure Sockets Layer Certificate)作为一项关键…

面试算法-175-将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视…

架构设计-灰度发布系统架构设计

灰度发布的定义 互联网产品需要快速迭代开发上线,又要保证质量,保证刚上线的系统,一旦出现问题可以很快控制影响面,就需要设计一套灰度发布系统。 灰度发布系统的作用,可以根据配置,将用户的流量导到新上…

vue webpack打包配置生成的源映射文件不包含源代码内容、加密混淆压缩

前言:此案例使用的是vue-cli5 一、webpack源码泄露造成的安全问题 我们在打包后部署到服务器上时,能直接在webpack文件下看到我们项目源码,代码检测出来是不安全的。如下两种配置解决方案: 1、直接在项目的vue.config.js文件中加…

微信预约怎么做_体验便捷的服务

在这个快节奏的时代,时间显得格外珍贵。无论是工作还是生活,我们都渴望能够用最短的时间完成更多的事情。在这样的背景下,微信预约应运而生,成为我们追求高效、便捷生活的新宠。今天,就让我们一起探讨微信预约的魅力&a…

40.原子累加器

java8之后,新增了专门用于计数的类,LongAccumulator,LongAdder的性能高于AtomicLong。 LongAdder 性能 > AtomicLong 性能 性能高的原因:如果都往一个共享变量上面进行累加,那么比较重试的次数肯定就多;如果分成几…

欧拉函数(模板题)

给定 n 个正整数 ai,请你求出每个数的欧拉函数。 欧拉函数的定义 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个正整数 ai。 输出格式 输出共 n 行,每行输出一个正整数 ai 的欧拉函数。 数据范围 1≤n≤100, 1≤ai≤2109 输…

云仓酒庄培训人数破大世界基尼斯纪录,社会影响力持续发酵

近日,云仓酒庄举办的《综合品酒师》培训活动圆满落幕,其参与人数之众,规模之大,成功刷新了大世界基尼斯纪录,引发了社会各界的广泛关注与热烈讨论。这一事件不仅彰显了云仓酒庄在酒类培训领域的专业化与系统化&#xf…

探索C# 11与.NET 7:入门指南与跨平台开发

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

为什么那么多人喜欢Python?学习Python能为我们带来哪些优势?

Python是现在最火的编程语言,没有之一。那么,相对于其他语言,为什么那么多人喜欢Python?学习Python能为我们带来哪些优势?今天,小编就来和大家探讨一下! 1、如果想成为一名程序员的话&#xff…

博将资本荣获杭州市清廉民营企业建设示范单位

2024年3月25日,杭州召开全市清廉民营企业建设现场推进会,引导广大民营企业家努力把清廉民企建设成效转化企业发展的强劲动力,形成杭州民营经济领域风清气正的良好生态。省纪委、省委统战部、省工商联相关领导,市直16家相关单位分管…

如何下载省,市,区县行政区Shp数据

摘要:一般非专业的GIS应用通常会用到省市等行政区区划边界空间数据做分析,本文简单介绍了如何在互联网上下载省,市,区县的shp格式空间边界数据,并介绍了一个好用的在线数据转换工具,并且开源。 目录 一、下…

10. Spring MVC 程序开发

本文源码位置: Spring-MVC 1. Spring MVC 概要 摘自Spring官方: Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes …

安卓手机怎么连接电脑?这三个方法即刻解决!

随着智能手机的普及,我们越来越依赖手机进行工作和娱乐。然而,有时候我们需要将手机上的数据或文件传输到电脑上,或者需要在电脑上进行某些操作。那么,安卓手机怎么连接电脑呢?这篇文章将为你介绍三种简单的方法&#…

0.5W 3KVDC 隔离 单输出 DC/DC 电源模块 ——TPR-W5 系列

TPR-W5系列是一款需要隔离和电压转换的产品,工业级环境温度,温度范围从–40℃到105℃,用于PCB安装的国际标准结构。此系列产品小巧,效率高,低输出纹波及提供3000V以上的直流电压隔离,用于需要隔离的场合&am…

Linux下SPI设备驱动实验:创建SPI节点及SPI设备子节点

一. 简介 SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动。主机控制器驱动一般由半导体厂商写好,我们来编写SPI设备驱动代码。 前一篇文章分析了 IMX6U系列芯片的 SPI中片选信号的处理,文章如下: I.MX6ULL SPI 主机控…

排序算法。

冒泡排序: 基本&#xff1a; private static void sort(int[] a){for (int i 0; i < a.length-1; i) {for (int j 0; j < a.length-i-1; j) {if (a[j]>a[j1]){swap(a,j,j1);}}}} private static void swap(int[] a,int i,int j){int tempa[i];a[i]a[j];a[j]temp;} …