线上 | OpenSergo - [规范]

INDEX

      • §1 参考资料
      • §2 OpenSergo 与 Sentinel 关系
      • §3 规范体系
        • §3.1 服务元数据
          • `ReportMetadataRequest` 信息![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ffba569841ae4668b4cff74e4d41d21f.png)##### `ReportMetadataReply` 信息![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0ecfa2bab42f42e8abfd14b9282f5cb4.png)
        • §3.2 服务发现
        • §3.3 流量治理与服务容错
          • 流量治理的整体思路
          • 流量路由
          • 流量防护
          • 流量防护规则
        • §3.4 数据库治理标准
      • §4 项目引用办法

§1 参考资料

sentinel-1-8-6-release | Sentinel
OpenSergo 官网
OpenSergo Wiki

OpenSergo 是一套微服务生态下可以泛用的 微服务治理规范,它大约包括如下几个方面

  • 流量治理
    • 流量路由
    • 流量染色
    • 流量防护
  • 服务容错
    • 熔断降级
    • 重试防抖
    • 恢复
  • 服务监控
    • 日志
  • 中间件治理
    • 数据库治理
    • 缓存治理
  • 安全治理

§2 OpenSergo 与 Sentinel 关系

OpenSergo 是一个未完工的成体系的规范,Sentinel 天然完成了此规范的部分实现,并且 Sentinel 2.0 符合 OpenSergo 规范

§3 规范体系

§3.1 服务元数据

OpenSergo 是一套服务治理规范,需要持有服务信息才能对应的进行治理,这些信息由服务方上报,即服务元数据服务元数据通过 io.opensergo.proto.service_contract.v1.MetadataServiceGrpc.MetadataServiceImplBase#reportMetadata 完成上报

ReportMetadataRequest 信息在这里插入图片描述##### ReportMetadataReply 信息在这里插入图片描述
§3.2 服务发现

无资料

§3.3 流量治理与服务容错
流量治理的整体思路

流量治理本质上就是对流量的干预,因此整体思路是:能干预、怎么干预、以什么依据干预

OpenSergo 中的流量治理大体上是如下思路

  • 首先,需要贤能控制流量的走向,即 流量路由
  • 然后,需要能对不符合预期的流量采取特定的干预手段,即 流量防护
  • 再次,需要对流量的具体流转过程制定标准,即 容错标准
流量路由

核心思路:把什么样的流量分流到哪
大约可以看做是将一条请求链路的每个步骤,分别交由那个节点处理计算方法。

流量特征: 流量路由的核心方法就是对所有流量进行归纳拆分,归纳拆分的依据就是流量特征 比较容易理解的流量特征比如
灰度流量、某特定来源的流量(比如特定业务、特定用户群、特定机房)

流量路由由两部分组成:

  • 虚拟工作量(VirtualWorkload):官方定义——将某一组工作负载按照一定的特征进行分类
    • 可以这么理解:划定一组流量会流经的资源,标记他们可以用于处理具有某种特征的流量
    • 基于 Istio DestinationRule 进行扩展
  • 流量标签规则 (TrafficRouter):官方定义——将特定特征的流量映射至特定特征所对应的 VirtualWorkloads 上
    • 流量是具有流量特征的,用于处理流量特征的资源也按流量特征进行分组了,将它们映射起来就是流量标签规则
    • 基于 Istio VirtualService 进行扩展

示例规则

apiVersion: traffic.opensergo.io/v1alpha1
kind: TrafficRouter
metadata:name: service-providernamespace: defaultlabels:app: service-provider
spec:hosts:- service-providerhttp:- match:- headers:tag:exact: v2route:- destination:# 服务注册表中的服务名,服务名通过服务注册平台的服务注册表和 ServiceEntry 声明的主机中检查host: service-provider# 服务内部子集的名字,只适用于网格内部的服务,子集必须在合适的 DestinationRule 中定义subset: v2# 指定的作为地址的主机的端口号,如果主机只暴露一个接口,没必要显示指定#port: #当路由结果是空集时,则选中此 fallback(否则就没法处理流量)fallback:host: service-providersubset: v1- route:- destination:host: service-providersubset: v1
流量防护

核心思路:对于什么样的流量,当满足什么条件时,进行什么样的干预

