北京网站名称注册证书php作品源代码免费下载

web/2025/9/28 23:16:59/文章来源:
北京网站名称注册证书,php作品源代码免费下载,最新军事动态,seo排名查询转载自 Sentinel如何使用 简介 Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard#xff0c;但是结合 Dashboard 可以取得最好的效果。 这篇文章主要介绍 Sentinel 核心库的使用。如果希望有一个最快最直接的了解#xff0c;可以参考 新手指…转载自  Sentinel如何使用 简介 Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard但是结合 Dashboard 可以取得最好的效果。 这篇文章主要介绍 Sentinel 核心库的使用。如果希望有一个最快最直接的了解可以参考 新手指南 来获取一个最直观的感受。 我们说的资源可以是任何东西服务服务里的方法甚至是一段代码。使用 Sentinel 来进行资源保护主要分为几个步骤: 定义资源定义规则检验规则是否生效 先把可能需要保护的资源定义好埋点之后再配置规则。也可以理解为只要有了资源我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候只需要考虑这个代码是否需要保护如果需要保护就将之定义为一个资源。 对于主流的框架我们提供适配只需要按照适配中的说明配置Sentinel 就会默认定义提供的服务方法等为资源。 定义资源 方式一主流框架的默认适配 为了减少开发的复杂程度我们对大部分的主流框架例如 Web Servlet、Dubbo、Spring Cloud、gRPC、Spring WebFlux、Reactor 等都做了适配。您只需要引入对应的依赖即可方便地整合 Sentinel。可以参见: 主流框架的适配。 方式二抛出异常的方式定义资源 SphU 包含了 try-catch 风格的 API。用这种方式当资源发生了限流之后会抛出 BlockException。这个时候可以捕捉异常进行限流之后的逻辑处理。示例代码如下: // 1.5.0 版本开始可以利用 try-with-resources 特性使用有限制 // 资源名可使用任意有业务语义的字符串比如方法名、接口名或其它可唯一标识的字符串。 try (Entry entry SphU.entry(resourceName)) {// 被保护的业务逻辑// do something here... } catch (BlockException ex) {// 资源访问阻止被限流或被降级// 在此处进行相应的处理操作 } 特别地若 entry 的时候传入了热点参数那么 exit 的时候也一定要带上对应的参数exit(count, args)否则可能会有统计错误。这个时候不能使用 try-with-resources 的方式。另外通过 Tracer.trace(ex) 来统计异常信息时由于 try-with-resources 语法中 catch 调用顺序的问题会导致无法正确统计异常数因此统计异常信息时也不能在 try-with-resources 的 catch 块中调用 Tracer.trace(ex)。 手动 exit 示例 Entry entry null; // 务必保证 finally 会被执行 try {// 资源名可使用任意有业务语义的字符串注意数目不能太多超过 1K超出几千请作为参数传入而不要直接作为资源名// EntryType 代表流量类型inbound/outbound其中系统规则只对 IN 类型的埋点生效entry SphU.entry(自定义资源名);// 被保护的业务逻辑// do something... } catch (BlockException ex) {// 资源访问阻止被限流或被降级// 进行相应的处理操作 } catch (Exception ex) {// 若需要配置降级规则需要通过这种方式记录业务异常Tracer.traceEntry(ex, entry); } finally {// 务必保证 exit务必保证每个 entry 与 exit 配对if (entry ! null) {entry.exit();} } 热点参数埋点示例 Entry entry null; try {// 若需要配置例外项则传入的参数只支持基本类型。// EntryType 代表流量类型其中系统规则只对 IN 类型的埋点生效// count 大多数情况都填 1代表统计为一次调用。entry SphU.entry(resourceName, EntryType.IN, 1, paramA, paramB);// Your logic here. } catch (BlockException ex) {// Handle request rejection. } finally {// 注意exit 的时候也一定要带上对应的参数否则可能会有统计错误。if (entry ! null) {entry.exit(1, paramA, paramB);} } SphU.entry() 的参数描述 参数名类型解释默认值entryTypeEntryType资源调用的流量类型是入口流量EntryType.IN还是出口流量EntryType.OUT注意系统规则只对 IN 生效EntryType.OUTcountint本次资源调用请求的 token 数目1argsObject[]传入的参数用于热点参数限流无 注意SphU.entry(xxx) 需要与 entry.exit() 方法成对出现匹配调用否则会导致调用链记录异常抛出 ErrorEntryFreeException 异常。常见的错误 自定义埋点只调用 SphU.entry()没有调用 entry.exit()顺序错误比如entry1 - entry2 - exit1 - exit2应该为 entry1 - entry2 - exit2 - exit1 方式三返回布尔值方式定义资源 SphO 提供 if-else 风格的 API。用这种方式当资源发生了限流之后会返回 false这个时候可以根据返回值进行限流之后的逻辑处理。示例代码如下: // 资源名可使用任意有业务语义的字符串if (SphO.entry(自定义资源名)) {// 务必保证finally会被执行try {/*** 被保护的业务逻辑*/} finally {SphO.exit();}} else {// 资源访问阻止被限流或被降级// 进行相应的处理操作} 注意SphO.entry(xxx) 需要与 SphO.exit()方法成对出现匹配调用位置正确否则会导致调用链记录异常抛出ErrorEntryFreeException 异常。 方式四注解方式定义资源 Sentinel 支持通过 SentinelResource 注解定义资源并配置 blockHandler 和 fallback 函数来进行限流之后的处理。示例 // 原本的业务方法. SentinelResource(blockHandler blockHandlerForGetUser) public User getUserById(String id) {throw new RuntimeException(getUserById command failed); }// blockHandler 函数原方法调用被限流/降级/系统保护的时候调用 public User blockHandlerForGetUser(String id, BlockException ex) {return new User(admin); } 注意 blockHandler 函数会在原方法被限流/降级/系统保护的时候调用而 fallback 函数会针对所有类型的异常。请注意 blockHandler 和 fallback 函数的形式要求更多指引可以参见 Sentinel 注解支持文档。 方式五异步调用支持 Sentinel 支持异步调用链路的统计。在异步调用中需要通过 SphU.asyncEntry(xxx) 方法定义资源并通常需要在异步的回调函数中调用 exit 方法。以下是一个简单的示例 try {AsyncEntry entry SphU.asyncEntry(resourceName);// 异步调用.doAsync(userId, result - {try {// 在此处处理异步调用的结果.} finally {// 在回调结束后 exit.entry.exit();}}); } catch (BlockException ex) {// Request blocked.// Handle the exception (e.g. retry or fallback). } SphU.asyncEntry(xxx) 不会影响当前调用线程的 Context因此以下两个 entry 在调用链上是平级关系处于同一层而不是嵌套关系 // 调用链类似于 // -parent // ---asyncResource // ---syncResource asyncEntry SphU.asyncEntry(asyncResource); entry SphU.entry(normalResource); 若在异步回调中需要嵌套其它的资源调用无论是 entry 还是 asyncEntry只需要借助 Sentinel 提供的上下文切换功能在对应的地方通过 ContextUtil.runOnContext(context, f) 进行 Context 变换将对应资源调用处的 Context 切换为生成的异步 Context即可维持正确的调用链路关系。示例如下 public void handleResult(String result) {Entry entry null;try {entry SphU.entry(handleResultForAsync);// Handle your result here.} catch (BlockException ex) {// Blocked for the result handler.} finally {if (entry ! null) {entry.exit();}} }public void someAsync() {try {AsyncEntry entry SphU.asyncEntry(resourceName);// Asynchronous invocation.doAsync(userId, result - {// 在异步回调中进行上下文变换通过 AsyncEntry 的 getAsyncContext 方法获取异步 ContextContextUtil.runOnContext(entry.getAsyncContext(), () - {try {// 此处嵌套正常的资源调用.handleResult(result);} finally {entry.exit();}});});} catch (BlockException ex) {// Request blocked.// Handle the exception (e.g. retry or fallback).} } 此时的调用链就类似于 -parent ---asyncInvocation -----handleResultForAsync更详细的示例可以参考 Demo 中的 AsyncEntryDemo里面包含了普通资源与异步资源之间的各种嵌套示例。 规则的种类 Sentinel 的所有规则都可以在内存态中动态地查询及修改修改之后立即生效。同时 Sentinel 也提供相关 API供您来定制自己的规则策略。 Sentinel 支持以下几种规则流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则 和 热点参数规则。 流量控制规则 (FlowRule) 流量规则的定义 重要属性 Field说明默认值resource资源名资源名是限流规则的作用对象 count限流阈值 grade限流阈值类型QPS 模式1或并发线程数模式0QPS 模式limitApp流控针对的调用来源default代表不区分调用来源strategy调用关系限流策略直接、链路、关联根据资源本身直接controlBehavior流控效果直接拒绝/WarmUp/匀速排队等待不支持按调用关系限流直接拒绝clusterMode是否集群限流否 同一个资源可以同时有多个限流规则检查规则时会依次检查。 通过代码定义流量控制规则 理解上面规则的定义之后我们可以通过调用 FlowRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则比如 private void initFlowQpsRule() {ListFlowRule rules new ArrayList();FlowRule rule new FlowRule(resourceName);// set limit qps to 20rule.setCount(20);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp(default);rules.add(rule);FlowRuleManager.loadRules(rules); } 更多详细内容可以参考 流量控制。 熔断降级规则 (DegradeRule) 熔断降级规则包含下面几个重要的属性 Field说明默认值resource资源名即规则的作用对象 grade熔断策略支持慢调用比例/异常比例/异常数策略慢调用比例count慢调用比例模式下为慢调用临界 RT超出该值计为慢调用异常比例/异常数模式下为对应的阈值 timeWindow熔断时长单位为 s minRequestAmount熔断触发的最小请求数请求数小于该值时即使异常比率超出阈值也不会熔断1.7.0 引入5statIntervalMs统计时长单位为 ms如 60*1000 代表分钟级1.8.0 引入1000 msslowRatioThreshold慢调用比例阈值仅慢调用比例模式有效1.8.0 引入  同一个资源可以同时有多个降级规则。 理解上面规则的定义之后我们可以通过调用 DegradeRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则。 private void initDegradeRule() {ListDegradeRule rules new ArrayList();DegradeRule rule new DegradeRule();rule.setResource(KEY);// set threshold RT, 10 msrule.setCount(10);rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);rule.setTimeWindow(10);rules.add(rule);DegradeRuleManager.loadRules(rules); } 更多详情可以参考 熔断降级。 系统保护规则 (SystemRule) Sentinel 系统自适应限流从整体维度对应用入口流量进行控制结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标通过自适应的流控策略让系统的入口流量和系统的负载达到一个平衡让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。 系统规则包含下面几个重要的属性 Field说明默认值highestSystemLoadload1 触发值用于触发自适应控制阶段-1 (不生效)avgRt所有入口流量的平均响应时间-1 (不生效)maxThread入口流量的最大并发数-1 (不生效)qps所有入口资源的 QPS-1 (不生效)highestCpuUsage当前系统的 CPU 使用率0.0-1.0-1 (不生效) 理解上面规则的定义之后我们可以通过调用 SystemRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则。 private void initSystemRule() {ListSystemRule rules new ArrayList();SystemRule rule new SystemRule();rule.setHighestSystemLoad(10);rules.add(rule);SystemRuleManager.loadRules(rules); } 注意系统规则只针对入口资源EntryTypeIN生效。更多详情可以参考 系统自适应保护文档。 访问控制规则 (AuthorityRule) 很多时候我们需要根据调用方来限制资源是否通过这时候可以使用 Sentinel 的访问控制黑白名单的功能。黑白名单根据资源的请求来源origin限制资源是否通过若配置白名单则只有请求来源位于白名单内时才可通过若配置黑名单则请求来源位于黑名单时不通过其余的请求通过。 授权规则即黑白名单规则AuthorityRule非常简单主要有以下配置项 resource资源名即规则的作用对象limitApp对应的黑名单/白名单不同 origin 用 , 分隔如 appA,appBstrategy限制模式AUTHORITY_WHITE 为白名单模式AUTHORITY_BLACK 为黑名单模式默认为白名单模式 更多详情可以参考 来源访问控制。 热点规则 (ParamFlowRule) 详情可以参考 热点参数限流。 查询更改规则 引入了 transport 模块后可以通过以下的 HTTP API 来获取所有已加载的规则 http://localhost:8719/getRules?typeXXXX其中typeflow 以 JSON 格式返回现有的限流规则degrade 返回现有生效的降级规则列表system 则返回系统保护规则。 获取所有热点规则 http://localhost:8719/getParamRules定制自己的持久化规则 上面的规则配置都是存在内存中的。即如果应用重启这个规则就会失效。因此我们提供了开放的接口您可以通过实现 DataSource 接口的方式来自定义规则的存储数据源。通常我们的建议有 整合动态配置系统如 ZooKeeper、Nacos、Apollo 等动态地实时刷新配置规则结合 RDBMS、NoSQL、VCS 等来实现该规则配合 Sentinel Dashboard 使用 更多详情请参考 动态规则配置。 规则生效的效果 判断限流降级异常 在 Sentinel 中所有流控降级相关的异常都是异常类 BlockException 的子类 流控异常FlowException熔断降级异常DegradeException系统保护异常SystemBlockException热点参数限流异常ParamFlowException 我们可以通过以下函数判断是否为 Sentinel 的流控降级异常 BlockException.isBlockException(Throwable t); 除了在业务代码逻辑上看到规则生效我们也可以通过下面简单的方法来校验规则生效的效果 暴露的 HTTP 接口通过运行下面命令 curl http://localhost:8719/cnode?id资源名称观察返回的数据。如果规则生效在返回的数据栏中的 block 以及 block(m) 中会有显示日志Sentinel 提供秒级的资源运行日志以及限流日志详情可以参考: 日志 block 事件 Sentinel 提供以下扩展接口可以通过 StatisticSlotCallbackRegistry 向 StatisticSlot 注册回调函数 ProcessorSlotEntryCallback: callback when resource entry passed (onPass) or blocked (onBlocked)ProcessorSlotExitCallback: callback when resource entry successfully completed (onExit) 可以利用这些回调接口来实现报警等功能实时的监控信息可以从 ClusterNode 中实时获取。 其它 API 业务异常统计 Tracer 业务异常记录类 Tracer 用于记录业务异常。相关方法 trace(Throwable e)记录业务异常非 BlockException 异常对应的资源为当前线程 context 下 entry 对应的资源。该方法必须在 SphU.entry(xxx) 成功之后且 exit 之前调用否则当前 context 为空则会抛出异常。trace(Throwable e, int count)记录业务异常非 BlockException 异常异常数目为传入的 count。该方法必须在 SphU.entry(xxx) 成功之后且 exit 之前调用否则当前 context 为空则会抛出异常。traceEntry(Throwable, int, Entry)向传入 entry 对应的资源记录业务异常非 BlockException 异常异常数目为传入的 count。 如果用户通过 SphU 或 SphO 手动定义资源则 Sentinel 不能感知上层业务的异常需要手动调用 Tracer.trace(ex) 来记录业务异常否则对应的异常不会统计到 Sentinel 异常计数中。注意不要在 try-with-resources 形式的 SphU.entry(xxx) 中使用否则会统计不上。 从 1.3.1 版本开始注解方式定义资源支持自动统计业务异常无需手动调用 Tracer.trace(ex) 来记录业务异常。Sentinel 1.3.1 以前的版本需要手动记录。 上下文工具类 ContextUtil 相关静态方法 标识进入调用链入口上下文 以下静态方法用于标识调用链路入口用于区分不同的调用链路 public static Context enter(String contextName)public static Context enter(String contextName, String origin) 其中 contextName 代表调用链路入口名称上下文名称origin 代表调用来源名称。默认调用来源为空。返回值类型为 Context即生成的调用链路上下文对象。 流控规则中若选择“流控方式”为“链路”方式则入口资源名即为上面的 contextName。 注意 ContextUtil.enter(xxx) 方法仅在调用链路入口处生效即仅在当前线程的初次调用生效后面再调用不会覆盖当前线程的调用链路直到 exit。Context 存于 ThreadLocal 中因此切换线程时可能会丢掉如果需要跨线程使用可以结合 runOnContext 方法使用。origin 数量不要太多否则内存占用会比较大。 退出调用链清空上下文 public static void exit()该方法用于退出调用链清理当前线程的上下文。 获取当前线程的调用链上下文 public static Context getContext()获取当前线程的调用链路上下文对象。 在某个调用链上下文中执行代码 public static void runOnContext(Context context, Runnable f)常用于异步调用链路中 context 的变换。 指标统计配置 Sentinel 底层采用高性能的滑动窗口数据结构来统计实时的秒级指标数据并支持对滑动窗口进行配置。主要有以下两个配置 windowIntervalMs滑动窗口的总的时间长度默认为 1000 mssampleCount滑动窗口划分的格子数目默认为 2格子越多则精度越高但是内存占用也会越多我们可以通过 SampleCountProperty 来动态地变更滑动窗口的格子数目通过 IntervalProperty 来动态地变更滑动窗口的总时间长度。注意这两个配置都是全局生效的会影响所有资源的所有指标统计。 Dashboard 详情请参考Sentinel Dashboard 文档。

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

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

