Netty源码死磕(ChannelPipeline的执行过程)

引言上文有提到如果Selector轮询到网络IO事件了,则会调用该Channel对应的ChannelPipeline来依次执行对应的ChannelHandler。 ChannelPipeline和ChannelHandler的关系那么这里的ChannelPipeline和ChannelHandler之间到底是什么关系呢?其实我们可以理解为类似于一个过滤器模式,其中ChannelPipeline是一个存放各种过滤器的管道容器,而ChannelHandler则对应着单个过滤器实体 执行流程我...

阅读全文

Netty源码死磕二(Netty的启动流程)

引言上一篇文章介绍了Netty的线程模型及EventLoop机制,相信大家对Netty已经有一个基本的认识。那么本篇文章我会根据Netty提供的Demo来分析一下Netty启动流程。 启动流程概览开始之前,我们先来分析下Netty服务端的启动流程,下面是一个简单的流程图 启动流程大致分为五步 创建ServerBootstrap实例,ServerBootstrap是Netty服务端的启动辅助类,其存在意义在于其整合了Netty可以提供的所有能力,并且尽可能的进行了封装,以方便我们使用 设置...

阅读全文

Netty源码死磕一(netty线程模型及EventLoop机制)

引言好久没有写博客了,近期准备把Netty源码啃一遍。在这之前本想直接看源码,但是看到后面发现其实效率不高,有些概念还是有必要回头再细啃的,特别是其线程模型以及EventLoop的概念。 当然在开始之前还是有务必要对IO模型要有清晰准确的认识。 传送门 事件循环机制(EventLoop)Netty线程模型中一个非常重要的概念: 事件循环机制(EventLoop)这个概念在JS上体现的也非常淋漓尽致,下面在开始介绍netty的线程模型之前,允许我简单的介绍下事件循环机制在JS中的体现 J...

阅读全文

Sentinel源码解析四(流控策略和流控效果)

引言在分析Sentinel的上一篇文章中,我们知道了它是基于滑动窗口做的流量统计,那么在当我们能够根据流量统计算法拿到流量的实时数据后,下一步要做的事情自然就是基于这些数据做流控。在介绍Sentinel的流控模型之前,我们先来简单看下 Sentinel 后台是如何去定义一个流控规则的 对于上图的配置Sentinel把它抽象成一个FlowRule类,与其属性一一对应 resource 资源名 limitApp 限流来源,默认为default不区分来源 grade 限流类型,有QPS...

阅读全文

自定义maven脚手架

写在前面开发新项目就需要搭建新工程,但是搭建新工程的这个过程是非常繁琐浪费时间的,并且不可避免的需要踩坑。更可怕的是,如果是在一个团队中,每新起一个项目都由不同的开发人员去自定义的搭建工程结构,那么对后续的统一管理,监控,运维简直是灾难。基于以上几点,团队内部其实是非常有必要搭建一个统一的脚手架来供统一使用 制作一个脚手架下面我们就来详细的介绍如何搭建一个maven工程的脚手架 要搭建脚手架,首先我们需要一个模板工程,这个模板工程一般来说会集成一些工具类,底层中间件,通用配置,并且要有良好...

阅读全文

Sentinel源码解析三(滑动窗口流量统计)

前言Sentinel的核心功能之一是流量统计,例如我们常用的指标QPS,当前线程数等。上一篇文章中我们已经大致提到了提供数据统计功能的Slot(StatisticSlot),StatisticSlot在Sentinel的整个体系中扮演了一个非常重要的角色,后续的一系列操作(限流,熔断)等都依赖于StatisticSlot所统计出的数据。 本文所要讨论的重点就是StatisticSlot是如何做的流量统计? 其实在之前介绍常用限流算法常用限流算法的时候已经有提到过一个算法滑动窗口限流,该算法...

阅读全文

Sentinel源码解析二(slot总览)

写在前面本文继续来分析Sentinel的源码,上篇文章对Sentinel的调用过程做了深入分析,主要涉及到了两个概念:插槽链和Node节点。那么接下来我们就根据插槽链的调用关系来依次分析每个插槽(slot)的源码。 默认插槽链的调用顺序,以及每种类型Node节点的关系都在上面文章开头分析过 NodeSelectorSlot123456789101112131415161718192021222324252627282930/** * 相同的资源但是Context不同,分别新建 Defau...

阅读全文

Sentinel源码解析一

引言Sentinel作为ali开源的一款轻量级流控框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。相比于Hystrix,Sentinel的设计更加简单,在 Sentinel中资源定义和规则配置是分离的,也就是说用户可以先通过Sentinel API给对应的业务逻辑定义资源(埋点),然后在需要的时候再配置规则,通过这种组合方式,极大的增加了Sentinel流控的灵活性。 引入Sentinel带来的性能损耗非常小。只有在业务单机量级超过25W ...

阅读全文

浅谈常用的限流算法

引言在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。今天我们要聊的就是限流(Rate Limit),限流的目的很简单,就是为了保护系统不被瞬时大流量冲垮,限流这个概念我其实很早之前就有去了解过,不过无奈之前工作所接触业务的并发量实在是谈不上限流。目前公司大促峰值QPS在2w往上,自然而然需要用到限流,特别是类似秒杀这种瞬时流量非常大但实际成单率低的业务场景。 目前比较常用的限流算法有三种 计数器固定窗口算法 计数器滑动窗口算法 漏桶算法 令牌桶算法 计数器固定窗口算法计数器...

阅读全文

JAVA中时间的表现形式

引言大多数时候我们在表示时间的概念时,可能并不会去特意关注时区这个概念,毕竟在国内时区都是统一的,我们只需要使用默认时区 北京时间 就可以了。是的,在写这篇文章之前,我也没有过多的去关注时区的概念,以及在JAVA中的表现形式。但是因为目前所在的公司是跨境公司,公司主要业务在印度,印度时间跟北京时间显然是不同的。 时区的概念在这之前先说一下时区的概念,以及解释几个专有名词。时区是地球上的区域使用同一个时间定义,整个全球被分成24个时区。所以每差一个时区,区时相差一个小时,相差多少个时区,就相...

阅读全文


Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2020 王俊男的技术杂谈 All Rights Reserved.

访客数 : | 访问量 :