上述思路的实现即流量防护规则,由 3 部分组成:

  • target:被干预的流量
  • strategy:决定是否对 target 执行干预的判断策略
  • fallbackAction:实际进行干预时的行为

Target 用 key 表示,目前可以等同视为 sentinel 的 resource。
在后面的版本中,会发展为 target = protocol + resource
示例:/foo

Strategy 流量防护策略略多,见后面
示例:定义了一个流控规则,集群 QPS < 10

apiVersion: fault-tolerance.opensergo.io/v1alpha1
# 流控规则
kind: RateLimitStrategy
metadata:name: rate-limit-foo
spec:# 度量类型,请求数metricType: RequestAmount# 控制模式,单机 Local, 集群总体 GloballimitMode: Globalthreshold: 10# 统计窗口,单位秒,结合 RequestAmount ,即 QPSstatDurationSeconds: 1

FallbackAction 可以类比 sentinel 的 fallbackMethod,可以指定触发规则的行为,比如返回一个定制的结果
示例:定义了一个降级行为,返回一个服务提供方的响应。响应码 429,响应体内容 Blocked by Sentinel,带着响应头 X-Sentinel-Limit=foo
示例:

apiVersion: fault-tolerance.opensergo.io/v1alpha1
kind: HttpRequestFallbackAction
metadata:name: fallback-foo
spec:behavior: ReturnProvidedResponsebehaviorDesc:# 触发策略控制后,HTTP 请求返回 429 状态码,同时携带指定的内容和 headerresponseStatusCode: 429responseContentBody: "Blocked by Sentinel"responseAdditionalHeaders:- key: X-Sentinel-Limitvalue: "foo"

RULE
示例:

apiVersion: fault-tolerance.opensergo.io/v1alpha1
kind: FaultToleranceRule
metadata:name: my-rulenamespace: prodlabels:app: my-app 
spec:selector:app: my-app # 规则配置生效的应用名# 下面依次指定上述定义内容,串联为一条规则targets:- targetResourceName: '/foo' strategies: - name: rate-limit-foofallbackAction: fallback-foo 
流量防护规则

流量控制(RateLimitStrategy)

  • 说明:控制单位时间内请求量
  • 应用场景:防突发激增流量
  • 配置
spec:# 指标类型,其实只有 RequestAmount,其余的一个不知道 unknow,一个忽略 unrecognizedmetricType: RequestAmount# 控制模式,只有两个模式,Local/Global -> 单机/集群limitMode: Globalthreshold: 10# 统计窗口,单位秒statDurationSeconds: 1

流量平滑(ThrottlingStrategy)

  • 说明:使并发请求排队并匀速执行,控制并发请求之间的并发间隔
  • 应用场景:
    • 异步后台任务
    • 延时不敏感
  • 区别:
    • 流量控制,强调限制请求的频率
    • 流量平滑,强调并发请求的间隔时间
  • 配置
spec:# 执行间隔minIntervalOfRequests: '20ms'# 排队超时时间queueTimeout: '500ms'

并发控制 (ConcurrencyLimitStrategy)

  • 说明:限制并发数,相当于 sentinel 的舱闭(隔离)
  • 应用场景:防止慢请求占满线程池
  • 配置
spec:# 并发数maxConcurrency: 8# 控制模式,只有两个模式,Local/Global -> 单机/集群limitMode: 'Local'

熔断保护 (CircuitBreakerStrategy)

  • 说明:慢调用、异常流量比例过大时熔断(暂停)流量
  • 应用场景:防止关键请求集中失败
  • 配置
spec:# SlowRequestRatio 慢调用,ErrorRequestRatio 异常strategy: SlowRequestRatio# 触发比例triggerRatio: '60%'# 统计窗口statDuration: '30s'# 熔断恢复时间,熔断后,经过此时间进入半开状态,通过一个请求进行试触,成功则恢复正常,否则继续熔断recoveryTimeout: '5s'# 最小请求数,统计窗口中请求数不足此数时,忽略规则minRequestAmount: 5# 慢调用必填,超出多上时间的调用认为是慢调用slowConditions:maxAllowedRt: '500ms'#异常必填,针对什么异常统计(没找到实际案例)errorConditions:errorType: 'NullPointorExceptrion'

自适应过载保护 (AdaptiveOverloadProtectionStrategy)

  • 说明:按系统指标与自适应策略提供 pod 维度保护
  • 应用场景:防止流量导致的系统指标超标
  • 配置
