自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java中如何限制方法访问的并发数

并发编程一直是Java基础中的高地,但很多只要有两三年Java基础的工程师,会在简历中很明确的标明“熟悉多线程编程、有高并发编程经验”,来凸显自己编程能力有多厉害,但实际上可能只是看了《Java Concurrency in Practice》的几个章节而已。其实对很多业务研发工程师来说,高并发编程经验并不是必备的核心竞争力之一,很多需要加锁或者统计的场景,大都可以交给外部系统如Redis来做...

2018-08-04 17:23:26 1102

原创 Hystrix浅入浅出:(二)断路器和滑动窗口

内容中包含敏感词汇!!!!无法在iteye发布。。。。请移步:https://blog.csdn.net/manzhizhen/article/details/80296655

2018-05-13 09:27:17 315

Hystrix浅入浅出:(一)背景与功能初探

终于到了必须要了解Hystrix的时候了,Hystrix直译过来是刺猬的意思,这里指的是Netflix开源的一个包含限流、熔断等功能的库类,它能给系统提供快速失败和快速恢复的能力,让其更具“弹性”。 流控、熔断和快速恢复是现在大型分布式系统中各个服务节点应该具备的基本抗灾和容错能力,如何在流量突增、依赖服务宕机等外界紧急情况发生时不需要人工干预来自动做到快速止损(比如服务降级)、防止整...

2018-03-17 13:21:45 248

简单的cpu飚高问题定位脚本

老司机在定位和解决问题时都有着自己的一套方法论,总不能老踩一些重复的坑是吧。老司机一般多少都遇到过服务器cpu飚高的问题,定位问题的方法网上文章多如牛毛,现这里再总结一下,对于混部多个Java应用的服务器,我们一般会通过如下步骤来定位该问题:找到cpu占比高的Java进程ID,通过这一步就知道是哪个Java应用出了问题。然后再找到该Java进程中哪些线程占用cpu时间比较高,有...

2018-02-19 10:46:35 293

Dubbo源代码分析九:优雅停机

虽然我们系统的用户体验和数据一致性不应该完全靠优雅停机来保证,但作为一流的RPC框架,优雅停机的功能必不可少,Dubbo用户手册有对优雅停机做一个简单的叙述: Dubbo是通过JDK的 ShutdownHook 来完成优雅停机的,所以如果用户使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行。服务提供方:停止时,先标记为不接收...

2017-12-09 10:36:17 309

Dubbo源代码分析八:再说Provider线程池被EXHAUSTED

         在上回《Dubbo源代码实现六》中我们已经了解到,对于Dubbo集群中的Provider角色,有IO线程池(默认无界)和业务处理线程池(默认200)两个线程池,所以当业务的并发比较高,或者某些业务处理变慢,业务线程池就很容易被“打满”,抛出“RejectedExecutionException: Thread pool is EXHAUSTED! ”异常。当然,前提是我们每给...

2017-08-26 12:34:09 363

Dubbo源代码分析七:使用executes属性的一个问题

我们知道,在Dubbo中可以给Provider配置线程池大小来控制系统提供服务的最大并行度,默认是200个,如果我们想配置成500,可以如下配置: <dubbo:provider token="true" threads="500"/> 当我们想限制某个dubbo服务使用的最大线程数量时,dubbo提供了executes这一属性来提供这个功能,比如我们想限制某个接口最...

2017-07-22 12:17:03 1219

Dubbo源代码实现六:线程池模型与提供者

对于Dubbo的服务提供者,主要有两种线程池,一种是IO处理线程池,另一种是服务调用线程池。而作为IO处理线程池,由于Dubbo基于Mina、Grizzly和Netty框架做IO组件,IO线程池都是基于这些框架来配置,比如Netty中的boss和worker线程池,Dubbo选择的是“无边界”的CachedThreadPool,这意味着对所有服务请求先做到“来者不拒”,但它进一步限制了IO处理...

2017-06-18 18:41:21 474 1

Dubbo源代码实现四:Dubbo中的扩展点与SPI

       SPI的全称是Service Provider Interface,即服务提供商接口。直白的说,它主要用来实现一个可扩展的Java应用。有人会觉得这就是建立在面向接口编程下的一种为了使组件可扩展或动态变更实现的规范,常见的类SPI的设计有JDBC、JNDI、JAXP等,很多开源框架的内部实现也采用了SPI,。例如JDBC的架构是由一套API组成,用于给Java应用提供访问不同数据库...

2017-06-18 18:40:06 203

Dubbo源代码实现三:注册中心Registry

 <!--StartFragment-->         我们知道,对于服务治理框架来说,服务通信(RPC)和服务管理两部分必不可少,而服务管理又分为服务注册、服务发现和服务人工介入,我们来看看Dubbo框架的结构图(来源网络):<!--EndFragment-->图中可以看出,服务提供者Provider往服务注册中心Registry注册服务,而的消费者Co...