相关文章

php企业网站开发框架开发公司可以顾保安

导入第三方库时出现了sdk版本不兼容问题 为我们app的module所支持的sdk最低版本与依赖module的sdk最低版本不一致 把15--》16即可

网站的营销功能百姓网个人征婚

在Java中实现记录1000万用户连续7天登录的功能,可以使用Redis的Bitmap来跟踪每个用户的登录状态。以下是一个简化的Java示例,使用了Jedis库作为Redis的Java客户端。 首先,确保你已经在项目中添加了Jedis的依赖。如果你使用Maven,…

找天津网站建设公司做个网站多少钱上海门户网

C99增加了一个新特性:指定初始化器(designated initializer)。利用该特性可以初始化指定的数组元素,也可以初始化指定的结构体变量。本文主要分享:使用指定初始化器初始化数组。例如,只初始化数组中的最后一个元素。对于传统的C初…

设计网站思路如何写周村区住房和城乡建设厅网站

跟读者建立联系【研究的艺术一】这一次李沐博士给大家精读的是一本关于论文写作的书籍。这本书总共包含四个大的章节,本期视频李沐博士介绍的是第一个章节:Research,Researchers,and Readers。 0. 前言 视频开头,李沐…

哔哩哔哩官方网站首页除了dw还有什么可以做网页

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装…

