线上 | 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-provider
  namespace: default
  labels:
    app: service-provider
spec:
  hosts:
    - service-provider
  http:
    - match:
        - headers:
            tag:
              exact: v2
      route:
        - destination:
            # 服务注册表中的服务名,服务名通过服务注册平台的服务注册表和 ServiceEntry 声明的主机中检查
            host: service-provider
            # 服务内部子集的名字,只适用于网格内部的服务,子集必须在合适的 DestinationRule 中定义
            subset: v2
            # 指定的作为地址的主机的端口号,如果主机只暴露一个接口,没必要显示指定
            #port: 
            #当路由结果是空集时,则选中此 fallback(否则就没法处理流量)
            fallback:
              host: service-provider
              subset: v1
    - route:
        - destination:
            host: service-provider
            subset: 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, 集群总体 Global
  limitMode: Global
  threshold: 10
  # 统计窗口,单位秒,结合 RequestAmount ,即 QPS
  statDurationSeconds: 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: ReturnProvidedResponse
  behaviorDesc:
    # 触发策略控制后,HTTP 请求返回 429 状态码,同时携带指定的内容和 header
    responseStatusCode: 429
    responseContentBody: "Blocked by Sentinel"
    responseAdditionalHeaders:
      - key: X-Sentinel-Limit
        value: "foo"

RULE
示例:

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

流量控制(RateLimitStrategy)

  • 说明:控制单位时间内请求量
  • 应用场景:防突发激增流量
  • 配置
spec:
  # 指标类型,其实只有 RequestAmount,其余的一个不知道 unknow,一个忽略 unrecognized
  metricType: RequestAmount
  # 控制模式,只有两个模式,Local/Global -> 单机/集群
  limitMode: Global
  threshold: 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 完全覆盖,因此不再深入

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

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

相关文章

探索文档解析技术,推动大模型训练与应用

探索文档解析技术&#xff0c;推动大模型训练与应用 0. 前言1. CCIG 20241.1 会议简介1.2 大模型技术及其前沿应用论坛1.3 走进合合信息 2. 大模型时代2.1 大模型的发展与应用2.2 大模型面临的挑战 3. 文档解析技术3.1 文档解析技术难点3.2 TextIn 文档解析算法流程 4. 大模型时…

Linux CFS调度器简介

文章目录 前言一、概要二、实现2.1 简介2.2 算法实现2.3 内核源码 三、特点四、调度策略五、调度类参考资料 前言 早期的Linux调度器采用了简化的设计&#xff0c;显然并不针对具有许多处理器甚至超线程的大规模架构。Linux 1.2调度器使用循环队列对可运行任务进行管理&#x…

【文献阅读】应用人工智能在Simulink中开发软件

参考文献&#xff1a;《AI用于Simulink模型的降阶方法和应用场景》Mathworks在2024年MATLAB XEPO大会的演讲 文章目录&#xff1a; 1、模型框架 2、数据准备 3、AI建模 4、仿真和测试 5、部署应用 Tips&#xff1a;降阶模型&#xff08;Reduced Order Modeling&#xff0…

【机器学习】AI大模型的探索—浅谈ChatGPT及其工作原理

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f4da;介绍ChatGPT 1.1 什么是ChatGPT 1.2 ChatGPT的应用场景 &#x1f4a1;基础概念 1. 人工智能和机器学习 1.1 人工智能&#xff08;AI&#xff09;简介 1.2 机器学习&#xff08;ML&#xff09;简…

前端vue搭建

1.找一个合适的模板&#xff0c;可以用vue-element-admin的模板&#xff0c;但是个人认为这个模板太大了&#xff0c;做小项目修改起来比较复杂&#xff0c;可以找一个比较小的项目 2.我找的项目git clone https://github.com/tuture-dev/vue-admin-template.git&#xff0c;这…

标准发布 | 反渗透和纳滤水处理膜修复再利用技术要求

本文件由浙江大学、中华环保联合会水环境治理专业委员会提出。 本文件由中华环保联合会归口。 本文件主编单位&#xff1a;浙江大学、河南一膜环保技术有限公司、安徽精高水处理有限公司、国能龙源环保有限公司、湖南沁森高科新材料有限公司。 本文件参编单位&#xff1a;深…

【源码】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源

多语言聊天室系统&#xff0c;可当即时通讯用&#xff0c;系统默认无需注册即可进入群聊天&#xff0c;全开源 【海外聊天室】多语言H5聊天室/thinkphp多国语言即时通讯/H5聊天室源码/在线聊天/全开源 - 吾爱资源网

有关RIPv2认证技术与网络安全综合实验

有关RIPv2认证技术与网络安全综合实验 实验拓扑如下&#xff1a; 理论知识&#xff1a; 比较 RIPv1&#xff1a;广播式通信&#xff0c;255.255.255.255&#xff1b;不支持认证&#xff0c;有类不带掩码&#xff1b;不支持VLSM和CIDR RIPV2&#xff1a;组播通信&#xff0c;22…

