- 博客(72)
- 资源 (2)
- 收藏
- 关注
转载 dubbo源码分析(二):超时原理以及应用场景
dubbo源码分析(二):超时原理以及应用场景本篇主要记录dubbo中关于超时的常见问题,实现原理,解决的问题以及如何在服务降级中体现作用等。超时问题为了检查对dubbo超时的理解,尝试回答如下几个问题,如果回答不上来或者不确定那么说明此处需要再多研究研究。我只是针对个人的理解提问题,并不代表我理解的就是全面深入的,但我的问题如果也回答不了,那至少说明理解的确是
2017-12-22 15:51:09
578
原创 TBSchedule源码学习笔记-任务处理
上回说到每个线程组会创建自己的com.taobao.pamirs.schedule.taskmanager.TBScheduleManager实例来管理线程组,一个JVM中该实例的个数与结合调度机数目分配給JVM的数目一致。TBScheduleManager实例中会计算调度任务的启动时机(与控制台界面设置保持一致)。实际开发一个调度任务按框架要求需要实现com.taobao.pamirs.sched
2017-12-11 16:27:45
955
原创 TBSchedule源码学习笔记-线程组任务调度
根据上文的启动过程,找到了线程组的实现。com.taobao.pamirs.schedule.taskmanager.TBScheduleManager/** * 1、任务调度分配器的目标: 让所有的任务不重复,不遗漏的被快速处理。 * 2、一个Manager只管理一种任务类型的一组工作线程。 * 3、在一个JVM里面可能存在多个处理相同任务类型的Manager,也可能存在处理不同任务类
2017-12-08 16:01:30
1976
原创 TBSchedule源码学习笔记-启动过程
TBSchedule源码学习笔记-启动过程TBSchedule基本概念及原理概念介绍TBSchedule是一个支持分布式的调度框架,能让一种批量任务或者不断变化的任务,被动态的分配到多个主机的JVM中,不同的线程组中并行执行。基于ZooKeeper的纯Java实现,由Alibaba开源。代码实现起步配置/* (non-Javadoc) * @see org.springframework.
2017-12-07 16:13:13
1606
转载 Java并发---- Executor并发框架--ThreadToolExecutor类详解(execute方法,关闭方法)
1、构造方法请参考上篇文章:http://blog.csdn.net/ochangwen/article/details/530447332、源码详解线程池能够复用线程,减少线程创建,销毁,恢复等状态切换的开销,提高程序的性能。一个线程池管理了一组工作线程,同时它还包括了一个用于放置等待执行的任务的队列。ThreadPoolExecuto
2017-12-06 17:15:47
1328
原创 JDK1.8 AbstractQueuedSynchronizer的实现分析(学习笔记)
lock方法会调用acquire方法,该方法在AQS中实现 public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt(); }正常使用一个Ree
2017-12-05 16:41:40
664
转载 深度解析Java 8:AbstractQueuedSynchronizer的实现分析(下)
前言经过本系列的上半部分JDK1.8 AbstractQueuedSynchronizer的实现分析(上)的解读,相信很多读者已经对AbstractQueuedSynchronizer(下文简称AQS)的独占功能了然于胸,那么这次我们通过对另一个工具类:CountDownLatch的分析来解读AQS的另外一个功能:共享功能。AQS共享功能的实现在开始解读AQS的共享功能前,
2017-11-29 11:26:15
267
转载 深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析(上)
前言Java中的FutureTask作为可异步执行任务并可获取执行结果而被大家所熟知。通常可以使用future.get()来获取线程的执行结果,在线程执行结束之前,get方法会一直阻塞状态,直到call()返回,其优点是使用线程异步执行任务的情况下还可以获取到线程的执行结果,但是FutureTask的以上功能却是依靠通过一个叫AbstractQueuedSynchronizer的类来实现,
2017-11-29 11:09:37
370
原创 Dubbo/Dubbox的dubbo协议实现(一)-服务端启动
之前已经分析的dubbo的服务的发现和注册,这里先看一下dubbo协议是如何实现的,之前已经知道了,调用DubboProtocol类的export来暴露服务的,协议实现比较复杂,这里只关系主体实现即排除一些特性功能的处理代码本章主要处理服务端对应的暴露流程,继续回到···com.alibaba.dubbo.config.ServiceConfig···的doExportUrlsFor1Protoco
2017-11-28 17:03:17
2164
转载 Dubbo架构设计详解
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。
2017-11-28 14:09:35
237
原创 Dubbo/Dubbox的服务消费(二)- 服务发现
上文书整理了dubbo是如何生成服务代理的,并且留了个尾巴,这一文主要介绍dubbo是如何实现服务发现的,继续前文的脚步,看一下dubbo如何完成传说中的服务自动发现 打开com.alibaba.dubbo.config.ReferenceConfig 类,只关注@SuppressWarnings({ "unchecked", "rawtypes", "deprecation" }) pr
2017-11-23 15:15:33
1962
原创 Dubbo/Dubbox的服务消费(一)- 服务代理的创建
dubbo的consumer的初始过程一个常见的consumer配置是这样的<dubbo:reference id="dubboDemo" interface="com.company.dsp.adcenter.protocol.dubbo.DubboDemo" protocol="dubbo"/>这样spring会创建一个beanName为dubboDemo的be
2017-11-20 15:50:24
2953
原创 Dubbo/Dubbox的服务暴露(三)- 服务的注册
接上《 Dubbo/Dubbox的服务暴露(二)-扩展点机制》上文书依旧疑留的疑问,这两句到底在干啥Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.toFullString()))
2017-11-14 10:31:42
429
原创 Dubbo/Dubbox的服务暴露(二)-扩展点机制
接上《 Dubbo/Dubbox的服务暴露(一)》上文书留的疑问,这两句到底在干啥 Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.t
2017-11-13 16:03:20
559
原创 Dubbo/Dubbox的服务暴露(一)
前言源码入手平时我要了解一个框架,基本会去从他的Listener入手,如果web.xml中没有配置listener可能还会有 filter,这是spring给我们的启示,可是当要去了解dubbo的时候,发现dubbo并没有自己的listener监听器。已知dubbo是一款和spring结合较好的rpc框架,那么其不使用web容器相关的方式,必然遵循spring的方式。依据平时开发经验,我们知道要想在
2017-11-07 16:10:15
1704
转载 Java spi机制浅谈
最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制。所以简单的总结下java spi机制的思想。 我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可
2017-10-24 16:43:30
415
转载 Java多线程-新特征-信号量Semaphore
简介信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。概念Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。以一个停车场运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的
2017-10-21 16:27:04
394
转载 关于Redis数据过期策略
1、Redis中key的的过期时间通过EXPIRE key seconds命令来设置数据的过期时间。返回1表明设置成功,返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定的。当key被DEL命令删除或者被SET、GETSET命令重置后与之关联的过期时间会被清除
2017-10-04 16:54:56
442
原创 redis判断key是否存在(过期)的几种方式
exist命令 EXISTS key 检查给定 key 是否存在。 可用版本:>= 1.0.0 时间复杂度:O(1) 返回值: 若 key 存在,返回 1 ,否则返回 0 。示例:ip:6379> set ceshi-111-222 wclOKip:6379> exists ceshi-111-222(integer) 1ip:6379> del ce
2017-10-02 12:26:26
85649
1
原创 轮询任务调度和可抢占式调度
概念和意义轮询调度:每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。只有在当前任务主动放弃CPU控制权的情况下(比如任务挂起),才允许其他任务(包括高优先级的任务)控制CPU。其优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。但不利于后面的请求及时得到响应。抢占式调度:允许高优先级的任务打断当前执行的任务,抢占CPU的控制权
2017-09-25 09:47:20
4335
原创 kafka随笔记
Kafka相关概念1. Topic:特指Kafka处理的消息源(feeds of messages)的不同分类。2. Partition:Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。3. Message:消息,是通信的基本单位,每个producer可以向一个t
2017-09-18 16:30:10
498
原创 ApplicationContextAware接口
前言部分情况下我们想在一个new出来的对象里获得spring容器管理的bean对象,但是因为该类不是由spring对象创建出来的,所以该对象的域不会被spring通过依赖注入的方式实例话,意味着如果我们还向之前那么使用实例属性的话,那就等着空指针吧。那么我们如果在自己new出来的对象里,想使用Spring的bean(例如mybatis相关mapper)该怎么办呢?搜遍互联网,大家会告诉你有一个App
2017-09-16 14:54:12
433
转载 Spring中ApplicationContextAware使用说明
Spring 中提供一些Aware相关接口,像是BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,实作这些 Aware接口的Bean在被初始之后,可以取得一些相对应的资源,例如实作BeanFactoryAware的Bean在初始后,Spring容器将会 注入BeanFactory的实
2017-09-16 14:18:47
386
原创 Dubbo 对配置文件的解析
一个常见的dubbo配置,参照我们项目中的配置,我们项目中使用的是dubbox,是当当基于dubbo的修改版,添加了对rest风格的支持,这里不多叙述。 dubbo:application name="XXXXX" organization="YYYY" owner="ZZZZ" logger="log4j"/> dubbo:registry address="${dub
2017-09-15 13:21:07
1531
原创 Spring 源码阅读 BeanFactory(三) 对象的初始化 singleton 草稿
前言前几篇文章已经说明Spring对BeanDefinition的解析与维护,在beans->bean标签定义下的bean 默认会通过 org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(String beanName, BeanDefinition beanDe
2017-09-09 16:46:33
751
转载 Redis Cluster处理MULTI/EXEC事务以及Multiple主键命令时的限制
在上一篇博文中,本博主介绍了Redis Cluster的搭建方法,从中可以看出其使用方法与单机版Redis确实存在着不小的差异。实际上,除了搭建配置方法以外,Redis Cluster还具有一些其他方面的不同,譬如它不支持多个数据库,不支持select命令等等,但其中最大的不同还是Redis Cluster不支持复杂的多主键操作。关于这一点,Redis Cluster的官方文档有这样一段描述,
2017-08-26 16:33:14
7853
1
原创 解决IntelliJ IDEA中文输入法下,输入提示框不跟随问题
最近换了IDE,屈服于Intellij idea的淫威之下,直感各种快捷键和代码提示甚是好用,但遇到了拼音输入法的提示框不跟随光标的问题,输入法提示框一直在屏幕左下角,很是碍眼与不便。搜遍天朝上国之局域网,终解决之,遂分享解决方式于博客。 输入法光标不跟随听说是Java的big,具体不再赘述,不想因此撕逼 解决方案: 1.升级JDK版本至jdk1.8.0_131 2.到idea的安装目录找
2017-08-26 16:14:29
5072
原创 Spring 源码阅读 BeanFactory(二) 之registerBeanDefinition方法
BeanFactory内部对BeanDefinition的维护接上文@Override public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException { //一些参数校验
2017-08-22 13:57:56
2637
转载 MySQL 加锁处理分析
转自:http://hedengcheng.com/?p=771受益匪浅MySQL 加锁处理分析 1 背景 11.1 MVCC:Snapshot Read vs Current Read 21.2 Cluster Index:聚簇索引 31.3 2PL:Two-Phase Lo
2017-08-18 08:57:11
361
转载 IntelliJ IDEA 常用快捷键
IntelliJ IDEA 常用快捷键本文包含本人总结的一些常用/实用/必备的 intellij idea 快捷键 (for windows)。普通编辑快捷键介绍Tab缩进 / 配合代码提示实现自动完成Shift + Tab取消缩进Ctrl + Z撤销
2017-08-01 13:42:44
319
转载 市面上分布式系统生成唯一ID的方式收集与整理
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下面就介绍一些常见的ID生成策略。数据库自增长序列或字段最常见的方式。利用数据库,全数据库唯一。优点:1)简单,代码方便,性能可以接受。2)数字ID天然排序,对分页或者需要排序的结果很有帮助。缺点:1)不同数据库语法
2017-07-29 16:27:30
387
原创 Spring源码阅读之-BeanFactory(一)
摘自《Spring源码分析(一)-Spring环境的初始化》 控制反转——spring通过一种称作控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 部分参考资料:《控制反转(IoC)与依赖
2017-07-29 16:12:41
332
转载 控制反转(IoC)与依赖注入(DI)
转自:http://blog.xiaohansong.com/2015/10/21/IoC-and-DI/前言最近在学习Spring框架,它的核心就是IoC容器。要掌握Spring框架,就必须要理解控制反转的思想以及依赖注入的实现方式。下面,我们将围绕下面几个问题来探讨控制反转与依赖注入的关系以及在Spring中如何应用。什么是控制反转?什么是依赖注入?它们之间有什么关系?如何在S
2017-07-29 11:30:12
367
原创 Spring源码阅读之-自定义配置的解析
Spring源码阅读之-自定义配置的解析上文书:《Spring源码阅读之-bean的解析与注册》说到,Spring根据delegate.parseCustomElement(ele); 方法来解析自定义命名空间的element节点,本篇博文即分析该解析方式是如何工作的。 入口接上文分析,代码在org.springframework.beans.factory.xml.DefaultBeanDefi
2017-07-23 12:36:11
1026
原创 Spring源码阅读之-bean的解析与注册
Sprin源码阅读之-bean的解析与注册接上,Spring初始化,refresh ApplicationContext时,通过refreshBeanFactory将原有的beanFactory注销,并重新读取Spring配置,并在配置中读取bean的定义。 refreshBeanFactory()如下/** * This implementation performs an actua
2017-07-15 14:12:48
556
原创 Spring源码-启动过程
Spring源码分析(一)-Spring环境的初始化Spring的框架特征以下摘自知道词条 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
2017-07-12 09:46:52
972
原创 gradle安装配置指路
原名《gradle安装配置详解并与IDE集成》,结果在自己的环境下调试完成后,深感eclipse使用gradle插件之复杂,还是不带大家入eclipse集成gradle的坑了,自己因此跳坑使用了IntelliJ IDEA,经历两天阵痛之后倍感舒适,感谢gradle!以下是原来自己写一半的原文(自己也没写什么),下载完后自己配完环境变量就可以用了(建议使用%GRADLE_HOME%\bin的方式)
2017-07-11 09:33:31
453
原创 一个Java进程直接死掉的问题分析
java: res_query.c:251: __libc_res_nquery: Assertion `hp != hp2' failed.
2017-06-30 09:46:44
2958
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人