摘要:本文主要讨论Netty NioEventLoop原理及实践,关于Netty NioEventLoop,首先要知道NioEventLoop是什么,为什么它会是Netty核心Reactor处理器,实现原理是什么,进而再讨论Netty对其的实现及使用上我们可以学到哪些。 EventLoop是一个React 阅读全文
posted @ 2019-12-01 10:25 luoxn28 阅读 (86) 评论 (1) 编辑
摘要:Pipeline和ChannelHandler是Netty处理流程的重要组成部分,ChannelHandler对应一个个业务处理器,Pipeline则是负责将各个ChannelHandler串起来的“容器”,二者结合起来一起完成Netty的处理流程。 Pipeline 每个channel内部都会持有 阅读全文
posted @ 2019-11-30 19:54 luoxn28 阅读 (81) 评论 (0) 编辑
摘要:编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等。本文就netty线程模型展开分析讨论下 : ) IO模型 BIO:同步阻塞IO模型; NIO:基于IO多路复用技术的“非阻塞同步 阅读全文
posted @ 2019-11-17 08:51 luoxn28 阅读 (183) 评论 (0) 编辑
摘要:编者注:Java nio 空轮询bug也就是Java nio在Linux系统下的epoll空轮询问题。 epoll机制是Linux下一种高效的IO复用方式,相较于select和poll机制来说。其高效的原因是将基于事件的fd放到内核中来完成,在内核中基于红黑树+链表数据结构来实现,链表存放有事件发生 阅读全文
posted @ 2019-11-16 18:37 luoxn28 阅读 (147) 评论 (0) 编辑
摘要:编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等,针对高性能RPC,一般都是基于Netty来构建,比如soft bolt。总之一句话,Java小伙伴们需要且有必要学会使用Nett 阅读全文
posted @ 2019-11-12 08:05 luoxn28 阅读 (194) 评论 (0) 编辑
摘要:编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等,针对高性能RPC,一般都是基于Netty来构建,比如soft bolt。总之一句话,Java小伙伴们需要且有必要学会使用Nett 阅读全文
posted @ 2019-11-11 23:58 luoxn28 阅读 (193) 评论 (0) 编辑
摘要:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等,针对高性能RPC,一般都是基于Netty来构建,比如sock bolt。总之一句话,Java小伙伴们需要且有必要学会使用Netty并理解 阅读全文
posted @ 2019-11-07 10:57 luoxn28 阅读 (299) 评论 (0) 编辑
摘要:编者注:pipeline是Redis的一个提高吞吐量的机制,适用于多key读写场景,比如同时读取多个key的value,或者更新多个key的value。工作过程中发现挺多小伙伴都对pipeline多少有些了解,但是更深入的理解或者说有哪些坑就不知道了,下面咱们就一起分析下redis pipeline 阅读全文
posted @ 2019-11-05 10:57 luoxn28 阅读 (216) 评论 (0) 编辑
摘要:高并发系统设计的3个利器:缓存、限流、降级,本文就限流相关算法,分析其设计与实现。 从分布式角度来看,限流可分为 分布式限流 (比如基于Sentinel或者Redis的集群限流)和 单机限流 。从算法实现角度来看,限流算法可分为 漏桶算法 、 令牌桶算法 和 滑动时间窗口算法 。下面主要分析这3种限 阅读全文
posted @ 2019-11-04 17:35 luoxn28 阅读 (373) 评论 (0) 编辑
摘要:为什么需要集群流控呢?假设需要将某个API的总qps限制在100,机器数可能为50,这时很自然的想到使用一个专门的server来统计总的调用量,其他实例与该server通信来判断是否可以调用,这就是基本的集群流控方式,sentinel的实现就是这样的。 如果服务调用使用轮训或者随机路由方式,理论上可 阅读全文
posted @ 2019-07-01 17:05 luoxn28 阅读 (915) 评论 (1) 编辑
摘要:sentinel的滑动窗口统计机制就是根据当前时间,获取对应的时间窗口,并更新该时间窗口中的各项统计指标(pass/block/rt等),这些指标被用来进行后续判断,比如限流、降级等;随着时间的推移,当前时间点对应的时间窗口是变化的,这时会涉及到时间窗口的初始化、复用等。可以说,sentinel上的 阅读全文
posted @ 2019-06-30 11:53 luoxn28 阅读 (343) 评论 (0) 编辑
摘要:编者注:前段时间笔者在团队内部分享了sentinel原理设计与实现,主要讲解了sentinel基础概念和工作原理,工作原理部分大家听了基本都了解了,但是对于sentinel的几个概念及其之间的关系还有挺多同学有点模糊的,趁着这几天比较空,针对sentinel的几个核心概念,做了一些总结,希望能帮助一 阅读全文
posted @ 2019-06-28 08:47 luoxn28 阅读 (400) 评论 (0) 编辑
摘要:从此Redis是路人 序言:Redis(Remote DIctionary Server)作为一个开源/C实现/高性能/基于内存的key-value存储系统,相信做Java的小伙伴都不会陌生。Redis常用于缓存、分布式锁、队列(或有序集合)等场景,追求技术的小伙伴们肯定不只满足于Redis的使用上 阅读全文
posted @ 2019-06-27 12:51 luoxn28 阅读 (270) 评论 (0) 编辑
摘要:之前同事反馈说线上遇到Redis反序列化异常问题,异常如下: 已知信息如下: 该异常不是必现的,偶尔才会出现; 出现该异常后重启应用或者过一会就好了; 序列化协议使用了hessian。 因为偶尔出现,首先看了报异常那块业务逻辑是不是有问题,看了一遍也发现什么问题。看了下对应日志,发现是在Redis读 阅读全文
posted @ 2019-06-24 11:05 luoxn28 阅读 (605) 评论 (0) 编辑
摘要:前几天和朋友闲聊,说遇到了一个ConcurrentHashMap死循环问题,当时心里想这不科学呀?ConcurrentHashMap怎么还有死循环呢,毕竟它已经解决HashMap中rehash中死循环问题了,但是随着深入的分析,发现事情并没有之前想的那么简单~ (以下分析基于jdk版本:jdk1.8 阅读全文
posted @ 2019-06-22 21:27 luoxn28 阅读 (429) 评论 (0) 编辑