Dubbo—流量管控

news2024/11/16 3:47:45

此任务基于一个简单的线上商城微服务系统演示了 Dubbo 的流量管控能力。

线上商城的架构图如下:

 

系统由 5 个微服务应用组成:

  • Frontend 商城主页,作为与用户交互的 web 界面,通过调用 User、Detail、Order 等提供用户登录、商品展示和订单管理等服务。
  • User 用户服务,负责用户数据管理、身份校验等。
  • Order 订单服务,提供订订单创建、订单查询等服务,依赖 Detail 服务校验商品库存等信息。
  • Detail 商品详情服务,展示商品详情信息,调用 Comment 服务展示用户对商品的评论记录。
  • Comment 评论服务,管理用户对商品的评论数据。

部署商场系统

为方便起见,我们将整个系统部署在 Kubernetes 集群,执行以下命令即可完成商城项目部署,项目源码示例在 dubbo-samples/task。

kubectl apply -f https://raw.githubusercontent.com/apache/dubbo-samples/master/10-task/dubbo-samples-shop/deploy/All.yml

完整的部署架构图如下:

 

Order 订单服务有两个版本 v1 和 v2,v2 是订单服务优化后发布的新版本。

  • 版本 v1 只是简单的创建订单,不展示订单详情
  • 版本 v2 在订单创建成功后会展示订单的收货地址详情

Detail 和 Comment 服务也分别有两个版本 v1 和 v2,我们通过多个版本来演示流量导流后的效果。

  • 版本 v1 默认为所有请求提供服务
  • 版本 v2 模拟被部署在特定的区域的服务,因此 v2 实例会带有特定的标签

执行以下命令,确定所有服务、Pod都已正常运行:

$ kubectl get services -n dubbo-demo
$ kubectl get pods -n dubbo-demo

为了保障系统完整性,除了商城相关的几个微服务应用,示例还在后台拉起了 Nacos 注册配置中心、Dubbo Admin 控制台 和 Skywalking 全链路追踪系统。

$ kubectl get services -n dubbo-system
$ kubectl get pods -n dubbo-system

获得访问地址

执行以下命令,将集群端口映射到本地端口:

kubectl port-forward -n dubbo-demo deployment/shop-frontend 8080:8080
kubectl port-forward -n dubbo-system service/dubbo-admin 38080:38080
kubectl port-forward -n dubbo-system service/skywalking-oap-dashboard 8082:8082

此时,打开浏览器,即可通过以下地址访问:

  • 商城首页 http://localhost:8080
  • Dubbo Admin 控制台 http://localhost:38080
  • Skywalking 控制台 http://localhost:8082

任务项

接下来,试着通过如下任务项给商城增加一些流量管控规则吧。

调整超时时间

通过在运行期动态的调整服务超时时间,可以有效的应对超时设置不合理、系统突发情况等导致的服务频繁超时、服务阻塞等问题,提升系统稳定性。

增加重试次数

在服务初次调用失败后,通过重试能有效的提升总体调用成功率。

访问日志

访问日志可以很好的记录某台机器在某段时间内处理的所有服务请求信息,运行态动态的开启访问日志对于排查问题非常有帮助。

同机房/区域优先

同机房/区域优先是指应用调用服务时,优先调用同机房/区域的服务提供者,避免了跨区域带来的网络延时,从而减少了调用的响应时间。

环境隔离

通过为集群中的某一个或多个应用划分逻辑隔离环境,可用于灰度环境或多套测试环境搭建。

参数路由

如基于用户 ID 路由流量,将一小部分用户请求转发到最新发布的产品版本,以验证新版本的稳定性、获取用户的产品体验反馈等。

权重比例

通过规则动态调整单个或一组机器的权重,可以在运行态改变请求流量的分布,实现动态的按比例的流量路由。

服务降级

服务降级的核心目标就是针对这些弱依赖项,在弱依赖不可用或调用失败时,通过返回降级结果尽可能的维持功能完整。

固定机器导流

通过将请求固定的转发某一台提供者机器,帮助快速复现开发或线上问题。

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

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

相关文章

为什么使用Nacos而不是Eureka(Nacos和Eureka的区别)

文章目录 前言一、Eureka是什么?二、Nacos是什么?三、Nacos和Eureka的区别3.1 支持的CAP3.2连接方式3.3 服务异常剔除3.4 操作实例方式 总结 前言 为什么如今微服务注册中心用Nacos相对比用Eureka的多了?本文章将介绍他们之间的区别和优缺点…

推荐前 6 名 JavaScript 和 HTML5 游戏引擎

推荐:使用 NSDT场景编辑器 助你快速搭建3D应用场景 事实是,自从引入JavaScript WebGL API以来,现代浏览器具有直观的功能,使它们能够渲染更复杂和复杂的2D和3D图形,而无需依赖第三方插件。 你可以用纯粹的JavaScript开…

Nuxt3打包部署到Linux(node+pm2安装和运行步骤+nginx代理)

最近,我们项目组的工作接近尾声,需要把项目部署上线。由于前端第一次使用Nuxt3框架,后端也是第一次部署Nuxt3项目,所以刚开始出现了很多问题。在我上网搜索很多教程后,得到了基本的流程。 1.服务器安装node.js环境 N…

