自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 prometheus怎么存储数据的

PrometheusTime Series时序数据库,跟着一个时间轴往前走Data schemeidentifier -> (t0,v0),(t1,v1),(t2,v2),(t3,v3),…Prometheus Data Model{=,…}Typical set of series identifiersQuery_ name_=“requests_total” selects all series belonging to the requests_t

2022-05-22 17:48:05 652

原创 Prometheus TSDB

TSDB 概述:Head: 数据库的内存部分Block: 磁盘上持久块,是不变的WAL: 预写日志系统M-map: 磁盘及内存映射粉红色框是传入的样品,样品先进入Head中存留一会,然后到磁盘、内存映射中(蓝色框)。然后当内存映射块时间长到某点,就会作为持久块存在硬盘上,进一步一个个合并。超出保留时间就会被删除。Head的生命周期(这里讨论的都是基于一个time series,同样适用于其他time series)当样品存入时,chunk变活跃,红色块是我们唯一可以主动编写数据的单位

2021-11-08 08:01:00 1699

原创 jdk1.8 ConcurrentHashMap

jdk1.8的ConcurrentHashMap的实现中,构造方法主要是对内部的大小进行设置。public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) { if (!(loadFactor > 0.0f) || initialCapacity < 0 || concurrencyLevel <= 0)

2020-11-28 14:17:21 420

原创 ReentrantLock源码

昨天ConcurrentHashMap中内部类分段锁segment直接继承ReentrantLock类,今天康康ReentrantLock。ReentrantLock类构造方法及成员:private final Sync sync; public ReentrantLock() { sync = new NonfairSync();} public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new

2020-11-27 20:44:58 139

原创 jdk1.7 ConcurrentHashMap源码

ConcurrentHashMap类的成员:static final int DEFAULT_INITIAL_CAPACITY = 16; //默认的map的容量static final float DEFAULT_LOAD_FACTOR = 0.75f; //默认负载因子static final int DEFAULT_CONCURRENCY_LEVEL = 16; //默认分段锁数量static final int MAXIMUM_CAPACITY = 1 << 30; //

2020-11-26 20:46:23 371 2

原创 Dubbo之Zookeeper客户端

百度:" ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper包含一个...

2020-04-30 23:08:58 449

原创 Dubbo服务引用(二)远程引用

上篇本地,这篇远程。createProxy(map) 方法中,涉及远程引用服务:/** * 服务引用 URL 数组 */private final List<URL> urls = new ArrayList<URL>();/** * 直连服务地址 * * 1. 可以是注册中心,也可以是服务提供者 * 2. 可配置多个,使用 ; 分隔 */// ur...

2020-04-17 22:07:38 3209

原创 Dubbo服务引用(一)本地引用

哈哈哈和服务暴露一样,也有两种:本地引用,jvm本地调用:// 推荐<dubbo:service scope="local" />// 不推荐使用,准备废弃<dubbo:service injvm="true" />远程暴露,网络远程通信:<dubbo:service scope="remote" />这篇看看本地引用。在Ref...

2020-04-17 20:04:28 1103

原创 Dubbo服务暴露(二)之远程暴露

相比本地暴露,远程暴露会多做如下几件事情:启动通信服务器,绑定服务端口,提供远程调用。向注册中心注册服务提供者,提供服务消费者从注册中心发现服务。上次分享本地暴露,该方式仅使用 Injvm 协议实现,具体代码在 dubbo-rpc-injvm 模块中。这篇分享远程暴露,该方式有多种协议实现,例如 Dubbo ( 默认协议 )、Hessian 、Rest 等等。doExportUrls...

2020-04-14 20:51:02 591

原创 Dubbo服务暴露(一)之本地暴露

Dubbo 服务暴露有两种方式:本地暴露:JVM 本地调用。配置如下<dubbo:service scope="local" />远程暴露:网络远程通信。配置如下<dubbo:service scope="remote" />不暴露:<dubbo:service scope="none" />不配置scope的情况下,默认两种方式...

2020-04-13 20:48:37 535

原创 Dubbo之线程池

Dubbo中提供了三种线程池的实现:fixed 固定大小线程池,启动时建立线程不关闭,一直持有。cached 缓存线程池,空闲一分钟自动删除,需要时重建。limited 可伸缩线程池,但池中的线程数只会增长不会收缩。只增长不收缩的目的是为了避免收缩时突然来了大流量引起的性能问题。ThreadPool ,线程池接口:@SPI(“fixed”) 注解,Dubbo SPI 拓展点,默认为 ...

2020-04-11 21:00:42 467

原创 Dubbo之拓展机制 SPI(二)

getAdaptiveExtension() 方法,获得自适应拓展对象:/** * 缓存的自适应( Adaptive )拓展对象 */private final Holder<Object> cachedAdaptiveInstance = new Holder<Object>();/** * 创建 {@link #cachedAdaptiveInstance...

2020-04-08 17:26:28 130

原创 Dubbo之拓展机制 SPI(一)

SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。Dubbo 改进了 JDK 标准的 SPI 的一些问题:JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。如果扩展点加载失败...

2020-04-08 17:26:03 155

原创 Netty之Jemalloc(四)PoolArena

PoolArena ,实现 PoolArenaMetric 接口,Netty 对 Jemalloc Arena 的抽象实现类,PoolArena 有两个子类实现:HeapArena ,对 Heap 类型的内存分配。DirectArena ,对 Direct 类型的内存分配。构造方法:/** * 是否支持 Unsafe 操作 */static final boolean HAS_U...

2020-04-02 22:02:04 370

原创 Netty之Jemalloc(三)PoolChunkList

PoolChunk 有如下三个属性,通过 prev 和 next 两个属性,形成一个双向 Chunk 链表 parent( PoolChunkList ):/** * 所属 PoolChunkList 对象 */PoolChunkList<T> parent;/** * 上一个 Chunk 对象 */PoolChunk<T> prev;/** * 下一个...

2020-04-02 20:10:14 124

原创 Netty之Jemalloc(二)PoolSubpage

上次讲Jemalloc 算法将每个 Chunk 切分成多个小块 Page,但是Page还是较大的内存块,所以直接使用仍旧浪费。因此,Jemalloc 算法将每个 Page 更进一步的切分为多个 Subpage 内存块。Page 切分成多个 Subpage 内存块,直接基于数组,通过数组来标记每个 Subpage 内存块是否已经分配,这里用PoolSubpage解决这个问题。一个page切分成多个...

2020-04-02 17:53:59 135

原创 Netty之Jemalloc(一)PoolChunk

之前写ByteBufAllocator文章里提到过Jemalloc算法,Netty中的内存池管理。Jemalloc算法将每个Arena切割成多个小块Chunk,为了进一步提高内存分配效率,并且减少内存碎片,再将Chunk切割为多个小块Page。Page 的大小为:16MB / 2048 = 8KB 。page-是可以分配的内存块的最小单位chunk-是一堆page的集合...

2020-03-31 19:27:20 299

原创 Netty之Buffer(四)ByteBufAllocator

这会看ByteBufAllocator最后一个子类:UnpooledByteBufAllocator,不基于内存池的ByteBuf分配器。

2020-03-26 21:31:55 357

原创 Netty之Buffer(三)ByteBufAllocator

这次看PooledByteBufAllocator基于内存池的 ByteBuf 的分配器。而 PooledByteBufAllocator 的内存池,是基于 Jemalloc 算法进行分配管理。Netty中JemallocPooledByteBufAllocatorMetric,实现 ByteBufAllocatorMetric 接口,PooledByteBufAllocator Metric...

2020-03-24 22:04:11 786

原创 Netty之Buffer(二)ByteBufAllocator

ByteBufAllocator是ByteBuf的分配器,负责创建ByteBuf对象,他主要有三个子类:PreferHeapByteBufAllocator ,倾向创建 Heap ByteBuf 的分配器。PooledByteBufAllocator ,基于内存池的 ByteBuf 的分配器。UnpooledByteBufAllocator ,普通的 ByteBuf 的分配器。这里先看P...

2020-03-23 21:39:56 659

原创 Netty之Buffer(一)ByteBuf内存泄漏检测2

io.netty.util.ResourceLeakTracker ,内存泄露追踪器接口,上文知每个资源( 例如:ByteBuf 对象 ),会创建一个追踪它是否内存泄露的 ResourceLeakTracker 对象,接口方法定义:public interface ResourceLeakTracker<T> { /** * 记录 * * R...

2020-03-19 19:37:34 680

原创 Netty之Buffer(一)ByteBuf内存泄漏检测1

Netty channel看完看Buffer。自从 Netty 4 开始,对象的生命周期由它们的引用计数( reference counts )管理,而不是由垃圾收集器( garbage collector )管理了。ByteBuf 是最值得注意的,它使用了引用计数来改进分配内存和释放内存的性能。–Netty官方文档翻译引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、内存...

2020-03-19 19:37:09 1371

原创 Netty之Channel(五)disconnect操作

java原生NIO SocketChannel不存在,调用Netty NioSocketChannel的disconnect(ChannelPromise promise) 时,会自动转换成close操作。所以嘞,Channel中disconnect(ChannelPromise promise) 方法,是 Netty 为 UDP 设计的。通过 NioSocketChannel中disconn...

2020-03-17 19:18:47 2372

原创 Netty之Channel(四)close操作

emm出现点状况,先看close。关闭操作,可能是客户端/服务端主动关闭,也可能是异常关闭。Netty NIO Channel的close操作分成客户端和服务端Channel两种关闭。客户端关闭NioSocketChannel,断开和服务器的连接;服务端关闭NioSocketChannel,断开和客户端的连接。服务端关闭NioServerSocketChannel,取消端口绑定,关...

2020-03-16 20:40:09 10511 1

原创 Netty之Channel(三)flush操作

flush()方法,刷新内存队列,将数据写入到对端。flush()方法和write()方法在正常情况下,流程差不多,例如在pipeline中对事件的传播,从tail节点传播到head节点,最后由Unsafe处理。然而两者Unsafe的处理方式不同。write方法将数据写到内存队列中。flush方法刷新内存队列,将其中数据写入对端。(还有些差异后文提)AbstractChannel 对 f...

2020-03-15 19:36:38 3436

原创 Netty之Channel(二)write操作

在原生的java Nio SocketChannel只有一种write方法,将数据写到对端,关于Netty NioSocketChannel 写入对端数据的过程,和写入相关的,在Netty Channel中有三种api方法:ChannelFuture write(Object msg)ChannelFuture write(Object msg, ChannelPromise promise...

2020-03-13 18:58:58 2277

原创 Netty之Channel(一)read与accept操作

关于Netty NIO服务器读取(read)、接收(accept)客户端数据的过程,以及Netty NIO客户端接收(read)服务器端数据结果这三点分析。客户端中,自身使用Netty NioSocketChannel,...

2020-03-04 23:29:07 1774

原创 Netty之ChannelPipeline(三)Outbound与Inbound事件的传播

Outbound事件是请求事件。Outbound事件的发起者是Channel,处理者是Unsafe。Outbound事件在Pipeline中传输方向是tail -> head。Outbount事件其中之一bind,以bind为例:AbstractChannelbind(SocketAddress localAddress, ChannelPromise promise):@O...

2020-02-11 00:06:54 787

原创 Netty之ChannelPipeline(二)移除ChannelHandler

上次说了添加,这次看看移除。remove(ChannelHandler handler)方法,从pipeline移除指定ChannelHandler对象@Overridepublic final ChannelPipeline remove(ChannelHandler handler) { remove(getContextOrDie(handler)); return t...

2020-02-04 21:30:43 1114

原创 Netty之ChannelPipeline(一)添加ChannelHandler

在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应,而每个ChannelPipeline中又维护了一个由ChannelHandlerContext组成的双向链表,链表头是HeadContext,链表尾是TailContext,并且每个ChannelHandlerContext中又关联着一个ChannelHandler,如图示:...

2020-01-30 19:30:21 931

原创 3. Java NIO之Selector如何实现(三)

Selector默认是WindowsSelectorImpl的一个实例,当调用了SelectorImpl的select()方法的时候,调用selector(timeout),之后会调用lockAndDoSelect(),在这个方法中,主要调用了doSelect()方法,参数与传进来的一致,以WindowsSelectorImpl为例子,实现的doSelect()方法。 protected...

2020-01-28 18:20:58 219

原创 3. Java NIO之Selector如何实现(二)

Selector创建完毕,紧接着

2020-01-28 18:20:44 123

原创 3. Java NIO之Selector如何实现(一)

Netty中NioEventLoop对于线程的run()方法的实现,是真正对于Selector的轮询操作。Selector选择器,Selector是java nio 核心组件之一,用于轮询一个或多个NIO Channel的状态是否处于可读、可写。如此,一个线程就可以管理多个Channel,即就是可以管理多个网络连接。因此,Selector也称为多路复用器。Selector是如何轮询的?首...

2020-01-15 18:24:43 403

原创 2.Java NIO之Selector使用方法简介

前言在之前文章1. Java NIO三大部件概述中简单提及Selector概念、优缺点以及Netty中对其的优化,在这篇文章将对Selector的使用方法进行简单介绍。1. Selector创建Selector selector = Selector.open();2. 注册Channel到SelectorSelector要能够管理Channel,需要将Channel注册到Select...

2020-01-01 20:11:19 516

原创 Netty之NioEventLoop的run方法

hhhEventLoop

2019-12-29 20:16:24 452

原创 HashMap源码分析之另外一部分数据操作相关方法

删除数据public V remove(Object key)final Node<K,V> removeNode(int hash, Object key, Object value, boolean matchValue, boolean movable)/** * Removes the mapping for the specified key from thi...

2019-12-18 20:45:55 134

原创 HashMap源码分析之构造函数及部分数据操作相关方法

“在介绍HashMap之前,为了方便更清楚地理解源码,先大致说说HashMap的实现原理, HashMap 是基于数组 + 链表实现的, 首先HashMap就是一个大数组,在这个数组中,通过hash值去寻对应位置的元素, 如果遇到多个元素的hash值一样,那么怎么保存,这就引入了链表,在同一个hash的位置,保存多个元素(通过链表关联起来)。HashMap 所实现的基于<key, val...

2019-12-17 20:45:57 174

原创 netty之NioEventLoopGroup和NioEventLoop

Netty实战抠的图,说明了Channel、EventLoop、Thread以及EventLoopGroup之间的关系。一个EventLoopGroup包含一个或多个EventLoop一个EventLoop在他的生命周期内之和一个Thread绑定所以由EventLoop处理的I/O事件都将在他专有的Thread上被处理一个Channel在他的生命周期内只注册于一个EventLoop一...

2019-12-15 21:10:45 301

原创 1. Java NIO三大部件概述

Netty是什么?Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化...

2019-12-11 15:19:22 249

原创 Netty的demo概述

https://baike.baidu.com/item/Netty/10061624?fr=aladdin百度百科:“Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty ...

2019-11-03 20:33:43 242

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除