摘要: 编者注:Java nio 空轮询bug也就是Java nio在Linux系统下的epoll空轮询问题。 epoll机制是Linux下一种高效的IO复用方式,相较于select和poll机制来说。其高效的原因是将基于事件的fd放到内核中来完成,在内核中基于红黑树+链表数据结构来实现,链表存放有事件发生 阅读全文
posted @ 2019-11-16 18:37 luoxn28 阅读(3467) 评论(0) 推荐(0) 编辑
摘要: 编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等,针对高性能RPC,一般都是基于Netty来构建,比如soft bolt。总之一句话,Java小伙伴们需要且有必要学会使用Nett 阅读全文
posted @ 2019-11-12 08:05 luoxn28 阅读(3018) 评论(1) 推荐(1) 编辑
摘要: 编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等,针对高性能RPC,一般都是基于Netty来构建,比如soft bolt。总之一句话,Java小伙伴们需要且有必要学会使用Nett 阅读全文
posted @ 2019-11-11 23:58 luoxn28 阅读(1394) 评论(0) 推荐(0) 编辑
摘要: Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等,针对高性能RPC,一般都是基于Netty来构建,比如sock bolt。总之一句话,Java小伙伴们需要且有必要学会使用Netty并理解 阅读全文
posted @ 2019-11-07 10:57 luoxn28 阅读(16450) 评论(0) 推荐(0) 编辑
摘要: 编者注:pipeline是Redis的一个提高吞吐量的机制,适用于多key读写场景,比如同时读取多个key的value,或者更新多个key的value。工作过程中发现挺多小伙伴都对pipeline多少有些了解,但是更深入的理解或者说有哪些坑就不知道了,下面咱们就一起分析下redis pipeline 阅读全文
posted @ 2019-11-05 10:57 luoxn28 阅读(2168) 评论(0) 推荐(0) 编辑
摘要: 高并发系统设计的3个利器:缓存、限流、降级,本文就限流相关算法,分析其设计与实现。 从分布式角度来看,限流可分为 分布式限流 (比如基于Sentinel或者Redis的集群限流)和 单机限流 。从算法实现角度来看,限流算法可分为 漏桶算法 、 令牌桶算法 和 滑动时间窗口算法 。下面主要分析这3种限 阅读全文
posted @ 2019-11-04 17:35 luoxn28 阅读(4392) 评论(1) 推荐(0) 编辑
摘要: 为什么需要集群流控呢?假设需要将某个API的总qps限制在100,机器数可能为50,这时很自然的想到使用一个专门的server来统计总的调用量,其他实例与该server通信来判断是否可以调用,这就是基本的集群流控方式,sentinel的实现就是这样的。 如果服务调用使用轮训或者随机路由方式,理论上可 阅读全文
posted @ 2019-07-01 17:05 luoxn28 阅读(8952) 评论(2) 推荐(0) 编辑
摘要: sentinel的滑动窗口统计机制就是根据当前时间,获取对应的时间窗口,并更新该时间窗口中的各项统计指标(pass/block/rt等),这些指标被用来进行后续判断,比如限流、降级等;随着时间的推移,当前时间点对应的时间窗口是变化的,这时会涉及到时间窗口的初始化、复用等。可以说,sentinel上的 阅读全文
posted @ 2019-06-30 11:53 luoxn28 阅读(3087) 评论(0) 推荐(0) 编辑
摘要: 编者注:前段时间笔者在团队内部分享了sentinel原理设计与实现,主要讲解了sentinel基础概念和工作原理,工作原理部分大家听了基本都了解了,但是对于sentinel的几个概念及其之间的关系还有挺多同学有点模糊的,趁着这几天比较空,针对sentinel的几个核心概念,做了一些总结,希望能帮助一 阅读全文
posted @ 2019-06-28 08:47 luoxn28 阅读(11286) 评论(0) 推荐(0) 编辑
摘要: 从此Redis是路人 序言:Redis(Remote DIctionary Server)作为一个开源/C实现/高性能/基于内存的key-value存储系统,相信做Java的小伙伴都不会陌生。Redis常用于缓存、分布式锁、队列(或有序集合)等场景,追求技术的小伙伴们肯定不只满足于Redis的使用上 阅读全文
posted @ 2019-06-27 12:51 luoxn28 阅读(565) 评论(0) 推荐(0) 编辑
摘要: 之前同事反馈说线上遇到Redis反序列化异常问题,异常如下: 已知信息如下: 该异常不是必现的,偶尔才会出现; 出现该异常后重启应用或者过一会就好了; 序列化协议使用了hessian。 因为偶尔出现,首先看了报异常那块业务逻辑是不是有问题,看了一遍也发现什么问题。看了下对应日志,发现是在Redis读 阅读全文
posted @ 2019-06-24 11:05 luoxn28 阅读(1689) 评论(0) 推荐(0) 编辑
摘要: 前几天和朋友闲聊,说遇到了一个ConcurrentHashMap死循环问题,当时心里想这不科学呀?ConcurrentHashMap怎么还有死循环呢,毕竟它已经解决HashMap中rehash中死循环问题了,但是随着深入的分析,发现事情并没有之前想的那么简单~ (以下分析基于jdk版本:jdk1.8 阅读全文
posted @ 2019-06-22 21:27 luoxn28 阅读(1333) 评论(0) 推荐(0) 编辑
摘要: 以下ConcurrentHashMap以jdk8中为例进行分析,ConcurrentHashMap是一个线程安全、基于数组+链表(或者红黑树)的kv容器,主要特性如下: 线程安全,数组中单个slot元素个数超过8个时会将链表结构转换成红黑树,注意树节点之间还是有next指针的; 当元素个数超过N(N 阅读全文
posted @ 2019-06-22 10:26 luoxn28 阅读(1215) 评论(1) 推荐(0) 编辑
摘要: 想必很多小伙伴们对ThreadLocal并不陌生,ThreadLocal叫做线程本地变量,也就是ThreadLocal为变量在每个线程中都创建了一个副本,每个线程可以访问自己内部的副本变量。那么,我们使用ThreadLocal一定线程安全么?话不多说,先上结论: 如果threadlocal.get之 阅读全文
posted @ 2019-05-24 09:50 luoxn28 阅读(9300) 评论(1) 推荐(0) 编辑
摘要: MySQL基础概念相关的名词还是挺多的,比如3大范式、4种隔离界别、ACID、DQL、DML、DDL,还有redo、undo、binlog等,本文就统一整理下MySQL常见的基础概念,方便小伙伴们翻阅~ MySQL相关的名词概念还是挺多的,但是常用的也不多,因此将常用的统计整理下,便于回顾: DQL 阅读全文
posted @ 2019-05-20 17:21 luoxn28 阅读(608) 评论(0) 推荐(0) 编辑