秋招突击——算法打卡——5/30——复习{最大上升子序列的和、面试算法缺陷补充}——新做:{回文数+补充 自定义Stoi实现、正则表达式匹配}

文章目录 复习导弹拦截——最大上升子序列和推理过程实现代码补充昨日面试 新作回文数实现代码 字符串转整数正则表达式匹配个人实现思路分析实现代码如下 参考做法思路分析实现代码 总结 复习 导弹拦截——最大上升子序列和 同样类型题目链接&#xff1a;导弹拦截重做这道题…

安卓 Flutter Channel 源码解析

Flutter 官方提供三种 Platform 与 Dart 端消息通信方式&#xff0c;他们分别是 MethodChannel 、 BasicMessageChannel 、 EventChannel MethodChanel &#xff1a;用于传递方法调用&#xff0c; MethodCallHandler 最终必须在 UI 线程通过 result. success(x) 方法返回…

【基础算法总结】位运算

位运算 1.基础位运算2.常见用法总结3.面试题 01.01. 判定字符是否唯一4.丢失的数字5.两整数之和6.只出现一次的数字 II7.面试题 17.19. 消失的两个数字 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励…

基于物理的分析模型,用于具有场板结构的GaN HEMT的输入、输出及反向电容

Physics-Based Analytical Model for Input, Output, and Reverse Capacitance of a GaN HEMT With the Field-Plate Structure&#xff08;TPE 17年&#xff09; 摘要 该论文提出了一种分析模型&#xff0c;用于描述带有场板结构的常开型AlGaN/GaN高电子迁移率晶体管&#x…

无意间看到男主眼神,这也太有感觉了吧❗❗

2025即将首播《藏海传》中国大陆剧情/奇幻/古装共40集。 原本&#xff0c;稚奴身为大雍国钦天监监正蒯铎之子&#xff0c;背负着家族血仇。 历经十年沉默与磨砺&#xff0c;他化名为藏海&#xff08;肖战 饰&#xff09;&#xff0c;重返京城。 他凭借卓越的营造技艺和深谙纵…

深入探讨 Android 的 View 显示过程与源码分析

文章目录 1. 探讨 Android 的 View 显示过程1.1. onFinishInflate1.2. onAttachedToWindow1.3. onMeasure1.4. onSizeChanged1.5. onLayout1.6. onDraw 2. 系统代码分析1.1. onFinishInflate1.2. onAttachedToWindow1.3. onMeasure1.4. onSizeChanged1.5. onLayout1.6. onDraw …

Python网页处理与爬虫实战:使用Requests库进行网页数据抓取

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

LDR6328Q:重塑Type-C接口取电体验的新星

在当今日益发展的电子设备市场中&#xff0c;快速、高效的电源管理成为了众多厂商和消费者关注的焦点。LDR6328Q作为一款专为设备端设计的Type-C接口取电芯片&#xff0c;凭借其独特的功能和优势&#xff0c;正在逐步改变我们的电源管理方式。 一、LDR6328Q的核心特点 多协议…

高磷废酸除铝除铁再生技术的实际应用

在化工和金属加工行业中&#xff0c;高磷废酸的处理和再生是一个重要的环保和经济效益问题。废酸中通常含有铝、铁等杂质&#xff0c;这些杂质不仅影响废酸的再利用价值&#xff0c;还可能对环境造成污染。因此&#xff0c;开发高效的高磷废酸除铝除铁再生技术具有重要的实际意…

[排序算法]插入排序+希尔排序全梳理!

目录 1.排序是什么&#xff1f;1.1排序的概念1.2排序运用1.3常见的排序算法 2.插入排序分类3.直接插入排序基本思想具体步骤&#xff1a;动图演示代码实现直接插入排序的特性总结&#xff1a; 4. 希尔排序基本思想具体步骤动图演示代码实现希尔排序的特性总结&#xff1a; 5.总…

阿里云CDN流量被盗刷或CC攻击会怎么样?

最近&#xff0c;一位使用了阿里云CDN的站长向主机吧反应&#xff0c;其域名使用的阿里云CDN不知道是因为被盗刷还是被CC攻击&#xff0c;导致不仅原本帐号上的3T流量包用完了&#xff0c;连帐户也欠了几百元的流量费。 而产生这么多流量的只是晚上睡一觉起来&#xff0c;手机…

全志H616 通过Cedrus和v4l2_request API实现硬件编解码加速(香橙派zero2)

编译安装或加载cedrus驱动模块&#xff0c;加载v4l2-mem2mem Sunxi-Cedrus 致力于为全志 SoC 提供硬件加速的视频解码和编码支持&#xff0c;并将其引入主线 Linux 内核。此外&#xff0c;还为典型的基于 GNU/Linux 的系统提供了与内核驱动程序接口的其他用户空间组件。 Sunx…