处理流程:
1. 在web容器启动时,通过SphFilter启动降级线程,初始化整个Sph框架。
Web.xml配置:
<filter>
<filter-name>SphFilter</filter-name>
<display-name>SphFilter</display-name>
<filter-class>com.xxxx.common.stable.SphFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SphFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
Init代码:
……
// load default conf
SphDRuntime.init(null);
if (monitor != null) {
monitor.stop();
}
monitor = newSphMonitor();
new Thread(monitor).start();
}
2. 业务代码初始化CtSph
Sph sph = new CtSph("GetBuyerLevel", 10, 50,ValveType.COUNT_AND_AVGELAPSED_VALVE_TYPE);
3. 业务代码调用CtSph.entry()
1) 判断是否被流控
if(valveType == ValveType.COUNT_VALVE_TYPE || valveType ==ValveType.COUNT_AND_AVGELAPSED_VALVE_TYPE) {
isEntry = (count.get() < countValve.get()) ? true : false;
}
比较两个AtomicInteger大小,非线程安全,高并发时会有高于阀值线程进入,作者说不用CAS是因为性能,并发数没有精确控制需求
2) 初始化ThreadLocal的entries变量,Entry的作用是保存线程的进入时间,支持可重入,同一个线程可以多次使用同一个流控组件,最多100层,用数组模拟stack
3) 如果不流控,则递增当前并发数,否,输出日志
4. 业务代码运行一段时间后,调用CsSph.release
1) Entries递减,释放掉stack(用数组模拟)上最顶层的entry,记录消耗时间,并将时间存入统计数组ConcurrentCircleArray
2) 递减当前并发数
后台降级线程SphMonitor逻辑:
1. 遍历SphDRuntime中的每个流控组件
2. 计算该组件的平均消耗时间
int aveElapsed = sph.getDetailElapsed().getArrayAvg();
3. 如果超过阀值则降级,这里有个最低并发值保证,默认为0
if (aveElapsed > sph.getAvgElpasedValve()) {
if (sph.getCountValve().get() <=sph.getLowCountValve()) {
log.info(key + "LowCountValve=" + sph.getLowCountValve());
} else {
int cv = sph.getCountValve().addAndGet(-2);
log.info(key + " decrementCountValve=" + cv + " avgElapsed=" +aveElapsed);
}
}
4. 如果没超过阀值,则恢复并发阀值
if (sph.getCountValve().get() <sph.getDefaultCountValve()) {
sph.getCountValve().set(sph.getDefaultCountValve());
log.info(key + " resetCountValve=" + sph.getDefaultCountValve());
}
分享到:
相关推荐
流控大师3.12是一款专门用于网络流量控制和管理的软件工具,它在企业网络环境中扮演着重要的角色。此版本的更新可能包含了对先前功能的优化、性能提升以及新特性的添加,以更好地满足用户对网络带宽管理和流量监控的...
COMSOL Multiphysics是一款广泛应用于工程、物理等领域的仿真软件,它能够用于模拟和分析各种物理现象。在微流控芯片研究领域,COMSOL Multiphysics通过其内置的两相流模块,可以帮助研究人员对微流控芯片内液滴的...
用户可以设置波特率、数据位、停止位、校验位以及流控选项,以适应不同的硬件设备和通信协议需求。此外,它还具有记录和回放功能,方便进行重复测试和故障排查。 SSCOM则是一款专门的串口通信软件,它的功能与串口...
本篇文章将详细介绍Wireshark的基本用法,包括如何抓取、过滤和查看网络报文,以及如何利用其IO图形工具分析数据流。 1. 下载与安装Wireshark: 首先,你需要从官方网站下载适合你操作系统的Wireshark版本,并进行...
生物芯片技术是当前生化分析领域的一项重要技术,特别是数字微流控生物芯片,因其低成本、高精度和高效能,在生化工业领域得到了广泛的应用。数字微流控生物芯片(Digital Microfluidic Biochips, 简称DMFB)主要...
问题描述:当CANoe使用OSEK_TP.DLL模拟节点接收数据时,如果接收到的数据量超过4095字节,则节点会回复过载流控帧FC.OVFLW(0x32 0x00)。那么在这种情况下应当如何处理呢? **解决方案**:在CAN传输协议(CAN TP)...
标题中的“串口调试软件.rar”表明这是一个关于串口调试工具的压缩文件,可能是某个特定的串口通信软件。在IT行业中,串口(Serial Port)是计算机硬件接口之一,常用于设备之间的通信,比如嵌入式开发、物联网设备...
当浏览器缓存了某个资源并再次请求时,可能会发送一个带有`If-Modified-Since`首部的GET请求,询问服务器资源是否在指定时间后有更新。若资源未修改,服务器会返回304状态码,告知浏览器使用本地缓存;若已修改,则...
这个说明书可能是由某个芯片或IP核供应商提供的,用于指导工程师如何在FPGA中实现和配置千兆以太网功能。 描述中的“三态千兆网”指的是在FPGA中实现的以太网接口通常包含三态输出,即能够控制信号的开、关和高阻...
非线性电路是一种不遵循欧姆定律的电路,其中的电阻元件表现出的伏安特性并非简单的线性关系。这些电阻元件的伏安特性遵循特定...这使得非线性电路的分析更加复杂,通常需要利用微分方程或者计算机辅助分析工具来求解。
在给定的"0523.obj"文件中,虽然没有具体的信息来深入分析其内容,但我们可以假设这是一个与等出力计算相关的对象文件,可能是某种性能测试工具的输出结果,或者是数据处理算法的一部分。这样的文件通常包含执行过程...
1. **配置串口参数**:程序需要允许用户设置串口的基本参数,如波特率(常见的有9600、19200、38400等)、数据位(通常为5、6、7、8位)、停止位(1或2位)、校验位(无校验、奇校验、偶校验和xon/xoff流控)等,...
8. **调试技巧**:分享如何使用调试工具(如Oscilloscope、逻辑分析仪或IDE的调试器)来验证UART通信的正确性,并解决可能出现的问题。 通过这个压缩包中的源代码和相关文档,开发者可以学习如何充分利用LPC111x的...
通过对报告的分析,我们可以优化策略,例如,如果发现某个应用占用了过多带宽,可以进一步细化限速规则,或者调整其优先级。 故障排查和维护也是Panabit实施策略的一部分。当出现网络性能下降或策略执行不当时,要...
- **Predicate(断言)**:断言用于判断请求是否应由某个路由处理。它们基于 Spring Framework 的 `org.springframework.util.PathMatcher`,支持路径、HTTP 方法、请求头等多种条件匹配。 - **Filter(过滤器)**...
- **定义**:Sleuth 是Spring Cloud生态下的链路追踪工具,能够收集并展示请求在微服务间的调用链路。 - **应用场景**: - 监控微服务调用链路,便于定位问题。 - 性能分析,识别瓶颈。 - **消息队列(RocketMQ...
为了调试和验证串口通信的效果,开发者通常会使用串口终端工具,如PuTTY或Minicom,它们可以实时显示接收到的数据,帮助我们查看和分析串口通信的正确性。 总结来说,这个“实验4 串口实验”涵盖了串口通信在嵌入式...
通过对以上内容的总结和分析,我们可以看出消息中间件在现代IT系统中的重要地位以及其为提高系统性能和可靠性所发挥的作用。无论是Kafka还是RabbitMQ,都有其独特的应用场景和技术特点,开发者可以根据具体的业务...