Linux常用命令_文件搜索命令

文章目录 1. 文件搜索命令find2. 其他搜索命令2.1 文件搜索命令:locate2.2 文件搜索命令:which2.3 文件搜索命令:whereis2.4 文件搜索命令:grep 1. 文件搜索命令find 2. 其他搜索命令 2.1 文件搜索命令:locate 作为f…

c语言练习题30:判断一个数是否为2^n

判断一个数是否为2^n 思路:2^n中只有一个1故可以通过n&(n-1)是否为0来判断。 代码:

Android 之 WindowManager (窗口管理服务)

本节引言: 本节给大家带来的Android给我们提供的系统服务中的——WindowManager(窗口管理服务), 它是显示View的最底层,Toast,Activity,Dialog的底层都用到了这个WindowManager, 他是全局的!该类…

用MFC打开外部程序

在MFC(Microsoft Foundation Classes)中,你可以使用ShellExecute函数来打开Notepad并加载指定的文件。ShellExecute函数是Windows API的一部分,它可以执行与操作系统相关的操作,例如打开文件、运行程序等。 以下是在M…

VBJSON报错:缺少:语句结束

项目中使用JSON库VBJSON时报错: 编译错误:缺少:语句结束 cJSONScript和cStringBuilder报相同的错误,都在第一行: VERSION 1.0 CLASS 研究了半天没啥结果,之前使用这个库的时候没有什么问题,所以判定是当前…

51WORLD李熠:地球克隆计划就像攀登珠峰

提起数字化这个词,相信大家早已耳熟能详。然而数字化世界的意义是什么?它又给我们带来了什么?是让我们的真实世界更加美好?还是让我们沉迷于虚拟世界? 对于以上这些问题,51WORLD创始人兼CEO李熠给出的答案是…

基于Java+SpringBoot+Vue前后端分离医院资源管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

阿里云将关停代销业务

我是卢松松,点点上面的头像,欢迎关注我哦! 阿里云自从逐渐分拆独立之后,做了很多调整。最近它又做了一个大动作:据DoNews消息,阿里云将会在今年9月30日之前,全面关停代销业务。 这件事实际上…

21.图的应用

目录 一. 最小生成树 (1)普里姆(Prim)算法 (2)克鲁斯卡尔(Kruskal)算法 二. 最短路径 (1)Dijkstra(迪杰斯特拉)算法 (2)Floyd(弗…

Pygame编程(1)初始化和退出模块

初始化和退出模块 pygame使用基础流程 初始化模块设置主屏窗口程序主循环(处理键盘、鼠标、游戏杆、触摸屏等事件)退出模块终止程序 import sys import pygame from pygame.locals import *# 1.初始化模块 pygame.init()# 2.设置主屏窗口 display pyg…

【精品】基于VUE3的 电商详情 图片显示模块

效果 组件 <template><div class"goods-imgs"><div class"imgs-show"><img :src"mainImage" alt"大图" /></div><ul class"img-thumbnail"><li v-for"(item, index) in image…

freertos之任务调度算法

介绍 所谓调度算法&#xff0c;就是怎么确定哪个就绪态的任务可以切换为运行状态。 通过配置文件FreeRTOSConfig.h的三个配置项来配置调度算法&#xff1a;configUSE_PREEMPTION &#xff08;是否抢占&#xff09; configUSE_TIME_SLICING &#xff08;是否轮转&#xff09; c…

Linux操作系统--常用指令(文件目录类指令)

(1).pwd指令 功能:显示当前工作目录的绝对路径。 如果你使用cd命令进行切换的时候不知道到了哪里,就可以使用该指令输出路径查看。 (2).cd命令 功能:用于切换路径 语法: cd + 路径(路径可以指绝对路径,也可以是相对路径)

记录--一个炫酷的css动画

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 最近有一个需求&#xff0c;要我实现一个动画效果&#xff0c;效果如下 简单分析了一下效果&#xff0c;是一个3d的效果&#xff0c;首先是一个圆&#xff0c;接着是两段圆环&#xff0c;第三层是一堆…

WordPress使用子主题插件 Child Theme Wizard,即使主题升级也能够保留以前主题样式

修改WordPress网站样式&#xff0c;主题升级会导致自己定义设置的网站样式丢失&#xff0c;还需要重新设置&#xff0c;很繁琐工作量大&#xff0c;发现在WordPress 中有Child Theme Wizard子主题插件&#xff0c;使用Child Theme Wizard子主题插件&#xff0c;即使主题升级&am…

uni、js——点击与禁用(不可点击)、动态样式class

案例 没约满的时间可以点击进行选择&#xff0c;约满的就不能选择了。选择完之后变色变字。 核心思想就是创建一个第三方变量存起来&#xff0c;点击谁就存到第三方&#xff0c;在根据这个进行判断。 代码 <template><view class"content"><view cl…

基于JSP+Servlet+Mysql网上商城

基于JSPServletMysql网上商城 一、系统介绍二、功能展示三、其它四.获取源码 一、系统介绍 项目类型&#xff1a;Java web项目 项目名称&#xff1a;基于JSPServlet的网上商城 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;HTML、CSS、…