- 博客(138)
- 收藏
- 关注

原创 线程池的核心线程会销毁吗?
今天跟别人讨论了线程池的核心线程会不会销毁的问题先上代码public static void main(String[] args) throws InterruptedException { ThreadPoolExecutor pool = new ThreadPoolExecutor(4,10,5, TimeUnit.SECONDS,new LinkedBlockingDeque<>(20)); //pool.allowCoreThreadTimeOut(true);
2020-09-18 11:34:31
12674
2
原创 深度解析lettuce,为什么单连接也可以处理高并发redis请求
lettuce是什么?为什么被springboot 2.x作为默认reids客户端
2023-09-05 15:48:03
1761
3
原创 logback源码阅读(四) 为什么日志系统初始化了两次?bootstrapContext
bootstrap和application有什么区别
2022-07-31 21:41:10
649
1
原创 logback源码阅读(三) springboot对LoggingSystem日志系统的支持
springboot对日志loggingSystem的支持
2022-07-29 15:37:57
704
原创 logback源码阅读(二)日志打印,自定义appender,encoder,pattern,converter
日志打印,自定义appender,encoder,pattern,converter
2022-07-27 16:42:25
1346
原创 logback源码阅读(一)获取ILoggerFactory、Logger
logback源码阅读获取ILoggerFactory,Logger
2022-07-25 11:01:48
1696
原创 动态刷新日志级别
日志模块是每个项目中必须的,用来记录程序运行中的相关信息。一般在开发环境下使用DEBUG级别的日志输出,为了方便查看问题,而在线上一般都使用INFO级别的日志,主要记录业务操作的日志。那么问题来了,当线上环境出现问题希望输出DEBUG日志信息辅助排查的时候怎么办呢?修改配置文件,重新打包然后上传重启线上环境,但是这么做不优雅而且可能会破坏现场。本文介绍一种实现方案通过Apollo配置中心来实现动态调整线上日志级别。......
2022-07-18 16:36:46
1214
原创 Sentinel源码(六)ParamFlowSlot热点参数限流
Sentinel源码(三)slot解析中我们还遗留了最后一个slot,ParamFlowSlot没有讲解,本文着重探究sentinel如果做热点参数限流首先区别于其他的slot,热点参数限流并非在 Sentinel 的 core 模块中实现的,而是在扩展模块中实现的。主要是根据同一资源不同的参数进行限流。之前的限流策略都是针对资源维度的,热点参数限流则将维度细化到资源的某个参数上限流类型热点参数限是流通过对请求的第几个参数以及参数值的流量进行统计,超过阈值触发流控的一种方式sentinel提供两种
2022-02-24 13:55:45
1083
原创 无序数组排序并得到最大间隔
问题描述给定一个无序整型数组,求将其排好序后,并得出相邻两个数之间的最大差值。例如:{1,3,2,5,7,4,13}排序后{1,2,3,4,5,7,13} 那么最大间隔是6这个问题大部分人会想到先排序后遍历的解法,但是这个问题要求的时间复杂度是O(n)传统的排序并做不到解法思路一:运用计数排序的思想先求出原数组的最大值Max与最小值Min的区间长度k(k=Max-Min+1)。创建一个长度为k的新数组Array。遍历原数组,把原数组每一个元素插入到新数组Array对应的位置,比如元素的
2022-02-24 10:11:39
880
原创 Sentinel源码(五)FlowSlot以及限流控制器源码分析
在Sentinel源码(三)slot解析中,我们遗留了FlowSlot的源码还未分析,本文着重分析,如果没有读过之前文章的同学建议先去了解一下,本文对于基本知识不再阐述概要FlowSlot是插槽链的核心:结合从之前的插槽(NodeSelectorSlot、ClusterNodeBuilderSlot 和 StatisticSlot)收集的运行时统计信息,FlowSlot 将使用预先设置的规则来决定是否应该阻止传入的请求。(插槽链相关知识在本文开头有链接)通过本类我们知道:(1)如果触发任何规则,S
2022-02-20 22:03:42
618
原创 Sentinel源码(三)slot解析
回顾在Sentinel源码(二)入口方法分析中,我们遗留了插槽链相关的内容,本文将详细解析这块内容关于插槽链:在sentinel-core包下面默认提供了8个插槽连(com.alibaba.csp.sentinel.slotchain.ProcessorSlot)# Sentinel default ProcessorSlotscom.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlotcom.alibaba.csp.sentinel.s
2022-02-20 12:01:36
1103
原创 Sentinel源码(四)(滑动窗口流量统计)
在Sentinel源码(三)slot解析中,我们讲到:StatisticSlot是专用于实时统计的处理器插槽。进入这个slot时,我们需要单独统计以下信息:ClusterNode:资源ID的集群节点的总统计。OriginNode:来自不同callersorigins的集群节点的统计信息。DefaultNode:特定上下文中特定资源名称的统计信息。所有入口的总和统计。我们知道了entry方法中下面的代码是线程数和流量统计// Request passed, add thread count
2022-02-20 11:57:36
804
原创 Sentinel源码(二)入口方法分析
写在前面我们在上篇文中章已经分析了Sentinel是怎么让SentinelResource注解生效的,保留了一个疑问,每个被SentinelResource注解的方法都会在环绕通知中先调用一下如下代码entry = SphU.entry(resourceName, resourceType, entryType, pjp.getArgs()),本篇继续分析这个entry方法,分析这个方法之前,首先要了解这几个概念Resourceresource是sentinel中最重要的一个概念,sentine
2022-02-13 21:30:32
1251
原创 Sentinel源码(一)SentinelResourceAspect
本文版本:1.8.0SentinelResourceAspectSentinel是做什么的就不详细介绍了,有需要的请点击注解支持接下来就从SentinelResourceAspect开始探索Sentinel我们知道,只要在方法上加上SentinelResource,就可以配置一些限流熔断策略,那么就要看这个注解被用在源码的什么地方@Aspectpublic class SentinelResourceAspect extends AbstractSentinelAspectSupport {
2022-02-10 11:42:02
803
转载 Raft对比ZAB协议
1 leader选举为什么要进行leader选举?在实现一致性的方案,可以像base-paxos那样不需要leader选举,这种方案达成一件事情的一致性还好,面对多件事情的一致性就比较复杂了,所以通过选举出一个leader来简化实现的复杂性。1.1 一般的leader选举过程更多的有2个要素:1.1.1 选举轮次1.1.2 leader包含更多的日志1.1.1 选举投票可能会多次轮番上演,为了区分,所以需要定义你的投票是属于哪个轮次的。Raft定义了term来表示选举轮次ZooKeeper
2022-01-27 17:54:10
907
原创 Raft协议图解,缺陷以及优化
结点的状态每个结点可以有三种状态:Follower,Candidate,Leader。所有的结点都是从Follower状态开始的如果followers没有收到leader的RPC消息(心跳),则可以转换为candidate,如下图node a,Term表示任期而candidate需要发起投票,其他结点参与投票,回复他们的投票结果,如果这个candidate获得了大部分(过半)的选票,就可以成为leader结点了。这就是Leader Election过程。选举机制每个节点随机一个选举超时时间,而
2022-01-26 17:50:07
3994
2
转载 理解TCP长连接(Keepalive)
TCP Keepalive的起源TCP协议中有长连接和短连接之分。短连接环境下,数据交互完毕后,主动释放连接;长连接的环境下,进行一次数据交互后,很长一段时间内无数据交互时,客户端可能意外断电、死机、崩溃、重启,还是中间路由网络无故断开,这些TCP连接并未来得及正常释放,那么,连接的另一方并不知道对端的情况,它会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成端系统资源的消耗和浪费,且有可能导致在一个无效的数据链路层面发送业务数据,结果就是发送失败。所以服务器端要做到快速感知失败,减少无效链
2022-01-26 14:49:24
1964
原创 MySQL数据库设计规范
1. 规范背景与目的MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。2. 设计规范2.1 数据库设计以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。对于不满足【高危】和【强制
2022-01-13 16:11:02
269
转载 Pulsar与Rocketmq、Kafka、Inlong-TubeMQ,谁才是消息中间件的王者?
导语 | Pulsar作为下一代消息中间件的典型代表,在设计和实现上面都具备很好的前瞻性,综合考量了业界现存的一些比较常用的、优秀的消息中间的架构设计、适用场景、运营中的问题等,如目前用的比较多的Kafka、Rocketmq、Inlong-TubeMQ等。本文仅从设计角度出发,说明下Pulsar与Kafka、Rocketmq及腾讯开源的Inlong-TubeMQ在实现上的几点区别和可能遇到的问题,供大家参考。一、云原生多租户设计(一)分级命名Pulsar原生支持多租户设计,非常适合作为云产品进行管理。
2022-01-13 11:32:02
518
原创 ShardingSphere归并引擎了解以及打散算法的应用
什么是归并?将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端,称为结果归并。ShardingSphere 支持的结果归并从功能上分为遍历、排序、分组、分页和聚合 5 种类型,它们是组合而非互斥的关系。 从结构划分,可分为流式归并、内存归并和装饰者归并。流式归并和内存归并是互斥的,装饰者归并可以在流式归并和内存归并之上做进一步的处理。由于从数据库中返回的结果集是逐条返回的,并不需要将所有的数据一次性加载至内存中(这里指的是客户端内存,但是由于排序的需要,大量的数据仍然需要传
2022-01-05 14:52:39
968
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人