做网站后台怎么搭建网页设计与制作模块1课后答案

TextLoader用于从文本文件加载数据。您需要指定什么是数据列、它们的类型以及在文本文件中的位置。当输入文件包含许多相同类型的列(通常打算一起使用)时,我们建议从一开始就将它们作为向量列进行加载:这样,数据的架构…

高端网站改版顾问wordpress 开启rss

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在 QML 中,Path 是一种用于定义和描述路径的元素,通常需要和 Canvas、PathView、Shape 等元素结合一起使用,用于生成复杂的图形或动画效果。 所谓路径,是由一系列路径元素组成的集合,从起点开始,各段…

html5网站动态效果优质的外国网站

博主作为一名大模型开发算法工程师,很希望能够将所学到的以及实践中感悟到的内容梳理成为书籍。作为先导,以专栏的形式先整理内容,后续进行不断更新完善。希望能够构建起从理论到实践的全流程体系。 助力更多的人了解大模型,接触大模型,一起感受AI的魅力! 1.语言模型的历…

移动端快速建站中国商务商会官方网站

荒野大镖客2三星毛皮怎么获得?想必很多朋友都还不是很清楚吧,所以呢小编今天给大家带来的就是荒野大镖客2三星毛皮狩猎技巧分享,需要的朋友还不快进来看看?三星毛皮狩猎技巧分享猎物体型分水岭建议以狐狸类为例。(1)中型猎物[比狐…

营销型网站建设的特点阿里轻云wordpress

介绍 在Vue.js应用程序中,随着项目复杂度的增加,组件之间的数据共享和管理变得困难。为了解决这个问题,Vue.js提供了一个名为Vuex的状态管理模式。Vuex可以帮助我们更有效地组织、管理和共享应用程序的状态。 什么是Vuex? Vuex…

网站制作的基本流程做解析会员电影的网站

基于C语言的几种排序方法比较.doc基于C语言的几种排序方法比较 【摘要】文章对c语言中的冒泡排序法、选择排序法、插入排序法进行比较讨论,以试图找出最佳排序方法。 【关键词】c语言;排序方法;比较 引言 排序是计算机程序设计中的一种重要操作,其作用是…

怎么做网站的外部连接制作网页时一般需要兼容哪些浏览器

目录 1.核心术语:2.强关联规则:小结: 1.核心术语: 支持度(Support):指项集出现的频繁程度(相当于项集出现的概率) 最小支持度有绝对值和占比两种表示方式 置信度&#…

萧山建设局网站首页做网站维护需要学什么

【机械视觉】C#VisionPro联合编程———【六、visionPro连接工业相机设备】 目录 【机械视觉】C#VisionPro联合编程———【六、visionPro连接工业相机设备】 前言: 连接步骤说明 一. 硬件连接 支持的相机接口类型: 连接步骤 2. 软件配置 Visio…

建设个人博客网站制作沈阳高端网页

HTTP(Hypertext Transfer Protocol,超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。这个简单模型是早期Web成功的有功之臣,因为它…

opencart做视频网站群晖中使用wordpress

.Net FrameWork总结 介绍.Net公共语言运行库CLI的组成.NET Framework的主要组成.NET Framework的优点CLR在运行期管理程序的执行,包括以下内容CLR提供的服务FCL的组成 或 服务(这个其实就是我们编码时常用到的类库):(下…

前端做学校网站教务做网站运营工作有前景吗

每一个行业的从业人员都会有变老的那一刻,难道变老了之后还要继续从事之前的工作吗?估计没人愿意,除非是体力上吃得消的。接下来所讲述的就是作为程序员的码农们该如何迎接慢慢变老之后的工作转变!人们都会期望随着岁数的增加&…

seo sem 做网站佛山关键词排名效果

本篇文章详细教你如何使用 Apifox 的 IDEA 插件实现自动生成接口代码。好处简单总结有以下几点: 自动生成接口文档: 不用手写,一键点击就可以自动 生成文档,当有更新时,点击一下就可以自动同步接口文档;代…

购物网站的策划免费做网站推广的软件

和 DISCUZ 不同,DISCUZ 可以允许分类下面还有分类,再继续分类这种嵌套式分类。 Discourse 最多只允许有 2 个分类。 如果你在已有的分类下再继续分类的话,系统会提示错误: 意思就是子分类不能再分子分类。 Discourse 尽量采取了…

网站规划文案如何做学校的网站设计

Java Map性能有很多方面可以衡量,但是关键的一个是简单的单线程扫描。 这是一些针对Iterators和Java 8 Map.forEach()简单测试代码,以及一些图形结果。 1.性能测试困难 性能测试是一项非常困难的工作,精确的可重复测试需要Java微基准测试线束…