线上 | OpenSergo - [规范]

news2024/11/25 23:21:06

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 完全覆盖,因此不再深入

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

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

相关文章

链表相交00

题目链接 链表相交 题目描述 注意点 题目数据保证整个链式结构中不存在环函数返回结果后&#xff0c;链表必须保持其原始结构设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案 解答思路 双指针分别指向headA和headB&#xff0c;当遍历完某个链表后&#xff0c;将指针指…

【面结构光三维重建】0.基于openCV实现相机的标定

1.标定结果 2.相机标定原理 相机标定是计算机视觉和机器视觉领域中的重要技术,用于确定相机成像的几何关系和畸变特性,以提高成像的精度和稳定性。该技术广泛应用于三维重建、机器人视觉、自动驾驶等领域。 世界坐标系:由用户定义的三维世界坐标系,描述物体和相机在真实世…

生产现场的作业标准化,这么做就对了!

制造型企业的生产过程是以计划的成本、工时生产出达到客户要求的产品。如果在制造过程中&#xff0c;产品工艺、作业方法或作业条件有所变化的话&#xff0c;一定无法生产出符合上述要求的产品。 因此&#xff0c;公司领导必须对作业工艺流程、作业方法、作业条件进行标准化管…

无缝接入GPT-4o:智创聚合API平台的创新与实践

在2024年5月13日&#xff0c;美国开放人工智能研究中心&#xff08;OpenAI&#xff09;发布了最新版本的ChatGPT——GPT-4o。这一更新标志着人工智能领域的又一重大进步&#xff0c;引起了全球科技界的广泛关注。GPT-4o的“o”代表“omni”&#xff08;全能&#xff09;&#x…

ARM-V9 RME(Realm Management Extension)系统架构之系统能力的设备隔离和保护

安全之安全(security)博客目录导读 目录 三、设备隔离和保护 1、外设隔离 2、非pe请求者(设备) 3、可编程完成端过滤器Programmable completer-side filters 4、RME设备分配 4.1 设备权限表 本博客探讨 RME 所需系统能力的设备隔离和保护&#xff0c;以保证 Arm CCA 对于…

辅导男朋友转算法岗的第2天|self Attention与kv cache

文章目录 公式KV CacheMHA、MQA、GQA 面试题为什么除以 d k \sqrt{d_k} dk​ ​Multihead的好处decoder-only模型在训练阶段和推理阶段的input有什么不同&#xff1f;手撕必背-多头注意力 公式 $ \text{Output} \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) \times …

SG7050EEN差分晶体振荡器:为5G路由器提供卓越的时钟源

随着5G技术的快速发展&#xff0c;5G路由器作为连接高速网络的重要设备&#xff0c;正迅速普及。为了确保5G路由器在高宽带和低延迟的网络环境中表现出色&#xff0c;选择一款高性能的晶体振荡器至关重要。爱普生推出的SG7050EEN差分晶体振荡器&#xff0c;以其高精度、低相位噪…

K210视觉识别模块学习笔记2:固件的下载升级_官方数字识别例程导入方法

今日开始学习K210视觉识别模块:固件的下载升级_官方数字识别例程导入方法 主要学习如何升级固件库&#xff0c;在哪下载固件库&#xff0c;以及如何在TF卡正确导入官方例程&#xff1a; 亚博智能的K210视觉识别模块...... 本次最终目的是正确导入官方的数字识别例程&#xff0…

Python 之SQLAlchemy使用详细说明

目录 1、SQLAlchemy 1.1、ORM概述 1.2、SQLAlchemy概述 1.3、SQLAlchemy的组成部分 1.4、SQLAlchemy的使用 1.4.1、安装 1.4.2、创建数据库连接 1.4.3、执行原生SQL语句 1.4.4、映射已存在的表 1.4.5、创建表 1.4.5.1、创建表的两种方式 1、使用 Table 类直接创建表…

小程序使用Canvas设置文字竖向排列