spec:# 系统指标metricType: 'CpuPercentage'triggerThreshold: '70%'# 目前支持 BBR 拥塞算法adaptiveStrategy: 'BBR'
§3.4 数据库治理标准

§4 项目引用办法

目前,openSergo 主要是给 k8s 环境准备的,由如下部分组成

  • opensergo-control-plane:对 k8s 环境的对接,展示 OpenSergo CRD(其实就是 k8s CRD)
  • 项目接入:项目对接 OpenSergo,OpenSergo 的底层还是依赖于 sentinel(或者说是其现有唯一实现)
    • 目前允许通过 sentinel、springcloud alibaba、dubbo 接入,但完成度极低
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-opensergo</artifactId><!-- 对应 Sentinel 1.8.6 版本 --><version>0.1.0-beta</version>
</dependency>
  • opensergo-dashboard:类似 sentinel-dashboard

具体步骤参考官网快速开始部分
因为目前规范的细则还有大量空白(更别提实现了),现有功能被 sentinel 完全覆盖,因此不再深入

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

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

相关文章

MMrotate报错AttributeError: ‘NoneType‘ object has no attribute ‘shape‘

使用MMrotate训练自定义数据集报错&#xff1a; AttributeError: ‘NoneType’ object has no attribute ‘shape’ 2024-05-31 17:48:06,121 - mmrotate - INFO - workflow: [(train, 1)], max: 12 epochs 2024-05-31 17:48:06,121 - mmrotate - INFO - Checkpoints will be …

【高校科研前沿】南大王栋、吴吉春教授团队在深度学习助力水库生态调度和优化管理方面取得新进展,成果以博士生邱如健为一作发表于水环境领域国际权威期刊

1.文章简介 论文名称&#xff1a;Integration of deep learning and improved multi-objective algorithm to optimize reservoir operation for balancing human and downstream ecological needs 第一作者及单位&#xff1a;邱如健&#xff08;博士生 南京大学&#xff09;…

JSON Web Token

JWT 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种用于在各方之间作为JSON对象安全地传输信息的开放标准&#xff08;RFC 7519&#xff09;。该信息经过数字签名&#xff0c;因此是可验证和可信的。JWT 可以使用HMAC算法或使用RSA的公钥/私钥对进行签名 JWT的…

【C++】——string模拟实现

前言 string的模拟实现其实就是增删改查&#xff0c;只不过加入了类的概念。 为了防止与std里面的string冲突&#xff0c;所以这里统一用String。 目录 前言 一 初始化和销毁 1.1 构造函数 1.2 析构函数 二 迭代器实现 三 容量大小及操作 四 运算符重载 4.1 bool…

SpringCloud学习笔记(一)

SpringCloud、SpringCloud Alibaba 前置知识&#xff1a; 核心新组件&#xff1a; 所用版本&#xff1a; 学习方法&#xff1a; 1.看理论&#xff1a;官网 2.看源码&#xff1a;github 一、微服务理论知识 二、关于SpringCloud各种组件的停更/升级/替换 主业务逻辑是&#x…

中建环能 | “农村生活污水治理稳质增效与智能运维技术研究及成套装备应用” 科技成果评价

中华环保联合会组织召开了中建环能科技股份有限公司申请的“农村生活污水治理稳质增效与智能运维技术研究及成套装备应用”技术成果评价会。会议由中华环保联合会水环境治理专业委员会秘书长刘愿军主持。 评审会委员 本次评价会邀请了7位相关专业领域的专家组成专家评价委员会。…

977. 有序数组的平方 - 力扣

1. 题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 2. 示例 3. 分析 我们当然可以遍历数组平方元素&#xff0c;然后再使用sort排序&#xff0c;但这里时间复杂度就为 O(logN) 了。 我…

音视频开发—视频相关概念:YUV与RGB

文章目录 YUV相关概念组成部分优点常见的 YUV 格式数据量的计算YUV4:2:0 存储格式平面模式&#xff08;planar):打包模式&#xff08;packed&#xff09; RGB 和 YUV 的定义关系与转换RGB 到 YUV 的转换YUV 到 RGB 的转换 使用场景优缺点 YUV相关概念 YUV 是一种颜色编码格式&…

Linux--EXT2文件系统