2017-06-18 18:33:35 305

Dubbo源代码实现五:RPC中的服务消费方实现

         刚开始使用Dubbo的人,可能对Dubbo的第一印象就是它是一个RPC框架,当然,所有的分布式框架都少不了相互通信的过程,何况Dubbo的任务就是帮助分布式业务系统完成服务的通讯、负载、注册、发现和监控等功能。不得不承认,RPC是Dubbo提供服务的核心流程,为了兼容多种使用场景,Dubbo显然需要提供多种RPC方式(协议).         开发一个简单的RPC框架,重点...

2017-01-31 12:58:57 231

分布式跟踪系统(一):Zipkin的背景和设计

        2010年谷歌发表了其内部使用的分布式跟踪系统Dapper的论文(http://static.googleusercontent.com/media/research.google.com/zh-CN/archive/papers/dapper-2010-1.pdf,译文地址:http://bigbully.github.io/Dapper-translation/),讲述...

2016-12-30 12:46:48 310

分布式跟踪系统(二):Zipkin的Span模型

         在《分布式跟踪系统(一):Zipkin的背景和设计》一文中,已经初步的介绍了Zipkin的设计和数据模型,本文将详细介绍Zipkin的Span模型,以及其他“另类”Span模型的设计。          这里多一句嘴,其实专业点的叫法应该是分布式追踪系统——Distributed Tracing System,跟踪比较适合用于人的场景,比如某人被跟踪了,而追踪更适合用于计...

2016-12-25 00:46:37 255

RocketMQ初探一:NameServer的作用

第一次真正接触Java消息服务是在2013年底,当时是给中国移动做统一支付平台,当时用的就是著名的Apache ActiveMQ,当时觉得很有趣,一个服务队列竟然可以玩出这么多花样来。当时为了尽快的入门,还把《Java Message Service》给看了一遍,这对于初学者的我收获颇多。我说知道的完全实现JMS规范的MOM有ActiveMQ/Apollo和HornetQ,都是采用Java实现...

2016-08-14 11:25:51 1411

Dubbo源代码实现二:服务调用的动态代理和负载均衡

疑惑一:为什么在Spring中我们能像注入普通本地服务JavaBean一样注入远程的Dubbo服务Bean?我们知道,Dubbo将服务调用封装成普通的Spring的Bean,于是我们可以像使用本地的Spring Bean一样,来调用远端的Dubbo服务,并有LoadBalance和Failover的功能。现在,我们从源码的角度来看看,Dubbo是如何做到这点的。我们知道,要成为Dubb...

2016-07-30 14:04:15 442

常用限流方案的设计和实现

 为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服务降级了,而限流就是降级系统最常采用的方案之一。 限流即流量限制,或者高大上一点,叫做流量整形,限流的目的是在遇到流量高峰期或者流量突增(流量尖刺)时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。 其实,服务降级系统中的限流并没有我们想象的那么简单,第一,限流方案必须是可...

2016-07-16 23:52:54 935 1

Flume快速入门(五):File Channel之重播(replay)

    当FlumeChannel启动时,或者故障恢复时,会经历一次重播(replay)过程,重播的目的就是还原上一次的“现场”,当然,最主要的就是恢复FlumeEventQueue中的内存队列相关数据。重播的主要实现是有Log类来做的,Log类的replay实现了整个重播过程,简单来说,重播过程分为如下几个步骤: 步骤1:获取检查点文件的独占锁(checkpointWriterLoc...

2016-07-14 00:30:56 790

可重入锁ReentrantLock初探

我们知道,java.util.concurrent.locks包下的Lock和Condition接口的语义是用来替代JDK1.5之前使用synchronize和Object.wait、Object.notify、Object.notifyAll组合,Effective Java一书中说过,JDK1.5及其以后,你几乎没有任何理由去选择使用synchronize和Object.wait、Obje...

2016-06-26 16:52:27 91

信号量Semaphore初探

         信号量Semaphore是java.util.concurrent包下一个常用的同步工具类,它维护了一个许可集,可以理解成资源数,可以通过acquire操作来获取一个资源,并通过release来释放一个资源,但需要注意的是,release来释放资源前不一定要先通过acquire来获取一个资源,如果不断的release而不进行acquire将导致资源数虚增,所以一定得我们自己来...

2016-06-25 21:23:49 252

AbstractQueuedSynchronizer初探

毫不为过的说,AbstractQueuedSynchronizer(以下简称AQS)是java.util.concurrent包下同步器类的灵魂组件,很多同步组件都是基于它实现的,比如CountDownLatch、CyclicBarrier、ReentrantLock、ReentrantReadWriteLock和ConcurrentHashMap等。我们不要一头栽进AQS的代码里直接看,...

2016-06-18 23:40:29 208

原创 Flume快速入门(四):File Channel之FlumeEventQueue

       虽然我们把FlumeEventQueue想象成Event指针的内存队列,但FlumeEventQueue中的内部实现是很绕的,不跑跑Flume的单元测试,很容易看晕。本文的目的就是通过简化模型来剖析FlumeEventQueue中的四种操作:addTail、removeHead、addHead和remove。       上一篇博文地址:http://manzhizhen.i...

2016-06-05 23:14:37 296

原创 Flume快速入门(三):File Channel之写Event

       有了前两篇博文的基础,相信大家对Flume Agent的内部结构已经有了个初步的了解,现在我们来详细介绍最常用的文件通道——File Channel,本篇博客主要介绍Eevnt是如何完成写到File Channel这一操作的。       上一篇: http://manzhizhen.iteye.com/blog/2298159       Channel是联系Sou...

2016-05-22 12:44:29 703

原创 Flume快速入门(二):设计从简

      上一篇文章简单介绍了下Flume的背景,接下来本文说说Flume NG的内部设计。注意:本文针对的是Flume1.6.0版本。      上一篇:http://manzhizhen.iteye.com/blog/2298150      我们先来看看为什么需要Flume,在大数据分析领域,最重要的就是数据,而日志作为首选数据来源之一,有着举足轻重的地位,如今企业的线上业务服...

2016-05-15 13:55:36 180

原创 Flume快速入门(一):背景简介

       Flume由Cloudera于2009年7月开源,后变成Apache的顶级项目之一,由Java语言开发,致力于解决大量日志流数据的迁移问题。日志是大数据分析领域的主要数据来源之一,如何将线上成百上千的业务系统日志高效、可靠的迁移到我们的hdfs中去,Flume提供了一个很好的解决方案。Flume——一个纯粹为流式数据迁移而生的分布式服务。       现如今,几乎所有开源的成...

2016-05-14 11:12:14 579

原创 Dubbo源代码实现一:切入Spring

        Dubbo是阿里开源的一个高性能服务框架,提供了服务注册、RPC服务调用、调用均衡、服务监控和服务failover等功能。如果你还未使用过Dubbo框架,请先参考dubbo提供的官方文档,比如:http://www.oschina.net/p/dubbo?fromerr=iVZFqWON。        Dubbo框架中有两个重要角色:(服务)提供者和(服务)消费者,这里为...

2016-02-13 22:34:04 169

HttpClient入门示例

       如果你是使用maven来管理项目,你需要在pom.xml添加如下配置:        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpclient</artifactId> ...

2015-11-14 11:34:43 107

原创 Spring如何扫描class和配置文件

       前几天由于公司项目架构调整,想将以前代码开发为主改成配置文件配置为主,即所有的外部服务调用由配置文件组织,因为必须高效,所以涉及包括调用顺序,并发调用等,但配置文件的缺陷是只能实现简单的业务逻辑,所以我们还用了jeval表达式Jar包。       废话不多说,由于服务配置文件是放在Maven项目下的一个子模块的classpath下,该子模块在eclipse下运行是以用文件系...

2015-09-20 12:43:04 426

JVM常用调优参数

  -Xmx:最大JVM可用内存, 例:-Xmx4g-Xms:最小JVM可用内存, 例:Xms4g-Xmn:年轻代内存大小,例:-Xmn2560m-XX:PermSize:永久代内存大小,该值太大会导致fullGC时间过长,太小将增加fullGC频率,例:-XX:PermSize=128m-Xss:线程栈大小,太大将导致JVM可建的线程数量减少,例:-Xss256k-...

2015-09-15 14:38:51 301

Spring MVC 创建自定义转换器

         我们在使用SpringMVC时,常常需要把表单中的参数映射到我们对象的属性中,我们可以在默认的spring-servlet.xml加上如下的配置即可做到普通数据类型的转换,如将String转换成Integer和Double等:          <mvc:annotation-driven />          或          <bean...

2015-06-11 17:14:20 180

原创 【转】JDK1.5-1.9新特性

1.51.自动装箱与拆箱:2.枚举(常用来设计单例模式)3.静态导入4.可变参数5.内省1.61.Web服务元数据2.脚本语言支持3.JTable的排序和过滤4.更简单,更强大的JAX-WS5.轻量级Http Server6.嵌入式数据库 Derby1.71,switch中可以使用字串了2.运用List<String> tempList = new ArrayList<>...

2014-12-15 15:05:20 268

原创 ActiveMQ中的NetworkConnector(网络连接器)详解

       注:本文以ActiveMQ5.10版本为基础。       我们知道,ActiveMQ中的TransportConnector(传输连接器)主要用于配置ActiveMQ服务端和客户端之间的通信方式,NetworkConnector(网络连接器)则主要用来配置ActiveMQ服务端与服务端之间的通信。在某些场景,网络拓扑中我们可能会需要大量的生产者和消费者,也就是说我们会有大量...

2014-11-06 23:37:56 565

原创 WebLogic如何配置SSL

原文 :http://edocs.weblogicfans.net/wls/docs92/secmanage/identity_trust.html文档私钥、数字证书和可信证书颁发机构私钥、数字证书和可信证书颁发机构可建立和验证服务器标识和信任。SSL 使用公钥加密技术进行身份验证。使用公钥加密时,将为一台服务器生成一个公钥和一个私钥。对于用公钥加密的数据,只能用相应的私钥解密;...

2014-10-11 16:58:16 591

原创 Oracle中的递归查询

我们假设有如下一张机构表(ORG):字段类型字段名称字段描述NUMBER(16)ID机构IDNUMBER(16)PARENT_ID父机构IDVARCHAR2(100)NAME机构名称NUMBER(1)ENABLE...

2014-09-03 10:32:00 712

原创 ActiveMQ失效转移(Failover)

       本文的ActiveMQ都基于5.10版本,参考了ActiveMQ官方文档:http://activemq.apache.org/failover-transport-reference.html。      集群是个比较广泛的概念,它有多种形式,关于消息服务的集群,大概分为Consumer集群(消费者集群)和Broker集群(消息服务器集群)两种。      对于...

2014-08-19 16:31:33 2913

原创 ActiveMQ中消费者是如何接收消息的(二)

       上篇文章大致讲述了同步消费者和异步消费者接收消息的异同(详见《ActiveMQ中消费者是如何接收消息的(一)》http://manzhizhen.iteye.com/blog/2094130 ),但我们还未讲到消息是在什么时候放入消费者ActiveMQMessageConsumer类的“消息容器”unconsumedMessages中的,这很关键,因为为了解耦,消费者类不需要知道...

2014-08-15 18:29:25 755

原创 ActiveMQ中消费者是如何接收消息的(一)

       事先说明,本博客关于ActiveMQ的文章都是基于ActiveMQ5.10版本。        初步用过ActiveMQ但又没去研究过源码的朋友肯定有些好奇ActiveMQ中消费者是如何接收消息的呢?本文我就和大家一起从源码角度来初步探讨消费者接收消息的过程。        我们知道,消息传送有两种模型:点对点(P2P)和发布订阅(PUB/SUB),队列模式中,消息生产者叫做发送...

2014-07-27 16:58:50 1298

原创 ActiveMQ的消息重发机制

       本文以ActiveMQ最新的5.10版本为准。       大家知道,JMS规范中,Message消息头接口中有setJMSRedelivered(boolean redelivered)和getJMSRedelivered()方法,用于设置和获取消息的重发标志,当然set方法主要是MOM来调用的,我们客户端使用的是get方法。       还记得当时阿里的电话面试曾问过...

2014-07-16 22:47:06 2346

原创 专访QQ大数据团队,谈分布式计算系统开发

NoSQL是笔者最早接触大数据领域的相关知识,因此在大家都在畅谈Hadoop、Spark时,笔者仍然保留着NoSQL博文的阅读习惯。在偶尔阅读一篇Redis博文过程中,笔者发现了 jacksu的个人博客,并在其中发现了大量的分布式系统操作经验,从而通过他的引荐了解了QQ成立之初后台3个基础团队之一的QQ运营组,这里我们一起走进。 QQ大数据团队 CSDN:首先,请介绍一下您的团队?...

2014-07-14 17:44:26 155

原创 Tomcat连接性能调优

         Tomcat是一款非常流行的Apache的开源Web服务器。         今天我们主要来探讨Tomcat下面的server.xml中的连接器配置对交易系统的性能影响。         我们来假设如下一种场景:         一种交易需要通过客户端C来远程Hessian来同步调用服务端S的服务A来完成整笔交易,客户端C设置的交易超时时间为60秒(比较简单但不精...

2014-05-31 10:52:08 302

原创 Oracle官方教程之Fork/Join

ork/join框架是ExecutorService接口的一种具体实现,目的是为了帮助你更好地利用多处理器带来的好处。它是为那些能够被递归地拆解成子任务的工作类型量身设计的。其目的在于能够使用所有可用的运算能力来提升你的应用的性能。类似于ExecutorService接口的其他实现,fork/join框架会将任务分发给线程池中的工作线程。fork/join框架的独特之处在与它使用工作窃取(wo...

2014-03-27 15:30:17 158

空空如也

空空如也

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

TA关注的人

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