• 等级
  • 1734824 访问
  • 622 原创
  • 18 转发
  • 450 排名
  • 489 评论
  • 876 获赞

Dubbo 源码分析之线程池

文章目录前言Dubbo 线程池分类Dubbo 线程工厂线程池拒绝策略CachedThreadPoolFixedThreadPoolLimitedThreadPool 前言 相信学过 netty 的都知道,每一个 ChannelHandler 都是通过它的 EventLoop(I/O线程) 来处理传递给它的事件,所以至关重要的是不要阻塞这个线程,因为这会对整体的 I/O 产生负面的影响。Dubbo...

2019-01-19 14:46:25

Dubbo 源码分析之 SPI 详解

我使用的是dubbo2.5.3的源码,有中文注释。为了更方便的学习,可以慢慢来,等这个版本掌握差不多了就可以看更高的版本了。 在Protocol接口的实现类中不存在@Adaptive注解的实现类,所以在使用 Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension() 这...

2019-01-18 20:09:44

Dubbo 源码分析之自定义线程池拒绝策略(使用 Java 程序 Dump 线程堆栈信息)

最近在看dubbo源码,真的学习了很多知识,记得上次看dubbo源码是在半年前了,看到dubbo自定义的spi就看不下去了,完全看不懂。上周又看了看,顿时茅塞顿开,有时间会分享出来。废话不多说,在dubbo内部有几种线程模型,都是使用java线程池实现的,任务被拒绝后会输出堆栈信息。我们可以看它是怎么实现的。 package org.apache.dubbo.common.threadpoo...

2019-01-14 11:15:10

Java设计模式(三)模板方法模式

