- 博客(49)
- 收藏
- 关注
原创 故障定位系列-3-容器资源故障
异常检测为了适应各种服务的波动,通常是突变检测,即产生突变即会认为是异常,对于 CPU 来说,很容易被突变检测认为是异常,因此还需要一些其他的一些抗干扰的检测能力。同时对 CPU 波动度进行打分,波动度越高得分高,根因排序的优先级就高,因此同一个服务内的各个根因都要有打分机制,通过打分机制来决定到底哪个更适合作为根因。当我们发现当前服务是根因服务时(即下游服务并未发现问题),我们就需要分析当前服务自身的问题。APM 数据要采集足够多的关联字段,才能跟其他各种环境的资源数据进行关联。
2025-04-11 09:53:18
761
原创 故障定位系列-2-共享连接池故障
service-o 的链路不会去访问 service-h,但是 service-h 故障会导致 service-o 故障,假如我们还按接口级链路去分析(service-o 的 callO 接口 ->service-p 的 callO 接口 ->service-l 的 callO 接口)就只能得出如下的结论。service-h 的 callB 接口故障 -》影响到 service-p 的 callB 接口 -》影响到 service-b 的 callB 接口。目前开放注册,可自主演练体验几十种故障场景。
2025-04-01 10:43:38
706
原创 故障定位系列-1-接口级故障
定位:服务 G 的 methodA 接口故障了,故障主要是因为访问 DB 的某个 SQL 耗时突增导致的。是一个故障演练和定位的系统,可以进行上述故障场景的复现。然后对访问下游组件或者访问下游服务的异常或者错误进行异常检测,挑出否符合当前服务的故障范围。有了耗时分解之后,明显就可以看出是 DB 访问造成的问题,继续对 DB 访问进行下钻即可。如果服务端的耗时没有波动,大概率是网络问题或者客户端的问题。如何确定是自身、访问组件、访问下游服务的问题?如何确定是自身、访问组件、访问下游服务的问题?
2025-03-27 10:09:41
892
原创 一款体验故障定位的神器
故障树的最后一个节点,即为根因节点,根因节点的第一个问题即为根本原因,可以验证该原因和注入的故障是否匹配,如果匹配则代表DataBuff平台定位成功。很多时候,当故障发生时,监测平台会触发大量的关联事件(比如100个事件),因此需要一定的收敛能力,对这些事件进行聚合并形成有效告警,降低对用户的干扰。我们开放了大量在实际生产中常见的故障场景,只需一键注入故障,就能在3分钟之内获得一个详尽可解释的故障根因分析结果。,分析粒度深入到服务接口,连接池,函数堆栈,SQL语句,进程,系统资源等级别。
2025-03-22 10:36:57
831
原创 ZooKeeper源码研究寻求小伙伴
最近正在研究ZooKeeper源码,有这个意向的小伙伴吗?来一起探讨和研究现在想寻求能挤出时间、经常研究源码的小伙伴,终极目标能够改造ZooKeeper:利用空余时间研究源码,平时一起交流探讨,分工合作源码研究任务。...
2015-08-06 08:13:16
236
原创 Spring事务源码分析(一)Spring事务入门
[size=medium]有时为了保证一些操作要么都成功,要么都失败,这就需要事务来保证。传统的jdbc事务如下:[/size][code="java"]@Test public void testAdd(){ Connection con=null; try { con=DriverManager.getConnection(url , username , ...
2015-01-30 07:35:08
439
原创 shiro源码分析(六)CredentialsMatcher 的案例分析
[size=medium]有了上一篇文章的原理分析,这一篇文章主要结合原理来进行使用。shiro.ini配置为:[/size][code="java"][main]#realm dataSource=com.mchange.v2.c3p0.ComboPooledDataSource dataSource.driverClass=com.mysql.jdbc.Driver...
2015-01-04 07:39:49
838
原创 shiro源码分析(五)CredentialsMatcher
[size=medium]Realm在验证用户身份的时候,要进行密码匹配。最简单的情况就是明文直接匹配,然后就是加密匹配,这里的匹配工作则就是交给CredentialsMatcher来完成的。先看下它的接口方法:[/size][code="java"]public interface CredentialsMatcher { boolean doCredentialsMatch(...
2014-12-29 07:39:22
1782
1
原创 shiro源码分析(四)具体的Realm
[size=medium]首先还是Realm的接口设计图:[/size][img]http://dl2.iteye.com/upload/attachment/0104/5692/3c8b1b3b-7caf-3977-9700-2df30fc7733b.png[/img][size=medium]这里只来说明SimpleAccountRealm和JdbcRealm的实现。首先是Si...
2014-12-24 07:28:05
309
原创 shiro源码分析(三)授权、认证、缓存的接口设计
[size=medium]前两篇文章主要说的是认证过程,这一篇来分析下授权的过程。还是开涛大神的案例([url]http://jinnianshilongnian.iteye.com/blog/2020017[/url]),如下:[/size][code="java"]public class ShiroTest { @Test public void testHellow...
2014-12-19 07:46:43
384
原创 shiro源码分析(二)Subject和Session
[size=medium]继续上一篇文章的案例,第一次使用SecurityUtils.getSubject()来获取Subject时[/size][code="java"]public static Subject getSubject() { Subject subject = ThreadContext.getSubject(); if (subje...
2014-12-15 08:02:24
722
原创 shiro源码分析(一)入门
[size=medium]最近闲来无事,准备读个框架源码,经别人推荐shiro,那就准备读读其中的设计。开涛大神已经有了跟我学Shiro系列,那我就跟着这个系列入门然后再深入源代码,所以我的侧重点就是源码分析。话不多说,上开涛大神的入门案例 地址[url]http://jinnianshilongnian.iteye.com/blog/2019547[/url]:[/size][cod...
2014-12-11 07:21:41
440
原创 单例模式大汇总
[size=medium]看了多方资料,整理下单例设计模式,有不少值得相互探究的地方,你就会发现就这一个小小的单例模式竟然映射出N多知识。我在这里把问题综述出来,一起相互探讨。单例涉及到的相关文章如下: [url=http://lgbolgger.iteye.com/blog/2159940]反射、枚举与单例[/url] ...
2014-11-27 07:46:24
159
原创 类加载器与单例
[size=medium]当使用不同的类加载器时,也会使单例失效,如下:单例为:[/size][code="java"]public final class Singleton{ private static final Singleton instance=new Singleton(); private Singleton(){ ...
2014-11-27 07:42:43
745
原创 序列化与单例
[size=medium]当单例模式的类实现了系列化Serializable接口,也可以通过反序列化来使它不再单例。我们的单例类:[/size][code="java"]public final class Singleton implements Serializable{ private static final long serialVersionUID = 173577...
2014-11-27 07:41:32
183
原创 反射、枚举与单例
[size=medium]通常我们所使用的单例模式,我们都可以使用反射使它不再单例,如下饿汉式的单例模式:[/size][code="java"]public final class Singleton { private static final Singleton instance=new Singleton(); private Singleton(){} ...
2014-11-27 07:39:50
194
原创 装饰者模式
[size=medium]有时候为了传承某个类的一些功能,我们可以采用继承该类来获取功能,并可以通过覆写某些方法来进行功能加强。然而若想对一批类的功能进行加强,如果仍采用继承,不仅在代码上重复,并且不利于扩展。如下所示:[/size][code="java"]public interface Component { public void fun();}public ...
2014-11-19 06:51:14
163
原创 工厂模式
[size=medium]本文章内容是看完《HeadFirst设计模式》书籍的工厂模式后为了加深印象而写。其实有的时候,某些博客并不是仅仅为了分享,更主要的是写给自己,主要是为了自己在写的过程去更加深刻去体会,光看看别人所说的,感觉挺有道理的,却没有转化成自己的东西,就更不会在实际的工作中去使用设计模式了。言归正传,工厂模式分成3种,简单工厂模式、工厂方法模式、抽象工厂模式。这些模式都是通...
2014-11-14 07:46:57
174
原创 集合的toArray方法产生的Object[]数组转换失败
[size=medium]最近遇见一个问题,即调用一个集合(只存放类A的对象)的toArray()方法变成Object[]数组,最后将它转换成A[]时抛出类型转换异常。不知道为什么不能转换成功。最后了解到,集合的toArray方法有两个,一种就是Object[] toArray(),另一种就是T[] toArray(T[] a),前一种没有指定数组的类型为Object,后一种指定数组的类型...
2014-11-13 05:38:34
480
原创 观察者设计模式
[size=medium]先来看下下报纸和杂志的订阅:(1)报社:出版报纸和杂志(2)订阅者:向某家报社订阅报纸和杂志,只要报社出版了新的报纸,订阅者就会收到最新的报纸和杂志。(3)报社具有添加和删除订阅者的功能(其实应该是订阅者具有订阅和退订的功能,这个主动权应该是订阅者而不是报社,报社也应该对外开放这样的方法)下面就让我们来简单实现上述的描述:报社:PublishingHo...
2014-11-09 10:25:07
184
原创 hibernate系列(五)Session接口方法
[size=medium]Session接口方法主要有save、persist、load、get、update、saveOrUpdat、merge、delete等,这里主要是对我看hibernate书籍的一个实践加总结。首先是save()方法:以之前的Customer和Order为例,看下类文件:[/size][code="java"]public class Customer...
2014-10-24 07:11:26
219
原创 hibernate系列(四)一对一关联关系
[size=medium]以Person类和IDCard类为例,这里仅仅说一种一对一关联关系,即Person类拥有IDCard,但是IDCard不含Person类,数据库库的表如下:[/size][code="sql"]CREATE TABLE `hibernate`.`person` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VAR...
2014-10-09 07:32:33
134
原创 hibernate系列(三)多对多的关联关系
[size=medium]以Teacher和Student为例,他们之间是多对多的关系。手动创建的数据库的三张表为,teacher、student、teacher_student。分别如下:[/size][code="sql"]CREATE TABLE `teacher` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varc...
2014-10-08 06:35:52
163
原创 hibernate系列(二)一对多的关联关系
[size=medium]上一篇文章介绍了基本知识后,本篇该介绍下现实中的一对多的关联关系。如Customer和Order,一个Customer可以拥有多个Order,每个Order只属于一个Customer。这样就存在几种表示形式,可以分为单向关联和双向关联。形式1:Order拥有一个Customer引用,这种属于单向关联形式2:Customer拥有Order的集合,这种也属于单向关联...
2014-10-07 11:33:42
199
原创 hibernate系列(一)hibernate入门
[size=medium]最近开始学习hibernate,然后就想把这个学习历程总结下来。还是打算主要分两个过程,第一个过程:学会使用hibernate,第二个过程:做一些源码分析,更加深入的理解。言归正传,开始入门案例,这里的入门案例不牵扯其他框架,所以一开始学习的时候尽量不要牵扯其他框架,如SpringMVC。如果入门时牵涉其他框架,有时候会搞不清楚hibernate和其他框架的责任机...
2014-10-06 10:31:18
172
原创 Spring AOP源码分析(八)SpringAOP要注意的地方
[size=medium]SpringAOP要注意的地方有很多,下面就举一个,之后想到了再列出来:(1)SpringAOP对于最外层的函数只拦截public方法,不拦截protected和private方法,另外不会对最外层的public方法内部调用的其他方法也进行拦截,即只停留于代理对象所调用的方法。如下案例:B类有两个public方法,foo1()和foo2(),foo1内部调用了fo...
2014-10-01 10:00:49
235
原创 Spring AOP源码分析(七)ProxyFactoryBean介绍
[size=medium]这篇文章里面就要说说Spring自己的AOP,搞清楚哪种方式是Spring自己实现的AOP,哪种方式是Spring引入aspectj的AOP。Spring自己的AOP实现在于ProxyFactoryBean。先看下使用案例(仍和之前的案例是一样的):接口AService、实现类AServiceImpl、通知MyBeforeAdvice[/size][code="j...
2014-09-28 22:03:56
237
原创 Spring AOP源码分析(六)Spring AOP配置的背后
[size=medium]本篇文章主要对Spring AOP配置背后进行了哪些事情做下说明。还是如上类似的工程,在xml中AOP拦截配置如下:[/size][code="java"] ...
2014-09-27 11:39:16
265
原创 Spring AOP源码分析(五)Spring AOP的Cglib代理
[size=medium]上一篇文章介绍了Spring AOP的JDK动态代理的过程,这一篇文章就要介绍下Spring AOP的Cglib代理过程,仍然是使用上一篇文章的工程案例。JDK动态代理是由JdkDynamicAopProxy来生成代理对象的,Cglib则是由CglibAopProxy来生成代理对象的。JdkDynamicAopProxy、CglibAopProxy实现了AopPr...
2014-09-24 06:48:29
312
原创 Spring AOP源码分析(四)Spring AOP的JDK动态代理
[size=medium]本篇文章将会介绍上一个例子中的源码执行情况,从中熟悉整个SpringAOP的一些概念和接口设计。首先整个SpringAOP的分两大过程。第一个过程:根据xml文件或者注解中配置的拦截信息,生成相应的代理对象,这个代理对象包含了对应的拦截器。第二个过程:执行所拦截的方法时,就是调用代理对象的执行逻辑,完成各种拦截。本文章先对第二个过程进行源码解析。...
2014-09-22 07:40:46
440
原创 Spring AOP源码分析(三)Spring AOP中的一些基本接口及其概念
[size=medium]本文章对一些SpringAOP的接口设计进行下介绍,主要是区分三者的关系,AOP联盟、Aspectj、SpringAOP所做的工作。主要内容:(1)Advice接口设计(2)MethodInterceptor接口设计(3)Advisor和Pointcut接口设计第一个:Advice接口设计Advice:AOP联盟定义的通知接口,即拦截到相应的方法后...
2014-09-22 07:40:20
219
原创 Spring AOP源码分析(二)JDK动态代理和CGLIB介绍
[size=medium]本篇是介绍java实现代理对象的两种方法,JDK动态代理和CGLIB。JDK动态代理:针对你所调用的方法是接口所定义的方法。动态的创建一个类,通过实现目标类的接口来实现代理。CGLIB:没有限制。通过继承目标类来创建代理类,实现代理。下面看案例:案例一,JDK动态代理:Person和Animals都实现了Say接口sayHello方法。现在就需要对...
2014-09-21 07:07:18
181
原创 ThreadLocal设计模式
[size=medium]ThreadLocal设计模式使用的也很频繁,会经常在各大框架找到它们的踪影,如struts2以及最近正在看的SpringAOP等。ThreadLocal设计模式也有很多误解,我的理解是(1)ThreadLocal所操作的数据是线程间不共享的。它不是用来解决多个线程竞争同一资源的多线程问题。(2)ThreadLocal所操作的数据主要用于线程内共享数据,可...
2014-09-19 07:48:13
408
原创 Spring AOP源码分析(一)AOP介绍和aspectj、SpringAOP入门
[size=medium]首先说说三个名词,面向对象、面向接口编程、面向切面编程(Aspect Oriented Programming 即AOP)。针对java来说面向对象:是对现实世界的描述,是后两者的基础,大前提。面向接口编程:接口就是一组规则的集合,这组规则可以有不同的实现方式。如JDBC,它本身仅仅是接口规范,不同的数据库有不同的实现,我们通过JDBC这样的接口编程,就无需关...
2014-09-14 10:10:56
210
原创 equals和hashCode源码解析
[size=medium]equals和hashCode网上也有很多的资料。这里只是记录下我目前的理解与认识。大家会经常听到这样的话,当你重写equals方法时,尽量要重写hashCode方法,有些人却并不知道为什么要这样,待会就会给出源码说明这个原因。首先来介绍下Object的equals和hashCode方法。如下:[/size][code="java"]public na...
2014-09-12 07:42:45
440
原创 SpringMVC源码总结(十二)ViewResolver介绍
[size=medium]首先我们先看看ModelAndView中重要的View接口。View接口:[/size][code="java"]String getContentType(); /** * Render the view given the specified model. * The first step will be preparing the r...
2014-09-10 06:43:45
328
原创 设计模式开篇
[size=medium]提到设计模式,我们会经常这样听说:"我也看过很多的设计模式,但在实际的项目中从来没有用过"。这的确是我以及很多人遇到的情况,那些设计模式都能看懂,但就是在项目用不到,总感觉纸上谈兵,落实不到我们具体的项目上。我的个人观点:(1) 对设计模式的理解还不够深入 首先我们要对设计模式所要解决的问题要理解透彻,即什么样的场景适合用这个设计模式。然后就是这个设...
2014-09-08 21:59:30
153
原创 SpringMVC源码总结(十一)mvc:interceptors拦截器介绍
[size=medium]本文章针对mvc:interceptors标签进行介绍,它的注册过程以及在访问时的拦截过程。首先说下接口HandlerInterceptor,它有如下三个方法:[/size][code="java"]boolean preHandle(HttpServletRequest request, HttpServletResponse response, Obj...
2014-09-08 20:21:32
455
原创 SpringMVC源码总结(十)自定义HandlerMethodArgumentResolver
[size=medium]上一篇文章介绍了HandlerMethodArgumentResolver的来龙去脉,这篇就要说说自定义HandlerMethodArgumentResolver来解决我们的需求,本文提供了四种解决方案。需求,有一个Teacher类和Student类,他们都有属性name和age:前端form表单为:[/size][code="java"] ...
2014-09-04 07:45:48
294
原创 SpringMVC源码总结(九)HandlerMethodArgumentResolver介绍
[size=medium]本文章主要介绍HandlerMethodArgumentResolver在SpringMVC中的使用,介绍几个HandlerMethodArgumentResolver具体的使用情况,然后说明HandlerMethodArgumentResolver的注册来源以及如何自定义注册。首先具体看下请求映射到的handler的对应的映射函数的参数形式有哪些:Han...
2014-09-02 06:24:58
399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人