参考资料&#xff1a; linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图_一个块组中索引节点表和数据块区最多占用字节-CSDN博客 linux环境&#xff1a; Linux version 5.15.146.1-microsoft-standard-WSL2 (root65c757a075e2) (gcc (GCC) 11.2.0, GNU ld…

GPT-4o有点坑

GPT-4o有点坑 0. 前言1. GPT-4o简介2. GPT-4o带来的好处2.1 可以上传图片和文件2.2 更丰富的功能以及插件 3. "坑"的地方3.1 使用时间短3.2 GPT-4o变懒了 4. 总结 0. 前言 原本不想对GPT-4o的内容来进行评论的&#xff0c;但是看了相关的评论一直在说&#xff1a;技…

truncate IDL_UB1$导致数据库open hang---惜分飞

在一次数据库恢复中,发现IDL_UB1$表被truncate,然后数据库在open过程中会hang住,而且不报任何错误,这里通过试验进行重现.对于这类问题,以前有过类似处理测试&#xff1a;truncate IDL_UB1$恢复试验数据库版本 SQL> select * from v$version; BANNER ---------------------…

vue3学习(六)

前言 接上一篇学习笔记&#xff0c;今天主要是抽空学习了vue的状态管理&#xff0c;这里学习的是vuex&#xff0c;版本4.1。学习还没有学习完&#xff0c;里面有大坑&#xff0c;难怪现在官网出的状态管理用Pinia。 一、vuex状态管理知识点 上面的方式没有写全&#xff0c;还有…

对象转为Map

方案一&#xff0c;Jackson String json objectMapperFace.writeValueAsString(contract);Map<String,Object> map objectMapperFace.readValue(json, Map.class);方案二 &#xff0c; apache BeanUtils Map<String,String> beanMap null;try {beanMap BeanUti…

MyBatis延迟加载缓存分页逆向工程

文章目录 延迟加载概述步骤 缓存一级缓存介绍原理 二级缓存介绍 设置缓存对象策略原理开启步骤属性解释是否使用一级缓存 分页插件使用步骤 逆向工程介绍搭建使用增删修改查 延迟加载 概述 延迟加载本身是依赖于多表查询的 延迟加载中返回值要选择resultMap返回的结果一定是D…

Docker管理工具Portainer忘记admin登录密码

停止Portainer容器 docker stop portainer找到portainer容器挂载信息 docker inspect portainer找到目录挂载信息 重置密码 docker run --rm -v /var/lib/docker/volumes/portainer_data/_data:/data portainer/helper-reset-password生成新的admin密码&#xff0c;使用新密…

分享6个打开就能让人眼前一亮的网站,每次浏览都像发现新大陆~

1、ZLibrary zh.zlibrary-be.se/ ZLibrary是一个广受欢迎的在线图书馆&#xff0c;它提供了一个庞大的电子书和文章资源库&#xff0c;数量超过千万。这个平台覆盖了国内外众多领域的电子书资源&#xff0c;几乎可以满足用户98%以上的搜索需求&#xff0c;无论是学术研究、文…

【介绍下运维,什么是运维?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

大数据开发面试题【Mysql篇】

181、mysql数据库中的引擎 用于数据存储、处理和保护数据的核心服务&#xff0c;不同的数据库引擎有其各自的特点&#xff0c;常见的引擎&#xff1a;InnoDB&#xff0c;Mylsam、Memory、Mrg_Mylsam、Blackhole innodb&#xff1a;是一个事务性存储引擎&#xff0c;提供了对事…

C++的第一道门坎:类与对象(一)

目录 1.面向过程与面向对象 1.1面向过程 1.2面向对象 1.3对比 2.类的引入 2.1类的声明方式 2.2类的成员的两种定义方式 2.2.1单文件定义 2.2.2多文件定义 3.类的访问限定符与封装 3.1访问限定符 3.2封装 4.类对象 4.1类对象的实例化 4.2类对象的存储 4.2.1 存储…

高并发项目-分布式Session解决方案

分布式Session解决方案 1.保存Session&#xff0c;进入商品列表页面 1.保存Session 1.编写工具类 1.MD5Util.java package com.sxs.seckill.utils;import org.apache.commons.codec.digest.DigestUtils;/*** Description: MD5加密工具类** Author sun* Create 2024/5/5 14…