模版方法:在抽象类中定义了一个模版方法,在模版方法中使用了一些该抽象类中定义的空方法,而这些空方法可以供子类实现。 我们在查看源码时经常能够看到在执行一些重要的方法时,往往调用了一些看似没有什么意义的空方法。其实这就是模版方法。 abstract class ThreadHolder { /** * 模版方法 * @param runnable */ ...

2019-01-09 10:59:46

赫拉(hera)分布式任务调度系统之Q&A(五)

文章目录q:依赖任务的周期怎么填?q:新加的任务什么时候会加入调度q:想立刻加入调度怎么办q:资源文件怎么上传不成功q:开启/关闭/失效按钮的区别q:如何控制任务的并行数量q:任务执行会冲突吗q:什么是漏跑检测重试q:什么是任务信号丢失重试q:为什么任务无法关闭q:为什么任务无法开启q:`master`挂了,`work`会抢占`master`吗q:`master`挂了,哪些`work`会抢占`ma...

2019-01-08 15:51:29

赫拉(hera)分布式任务调度系统之版本(四)

文章目录赫拉文章版本介绍版本的使用加入群聊 赫拉文章 赫拉(hera)分布式任务调度系统之架构,基本功能(一) 赫拉(hera)分布式任务调度系统之项目启动(二) 赫拉(hera)分布式任务调度系统之开发中心(三) 版本介绍 在hera系统中支持历史版本的数据重跑。 每一个任务都会生成版本,版本时间根据cron表达式来产生。其中版本在脚本中没有使用内置变量时无用。 版本号的生成规则为:yyyyMM...

2019-01-04 15:21:26

赫拉(hera)分布式任务调度系统之开发中心(三)

简介 开发中心,顾名思义。我们进行开发的地方(当然我们也可以直接在调度中心加任务,建议任务首先在开发中心测试,通过之后再加到调度中心)。 目录介绍 如图所示,开发中心有两个文件夹。分别是个人文档、共享文档。这两个文件夹不允许删除。 个人文档 提供给账户登录者使用的,私人目录可以在这里创建,执行任务时的用户,以创建者为准 共享文档 文件夹内的脚本对所有用户可见,执行时任务的用户以实际的登录者...

2018-12-29 11:30:09

赫拉(hera)分布式任务调度系统之项目启动(二)

创建表 克隆hera 暂时还未开源 后面补上。当使用git把hera克隆到本地之后,首先在hera/hera-admin/resources目录下找到hera.sql文件,在自己的数据库中新建这些必要的表,并插入初始化的数据。 克隆到本地后,即可使用maven的打包命令进行打包 mvn clean package -Dmaven.test.skip -Pdev 打包后可以进入hera-admi...

2018-12-22 11:25:00

赫拉(hera)分布式任务调度系统之架构,基本功能(一)

前言 在大数据平台,随着业务发展,每天承载着成千上万的ETL任务调度,这些任务集中在hive,shell脚本调度。怎么样让大量的ETL任务准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复甚至执行错误告警与完整的日志查询。hera任务调度系统就是在这种背景下衍生的一款分布式调度系统。随着hera集群动态扩展,可以承载成千上万的任务调度。它是一款原生的分布式任务调...

2018-12-20 17:14:38

spark streaming被压分析

在我们使用spark-streaming处理实时数据时,通常在Dstream端的rdd操作较为耗时,此刻的实时数据还在receiver端不断的store。由于数据的处理不及时,即Processing Time < blockInterval也就造成了数据的积压。此时就需要一种机制来解决receiver端store数据的“速率”。在spark streaming中就是被压(backpress...

2018-12-18 19:03:27

解析一行gc日志

线上某个项目 ,启动参数 -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/opt/logs/spring-boot/gc.log 在gc.log里面发现了这些gc信息 315201.296: [GC (Allocation Failure) 315201.296: [ParNew: 1751390K->807...

2018-12-18 11:12:28

Java引用类型:强引用,软引用,弱引用,虚引用

在Java中提供了4个级别的引用:强引用,软引用,弱引用,虚引用。在这4个引用级别中,只有强引用FinalReference类是包内可见,其他3中引用类型均为public,可以在应用程序中直接使用。 强引用 Java中的引用,有点像C++的指针,通过引用,可以对堆中的对象进行操作。 ...

2018-10-23 19:29:34

关于Class.forName

前言 相信大家在使用反射操作时多多少少能用到这个方法。如果你使用了mysql数据库并且使用了原生的数据库操作,你肯定有一段这样的代码Class.forName("com.mysql.jdbc.Driver"); 这段代码的意义就是生成一个代表com.mysql.jdbc.Driver类的java.lang.Class对象到内存中,作为方法区这个类的各种数据的入口,在执行初始化操作时调用该类静态代码...

2018-10-12 11:34:32

zk数据恢复

刚刚在向hbase表写数据时发现一个神奇的现象:判断该表显示不存在,建表时发现显示 表已存在。 org.apache.hadoop.hbase.TableExistsException: cash_log:op_info 查看hdfs文件发现该表数据不存在。 查看 zk显示该表 meta信息存在。 要做的 就是在zk上使用rmr /hbase1/table/cash_log:op_in...

2018-09-05 16:21:01

hbase 单个regionserver中region过多 优化

问题 目前hbase 总是出现压缩队列和刷新队列过大的告警,导致数据的读写变慢。 首先说明一下目前集群的状况 regionServer数量:20 region 数量:6503 regionServer配置:-Xms10g -Xmx10g -Xmn3g 原因 找到一些可能的原因。 region 数量过多 regionServer 堆大小为10G,有些小 re...

2018-08-06 17:15:14

Java源码之ThreadLocal

前言 很早之前就知道使用ThreadLocal解决多线程并发的问题,可是却一直知其然不知其所以然。这几天在github上看dubbo的提交记录时,无意中发现了前师兄提交的记录,其优化后的ThradLocal性能提高了几十倍(原理在最后我会说一下),最后发现这位师兄也是借鉴了netty的FastThreadLocal。一直很崇拜这位刚刚毕业三个月就在网易就职高级Java工程师的师兄。为了向这...

2018-07-05 18:25:42

ZTree自定义icon

在写一个界面,用到了ZTree插件。 我的目录分类有:大目录,小目录和文件。默认的ZTree并不满足我的需求,就需要一些定制化的开发。 增加变量 在jquery.ztree.core.js文件里有一个变量组,分别表示打开的文件夹,关闭的文件夹,文件。 _consts = { ... folder: { ...

2018-06-11 19:43:35

hbase实时优化思路

问题的提出 基于hbase的实时架构图如上图所示(也有其它基于TiDB的毫秒级别的实时,这里属于伪实时H+1)。 目前报表的H+1任务的数据都是通过读取binlog消息存入导hbase的。在对这些数据做计算需要在hive上,此时也就需要把数据从hbase导入hive中。最后通过一系列计算把结果export到指定数据库. 在hbase->hive的过程中使用的方法为:现在的实...

2018-06-07 20:02:39

Java设计模式(二)回调模式

在学习Java的路上很早很早就接触了回调,比如:JFrame的键盘事件,JFrame控件的点击事件,线程池执行之前的方法beforeExecute与执行之后的方法 afterExecute,线程的Run方法其原理就是使用了回调。之前一直没有研究过其原理,在这里学习一下回调模式,也方便理解事件监听模式和观察者模式。 回调模式 在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传...

2018-05-14 14:46:53

Java设计模式(一)适配器模式

一天无意中在github上搜索,发现了在Java领域stars排名最多的一个项目:iluwatar/java-design-patterns 里面总结了许多在我们开发过程中会使用到的设计模式,以前虽然也学习过,可是总很快就忘,在这里打算再一个一个学习一下。 适配器模式 适配器,是为了适应两个原本不兼容的接口而诞生的设计模式,用我们的话说就是转接口,或者桥梁,属于结构性模式。适配器有...

2018-05-14 10:22:30

甄情

关注
  • 计算机软件/数据开发
  • 中国 浙江省 杭州市
奖章
  • 专栏达人
  • 持之以恒