在需要使用的js页面引入js文件,传入对应参数即可 /** * 文本竖向排列 */ function drawTextVertical(context, text, x, y) {var arrText text.split();var arrWidth arrText.map(function (letter) {return 26; // 字体间距,需要自定义可以自己加参数,根据传入参数进行…

飞凌嵌入式FET3568/3568J-C核心板现已适配OpenHarmony4.1

近日&#xff0c;飞凌嵌入式为FET3568/3568J-C核心板适配了OpenHarmony4.1系统&#xff0c;新系统的加持使核心板在兼容性、稳定性与安全性等方面都得到进一步提升&#xff0c;不仅为FET3568/3568J-C核心板赋予了更强大的功能&#xff0c;也为开发者们提供了更加广阔的创新空间…

WordPress中借助Table of Contents Plus+Widget Options插件,实现仅在文章侧边栏显示文章目录的功能

本文转自博主的个人博客&#xff1a;https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接&#xff1a;点我访问 序言&#xff1a;今天心血来潮&#xff0c;写了一篇文章&#xff0c;忽然发现自己的文章极少有目录&#xff0c;这对于长文章的阅读来说是十分不利的&#…

vivado 时序约束

时间限制 以下ISE设计套件时序约束可以表示为XDC时序约束 Vivado设计套件。每个约束描述都包含一个UCF示例和 等效的XDC示例。 在未直接连接到边界的网络上创建时钟时&#xff0c;UCF和XDC不同 的设计&#xff08;如端口&#xff09;。在XDC中&#xff0c;当在上定义带有create…

微信小程序发送订阅消息

小程序后台。订阅消息里面&#xff0c;新建一个消息模板 小程序代码&#xff0c;登录后&#xff0c;弹出订阅信息 requestSubscribeMessage: function () {wx.requestSubscribeMessage({tmplIds: [-323232-32323], // 替换为你的模板IDsuccess(res) {// 用户订阅结果console.l…

【康耐视国产案例】Nvidia/算能+智能AI相机:用AI驱动 | 降低电动车成本的未来之路

受环保观念影响、政府激励措施推动与新能源技术的发展&#xff0c;消费者对电动汽车(EV)的需求正在不断增长&#xff0c;电动汽车已经成为了未来出行方式的重要组成部分。然而&#xff0c;电动汽车大规模取代燃油汽车的道路还很漫长。最大的障碍就是电动汽车的售价相对过高。尽…

day2数据结构

双链表的插入 循环链表&#xff0c;判断循环链表是否为空 指向的是自己 仅设表尾指针的循环链表合并 代码举例 删除线性表的最小值&#xff0c;并由函数返回删除的值&#xff0c;空的位置&#xff0c;由最后一个元素填补&#xff0c;若表为空显示出错信息 &L 因为L会发生…

深入理解flask规则构建与动态变量应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、Flask规则基础 1. 静态规则与动态规则 2. 规则语法与结构 三、动态变量应用…

AI作画算法原理

1.概述 AI作画算法的原理相当复杂&#xff0c;涉及多个领域的知识&#xff0c;包括计算机视觉、机器学习和神经网络等。我们从以下几个方面来描述AI作画算法的基本原理。 2. 数据准备 在数据准备方面&#xff0c;AI作画算法通常需要大量的图像数据作为训练样本。可以是各种各…

52-QSplitter类QDockWidget类

一 QSplitter类 Qt提供QSplitter(QSplitter)类来进行分裂布局&#xff0c;QSplitter派生于QFrame。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~…

【深度强化学习】如何平衡cpu和gpu来加快训练速度(实录)

文章目录 问题抛出问题展示 问题探索参考&#xff1a;如何平衡cpu和gpu来加快训练速度呢&#xff1f; 解决问题实现逻辑&#xff1a;PPO算法示例&#xff1a;偷懒改法&#xff1a;第三处修改再次修改--24.5.22 不偷懒改法修改总结1 最终成绩&#xff08;不是&#xff09;附加赛…