- 博客(37)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
转载 redis 数据过期策略
本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为缓存,有很多数据都是临时缓存一下,可能用过之后很久都不会再用到了(比如暂存session,又或者只存放日行情股票数据)那么就会出现一下几个问题了Redis会自己回收清理不用的数据吗?如果能,那如何配置?如果不能,如何防止数据累加后大量占用存储空间的问题? 之前一直接触Redis不...
2018-05-30 16:24:34 520
转载 redis 数据淘汰策略
转载自:《redis学习》-- 缓存淘汰策略redisredis缓存淘汰策略失效的内部实现passive way 消极方法Active Way缓存淘汰策略参考:Redis 内存淘汰机制 深入理解Redis主键失效原理及实现机制认识最大缓存在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,默认为0,没有指定最大缓存,如果有新的数据添加,超过最大内存,则会使redi...
2018-05-30 16:19:55 818 1
转载 Netty编解码框架分析
转载自:李林锋 Netty系列之Netty编解码框架分析1. 背景1.1. 编解码技术通常我们也习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输、数据持久化或者其它用途。反之,解码(Decode)/反序列化(deserialization)把从网络、磁盘等读取的字节数组还原成原始对象(通常是原始对象的拷贝),以方便后续的业务逻辑操作。进行远...
2018-05-30 15:14:47 1506 1
转载 Netty Codec框架
什么是 Codec编写一个网络应用程序需要实现某种 codec (编解码器),codec的作用就是将原始字节数据与目标程序数据格式进行互转。网络中都是以字节码的数据形式来传输数据的,codec 由两部分组成:decoder(解码器)和encoder(编码器)编码器和解码器一个字节序列转换为另一个业务对象。我们如何区分?想到一个“消息”是一个结构化的字节序列,语义为一个特定的应用程序——它的“数据”...
2018-05-30 14:55:16 3648
转载 Netty零拷贝原理实现
转载自:李林锋 Netty系列之Netty高性能之道很多用户都听说过Netty具有“零拷贝”功能,但是具体体现在哪里又说不清楚,本小节就详细对Netty的“零拷贝”功能进行讲解。Netty的“零拷贝”主要体现在如下三个方面:1) Netty的接收和发送ByteBuffer采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝。如果使用传统的堆内存(H...
2018-05-29 23:57:15 8232 2
转载 dubbo源码浅析-远程服务调用流程
转载自:dubbo源码浅析(五)-远程服务调用流程非商业转载,如造成侵权,请联系本人删除消费端调用远程服务接口时,使用上和调用普通的java接口是没有任何区别,但是服务消费者和提供者是跨JVM和主机的,客户端如何封装请求让服务端理解请求并且解析服务端返回的接口调用结果,服务端如何解析客户端的请求并且向客户端返回调用结果,这些框架是如何实现的,下面就来看下这部分的代码。 消费端调用提供端服务的过程要...
2018-05-29 17:22:49 3368
原创 Dubbo——Transport网络传输层
Transport网络传输层1请求/响应的处理流程NettyHandler:继承netty对象SimpleChannelHandler,重写了channelConnected、channelDisconnected、messageReceived、writeRequested、exceptionCaught方法,当netty的通道发生连接、断开连接、收到消息、写入消息、捕获异常等事件时触发Nett...
2018-05-29 15:02:14 690
转载 Dubbo——Exchange信息交换层
Exchange信息交换层1、Exchange层的类分析ReferenceCountExchangeClient:将请求交HeaderExchangeClient处理,不进行任何其他操作。HeaderExchangeClient:提供心跳检查功能;将send、request、close等事件转由HeaderExchangeChannel处理,HeaderExchangeChannel对象中的Cha...
2018-05-29 11:36:19 980
转载 dubbo的超时机制和重试机制
超时是针对消费端还是服务端?如果是争对消费端,那么当消费端发起一次请求后,如果在规定时间内未得到服务端的响应则直接返回超时异常,但服务端的代码依然在执行。如果是争取服务端,那么当消费端发起一次请求后,一直等待服务端的响应,服务端在方法执行到指定时间后如果未执行完,此时返回一个超时异常给到消费端。dubbo的超时是争对客户端的,由于是一种NIO模式,消费端发起请求后得到一个ResponseFuture,然后消费端一直轮询这个ResponseFuture直至超时或者收到服务端的返回结果。
2018-05-29 10:55:54 23496 1
转载 动态代理模式和cglib代理模式
Java的三种代理模式概述静态代理模式:代理类和被代理类继承同一个接口;动态代理模式:被代理类继承某个接口;cglib代理模式:被代理类无需继承接口;1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思...
2018-05-29 10:20:09 587
转载 线程池工作队列饱和策略
Java线程池会将提交的任务先置于工作队列中,在从工作队列中获取(SynchronousQueue直接由生产者提交给工作线程)。那么工作队列就有两种实现策略:无界队列和有界队列。无界队列不存在饱和的问题,但是其问题是当请求持续高负载的话,任务会无脑的加入工作队列,那么很可能导致内存等资源溢出或者耗尽。而有界队列不会带来高负载导致的内存耗尽的问题,但是有引发工作队列已满情况下,新提交的任务如何管理的...
2018-05-29 00:05:54 497
转载 dubbo暴露服务的过程解析(从proxy层到exchange、transport层)
一 概述 上个章节已经描述了dubbo发布一个服务,但具体是如何发布服务只是粗略的描述了下,这里将深入描述服务发布时怎么样开启socket监听,即启动netty服务。二 开启netty服务上一节发布服务的重点入口代码如下[java] view plain copy//通过proxyFactory对象生成接口实现类代理对象Invoker Invoker<?> invoker = ...
2018-05-28 16:16:46 886
转载 Dubbo框架设计官方文档
框架设计整体设计图例说明:图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。图...
2018-05-28 15:44:54 834
转载 Netty轻量级内存池技术实现原理与应用
转载自:Netty轻量级内存池技术实现原理与应用在Netty中,通常会有多个IO线程独立工作,基于NioEventLoop的实现,每个IO线程负责轮询单独的Selector实例来检索IO事件,当IO事件来临的时候,IO线程开始处理IO事件。最常见的IO事件即读写事件,那么这个时候就会涉及到IO线程对数据的读写问题,具体到NIO方面即从内核缓冲区读取数据到用户缓冲区或者从用户缓冲区将数据写到内核缓冲...
2018-05-28 08:21:28 301
转载 Netty线程模型
转载自:李林锋 Netty系列之Netty线程模型1. 背景1.1. Java线程模型的演进1.1.1. 单线程时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一。在Java领域当时比较流行的是单线程编程,对于CPU密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能。1.1.2. 多线程随着硬件性能的提升,CPU的核数...
2018-05-27 23:34:14 221
转载 Netty百万级推送服务设计要点
1. 背景1.1. 话题来源最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题。问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类:Netty是否可以做推送服务器?如果使用Netty开发推送服务,一个服务器最多可以支撑多少个客户端?使用Netty开发推送服务遇到的各种技术问题。由于咨询者众多,关注点也比较集中,我希望通过本文...
2018-05-27 18:05:46 352
转载 Netty in Action - Bootstrap
Bootstrap类型Bootstrap(引导) 是 Netty 中配置程序的过程,当你需要连接客户端或服务器绑定指定端口时需要使用 Bootstrap。如前面所述,Bootstrap 有两种类型,一种是用于客户端的Bootstrap,一种是用于服务端的ServerBootstrap。不管程序使用哪种协议,无论是创建一个客户端还是服务器都需要使用“引导”。面向连接 vs. 无连接请记住,这个讨论适...
2018-05-27 16:33:12 373
转载 Netty in Action -ChannelHandler和ChannelPipeline
本章主要内容ChannelChannelHandlerChannePipelineChannelHandlerContext我们在上一章研究的 bytebuf 是一个容器用来“包装”数据。在本章我们将探讨这些容器如何通过应用程序来移动,传入和传出,以及他们的内容是如何处理的。Netty 提供了应用开发的数据处理方面的强大支持。我们已经看到了channelhandler 如何链接在一起 Channe...
2018-05-27 16:17:22 371
转载 Netty in Action -ByteBuf
Buffer(缓冲)正如我们先前所指出的,网络数据的基本单位永远是 byte(字节)。Java NIO 提供 ByteBuffer 作为字节的容器,但这个类是过于复杂,有点难以使用。Netty 中 ByteBuffer 替代是 ByteBuf,一个强大的实现,解决JDK 的 API 的限制,以及为网络应用程序开发者一个更好的工具。但 ByteBuf 并不仅仅暴露操作一个字节序列的方法;这也是专门的...
2018-05-27 15:56:06 555
转载 Java NIO分析之Selector详解
1. Selector设计笔者下载得是openjdk8的源码, 画出类图比较清晰得看到,openjdk中Selector的实现是SelectorImpl,然后SelectorImpl又将职责委托给了具体的平台,比如图中框出的linux2.6以后才有的EpollSelectorImpl, Windows平台则是WindowsSelectorImpl,MacOSX平台是KQueueSelectorImpl.从名字也可以猜到,openjdk肯定在底层还是用epoll,kqueue,iocp这些.
2018-05-25 09:46:36 276
转载 java NIO Channel and buffer
Java NIO Channels are similar to streams with a few differences:You can both read and write to a Channels. Streams are typically one-way (read or write).Channels can be read and written asynchronously.Channels always read to, or write from, a Buffer.
2018-05-25 09:42:41 206
转载 AbstractQueuedSynchronizer的共享锁实现分析(以CountDownLatch为例)
前言经过本系列的上半部分JDK1.8 AbstractQueuedSynchronizer的实现分析(上)的解读,相信很多读者已经对AbstractQueuedSynchronizer(下文简称AQS)的独占功能了然于胸,那么这次我们通过对另一个工具类:CountDownLatch的分析来解读AQS的另外一个功能:共享功能。AQS共享功能的实现在开始解读AQS的共享功能前,我们再重温一下Count...
2018-05-21 23:40:37 227
原创 AbstractQueuedSynchronizer源码分析之独占锁实现
acquire()方法调用tryAcquire()方法判断同步状态是否满足,如果不满足则将线程封装成节点,加入到同步队列。加入到队列后的线程会反复阻塞,每次被唤醒后都再次调用tryAcquire()方法判断同步状态是否满足,如果仍然不满足,继续阻塞等待,直至同步状态满足为止。由于该方法忽略中断,所以在被唤醒后不会判断线程是否被中断。相对地,acquireInterruptibly()方法在被唤...
2018-05-21 23:23:20 267
转载 模板模式之spring的jdbcTemplate
转载:http://www.iteye.com/topic/713770?1306420721 最近一直在研读spring源码和学习设计模式,想把自己的一些领悟与大家分享,前几天发了几篇简单的文章,可能由于文字过于简单,几次被评为新手贴,心中滴汗啊 没办法,工作太忙,大家都知道,写篇文章是要很大精力地~~~~~ 今天恰有时间,把这两天的学习所得与大家分享,尽量写得详细一些,专家饶路走,新手觉得好...
2018-05-12 17:02:31 2940 4
转载 netty对http模型的实现
为了表示HTTP中各种消息体,netty设计了一套完整的类型定义,包括接口和实现类。由于类型比较多,部分实现类继承多个类和接口,关系有些复杂。我们按照接口先梳理一遍各个消息的基本情况,再看具体的类实现方式。HTTP接口定义基础接口我们先来看看HTTP的基本的接口定义。下图是netty中HTTP相关的6个接口的继承结构,还有他们继承的接口:先简单过一下各个接口的情况:...
2018-05-11 17:58:03 574
原创 ReentrantReadWriteLock源码分析
概述ReadWriteLockReadWriteLock持有一对锁,一个是用于读操作的readLock,一个用于写操作的writeLock。readLock是共享锁,可以被多个读线程同时持有,writeLock是独占锁。ReadWriteLock必须保证writeLock操作的内存一致性。也就是说,持有readLock的线程能看到先前writeLock释放后的所有更新。与只使用一个...
2018-05-11 15:43:52 2185
转载 HBase Catalog Tables (region定位原理)
译自: -ROOT- HBase and.META. table structure在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer。什么叫相应的RegionServer?就是管理你要操作的那个Region的RegionServer。Client本身并不知道哪个RegionServer管理哪个Regi...
2018-05-09 18:03:32 1266
原创 BIO和NIO的区别
概述BIO NIO 阻塞等待IO: 连接建立后,如果当前线程暂时没有数据可读,则当前线程会一直阻塞在 Read 操作上,造成线程资源浪费。 非阻塞IO: 当线程从某通道进行读写数据时,若没有数据可用时,该线程会去执行其他任务。线程通常将非阻塞IO的空闲时间用于在其他通道上执行IO操作,所以单独的线程可以管理多个输入和输出通道 BIO 基于字节流和字符流进行操作 NIO 基于 Channel(通道)和 Buffer(缓冲区)进行操作
2018-05-09 16:55:38 336
原创 curator2.1源码分析之LeaderLatch封装ZK主从选举
概述ZK主从选举的原理是:一组线程/进程竞争在zk的某个路径上创建临时节点,创建成功的则为主节点,其余的为从节点。LeaderLatch#start()方法判断连接是否已经建立,在连接建立后执行internalStart()方法。/** * Add this instance to the leadership election and attempt to acqu...
2018-05-09 15:31:00 777
转载 zookeeper和hbase
Client客户端、Master、Region都会通过心跳机制(RPC通信)与zookeeper保持联系。当在Hbase中插入或读取数据时流程如下;1、在Client中写一个Java类运行,客户端只需要连接zookeeper,客户端会从zookeeper中得到Regionserver的映射信息,之后客户端会直接连接到Region Server,2、RegionServer在启动之后会向zookee...
2018-05-08 17:41:11 1439 1
原创 ubuntu16.04 设置静态ip
ubuntu16.04 网卡命名 在给ubuntu的有线网卡或者无线网卡设置静态ip之前,首先我们需要了解有关网卡命名的知识。 在unbuntu16.04之后,ifconfig会发现网卡名eth0变成了enp2s0,wlan0变成了enp3s0或者类似的名称。这种改变可以参考Predictable Network Interface Names.网卡命名更换的原因如文中所说...
2018-05-08 10:34:24 21289 2
转载 HBase和Hive的区别和适用场景
一、区别:Hbase: Hadoop database 的简称,也就是基于Hadoop数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。 Hive:Hive是Hadoop数据仓库,严格来说,不是数据库,主要是让开发人员能够通过SQL来计算和处理HDFS上的结构化数据,适用于离线的批量数据计算。通过元数据来描述Hdfs上的结构化文本数据,通俗点来说,就是定义一张表来描述HDFS上的结构化文本,包括各列数据名称,数据类型是什么等,方便我
2018-05-07 17:39:19 308
转载 HBase架构解析
转载自:HBase架构解析HBase架构组成HBase采用Master/Slave架构搭建集群,它隶属于Hadoop生态系统,由一下类型节点组成:HMaster节点、HRegionServer节点、ZooKeeper集群,而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NameNode、DataNode等,总体结构如下:其中HMaster节点用于:管理HRegionServer,实现其负载...
2018-05-06 20:33:19 305
转载 hbase的负载均衡策略
1.负载均衡概述Master的LoadBalancer线程周期性的在各个RegionServer间移动region维护负载均衡1 经常被并发查询的数据不要存储在同一个RegionServer中 , 避免热点读取问题 .2 当一个机器上经过大量的插入或者删除数据以后 ,region合并或者分裂 ,那么机器上的region的数量会相差很大 .3 当新增了节点以后 , 应该去分配一些其他机器上的region数据4 当某个RegionServer宕机以后 , 这台机器上数据的分配region的执行
2018-05-06 17:25:44 2382
转载 HBase的Region分裂和合并原理
Region分裂当MemStore的数据超过阈值时,将数据溢写磁盘,生成一个StoreFile文件。当Region中最大Store的大小超过阈值时,Region分裂,等分成两个Region,实现数据访问的负载均衡。新的Region的位置由HMaster来确定在哪个RegionServer中。下面是具体的细节:1.当一个region里的StoreFile增长到大于配置的参数:hbase.hregion.max.filesize的大小,也可以在创建HBase表的时候指定这个参数,region会被一分
2018-05-06 17:18:15 1307
转载 限流的4种策略--固定窗口、滑动窗口、漏桶、令牌桶
01 Why分布式系统中,由于接口API无法控制上游调用方的行为,因此当瞬时请求量突增时,会导致服务器占用过多资源,发生响应速度降低、超时、乃至宕机,甚至引发雪崩造成整个系统不可用。限流,Rate Limiting,就是对API的请求量进行限制,对于超出限制部分的请求作出快速拒绝、快速失败、丢弃处理,以保证本服务以及下游资源系统的稳定。哪些原因会带来瞬时请求量突增?1,热点业务、突发热点数据带来的激增。例如微博热搜的爆点。2,上游系统的bug导致。3,恶意的攻击流量。实现限流的方法很多,..
2018-05-04 11:27:37 3302
原创 kafka2.2源码分析之Log日志存储
概述Log由一系列LogSegment组成,每个LogSegment都有一个base offset,表示该段中的第一条消息。新的LogSegment会根据Log的配置策略来创建。配置策略控制了LogSegment的字节大小和创建的时间间隔。成员变量dirLogSegment的创建目录。LogStartOffset可以暴露给client端的最早offset。LogSta...
2018-05-03 10:59:07 663
viewpager实现页面导航之三
2015-07-22
viewpager与预编译的点布局实现页面导航效果
2015-07-20
导入第三方类库却出现the importXXX can not be resolved
2015-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人