自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大步流星的博客

大步流星的博客

  • 博客(58)
  • 资源 (6)
  • 收藏
  • 关注

原创 Reactive响应式编程系列:解密reactor-netty如何实现响应式

​Reactor 设计模式的基本思想是:当有事件发生时,Reactor 将事件分发给对应的 Handler 处理器,由 Handler 处理器来具体处理事件。Reactor 设计模式 和 Reactive 响应式编程有一定相似之处,两者的核心思想都是事件驱动,通过异步处理来解决高并发下阻塞操作带来的资源消耗和性能下降问题,让我们来探究下 reactor-netty 是如何帮助 Netty 实现响应式的!

2023-05-04 22:25:29 1951 1

原创 Reactive响应式编程系列:解密Lettuce如何实现响应式

本文介绍了响应式编程的历史和理念,并以Java Redis客户端Lettuce为例,剖析了如何实现响应式编程范式。文章重点介绍了响应式编程的优势,包括解决非CPU密集型系统资源消耗问题、增强系统弹性等,并详细介绍了其核心“异步事件驱动” + “背压”的概念。最后,文章提到了Reactive Streams组织和其发布的API规范,为异步流处理提供了一个通用的API规范。

2023-04-16 17:35:27 782 2

原创 SpringCloud全系列(二):Spring Cloud Consul原理解析

1、背景我们知道Spring Boot是为了解决Spring使用成本高的问题,Spring Cloud是为了解决分布式系统开发成本高的问题,而在分布式系统中,服务治理又是绕不开的话题,注册中心又是核心中心的核心。而Consul就是为了在云原生上构建注册中心而准备的,尽管这样定义Consul不够全面(Consul还有很多其他能力),但Consul提供的服务发现和注册的能力才是本文的重点。如你所知,Consul不是由Spring Cloud创建出来的新东西,而是出自HashiCorp公司之手,也是其明星产品

2022-02-08 00:38:32 3509

原创 Spring Cloud Gateway之踩坑日记

楼主所在的团队全面拥抱了Spring Cloud体系,但由于历史原因,以及使用了腾讯云TSF的老版本,加上开发自维护的基础工具包一掺和,所有项目使用的Spring Cloud都停留在 2.1.2.RELEASE 版本,所以Spring Cloud Gateway(后面简称SCG)使用的是 2.1.2.RELEASE 版本。

2021-04-05 22:39:10 15963 29

原创 稳定性全系列(四)——如何建设有效预案

1、背景我在对业务系统进行设计和实现时,始终秉承一个原则,那就是“除了自己的系统,其它调用方(上游)和依赖方(下游)都是不可靠的”,这就好比商场如战场,除了自己,其他人都不可信(防人之心不可无)。既然只有自己是可靠的(可信的),那么多外界不可控因素,我们如何在突发情况发生时,采取最有效的行动,将影响控制在合理区间内,这就是我们“紧急预案”需要做的事情,那么如何建设“有效”预案,则是本文重点讨论的话题。2、预案的组成元素不知道大伙是否有看过阿图·葛文德写的《清单革命》,书中“揭露”了一个惊人...

2020-10-29 16:10:47 2825 4

原创 稳定性全系列(一)——如何做好系统稳定性建设

目录一、背景介绍二、故障源的分类三、稳定性建设四要素第一要素:人第二要素:工具第三要素:预案第四要素:目标四、稳定性建设四个方向第一个方向:根基要抓牢(45%)第二个方向:工作在日常(30%)第三个方向:预案是关键(15%)第四个方向:容量是核心(10%)五、总结一、背景介绍在移动互联网时代,用户群的积累比之前更容易,但同样,也会因为糟糕...

2019-12-24 00:49:37 14892 9

原创 Dubbo源码解析第一期:如何使用Netty4构建RPC

早期学习和使用Dubbo的时候(那时候Dubbo还没成为Apache顶级项目),写过一些源码解读,但随着Dubbo发生了翻天覆地的变化,那些文章早已过时,所以现在计划针对最新的Apache Dubbo源码来进行“阅读理解”,希望和大家一起再探Dubbo的实现。

2024-01-20 10:08:05 1309 1

原创 Reactive响应式编程系列:一个Demo了解如何将事件驱动变成响应式

如何将一个“事件驱动”的框架(例如Netty)简单的接入到响应式流程中来?本文将通过一段代码给出答案!!

2023-08-23 17:47:44 804

原创 SpringCloud全系列(一): OpenFeign原理解析

1、背景之前未曾想过会有全面拥抱Spring Cloud的一天,这是我来腾讯后写的第一篇博客,也是第一篇关于Spring Cloud体系的博客,废话少说,我们进入主题。我们知道HTTP的重要性,也知道开发Web服务端还是很爽的,Spring MVC 或 Spring WebFlux 一套拳打完直接收工即可,但作为Web服务的调用方(这里主要指服务端调用服务端),由于需要熟悉各种(OkHttp、HttpClient)组件的使用,而且还要显示的序列化和反序列化,很多样板代码,写起来很痛苦,瞬间不香了,还

2020-11-25 22:09:35 12675 13

原创 浅谈业务系统设计哲学

其实业务系统研发工作,只有一个要求,那就是交付一个满足组织和业务的当前诉求,并能支持业务未来一段时间发展的一套软件产品。至于其他的,全靠我们业务研发工程师“大展身手”,其中,提升自我的方法之一就是对自己开发的系统提出更高要求,让我们拿出自己最高的水平来做设计和实现,业务千变万化,但业务系统设计总有模式可以参考,让我们一起来探讨和总结业务系统设计的一般哲学。......

2020-08-24 00:25:46 628

原创 稳定性全系列(三)——放火&降级演练

目录1、背景2、混沌工程3、放火&降级演练3.1、变被动为主动3.2、前提条件3.3、方案实施1. 选择一个放火事件2. 确定燃烧半径3. 制定预案4. 确定计划5. 开始放火6. 记录和分析结果4、总结1、背景系统稳定性建设一直是研发、测试、运维团队绕不开的话题,这么多年来,我们为降低系统复杂度、提升系统可维护性绞尽脑汁,微服务...

2020-03-10 00:05:54 2933

原创 稳定性全系列(二)——如何做线上全链路压测

一、背景介绍如今,在微服务架构盛行的互联网时代,微服务架构下模块(本文指可独立部署的服务)之间的关系错综复杂(哪怕是避免模块之间的直接循环依赖都很变得困难),评估一整套业务系统(集群)的容量已经不像评估单机系统那样容易,而系统的容量评估,是稳定性建设的核心内容之一,是我们绕不开的主题。有了系统容量评估,配合今年的业务目标,我们才知道应该申请多少预算、什么时候需要扩容、系统瓶颈在哪、哪些服务...

2020-02-23 16:15:00 3557

原创 Java Agent实战

简单来说,Java Agent就是JVM为了应用程序提供的具有检测功能的软件组件。在Java Agent的上下文中,通过JDK1.5出现的java.lang.instrument.Instrumentation来提供重新定义在运行时加载的类的内容的能力。那么这有什么用?其实对我们实现一些需要通过字节码的形式隐式注入到业务代码中的中间件非常有用(注意,这和Java的远程debug使用的JDWP(Ja...

2019-09-01 14:40:30 3762 2

原创 SLF4J漫谈

SLF4J的全称是Simple Logging Facade for Java,是当前最流行的日志(包装)框架之一,它不是完成的一套日志框架实现,它主要用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署时插入具体的日志框架。可以直接将SLF4J看做其他日志框架的统一API,用SLF4J的好处是,如果后期用户需要切换日志框架的实...

2019-06-02 11:57:03 611 1

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

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

2018-08-04 17:15:52 26929 14

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

上文《Hystrix浅入浅出:(一)背景与功能初探》已经提到过,使用Hystrix我们需要将自动熔断的业务逻辑通过Command模式来包装,于是,我们只需要继承HystrixCommand抽象类,实现run、getFallback等方法,你就拥有了一个具有基本熔断功能的类。从使用来看,所有的核心逻辑都由AbstractCommand(即HystrixCommand的父类,HystrixComman...

2018-05-13 08:57:30 8798 1

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

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

2018-03-17 13:17:29 2274

原创 简单的cpu飙高问题定位脚本

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

2018-02-18 00:29:08 2513 1

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

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

2017-12-08 22:55:03 4157 3

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

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

2017-08-26 13:24:46 5411 1

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

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

2017-07-22 12:28:39 7921 1

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

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

2017-06-18 18:46:26 9947 3

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

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

2017-01-31 12:57:42 5845 5

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

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

2016-12-25 00:40:30 8716 6

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

SPI的全称是ServiceProviderInterface,即服务提供商接口。直白的说,它主要用来实现一个可扩展的Java应用。有人会觉得这就是建立在面向接口编程下的一种为了使组件可扩展或动态变更实现的规范,常见的类SPI的设计有JDBC、JNDI和JAXP等。例如JDBC的架构是由一套API组成,用于给Java应用提供访问不同数据库的能力,而数据库提供商的驱动软件各不相同,JDBC通过提供一

2016-11-17 23:00:54 4508 4

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

我们知道,对于服务治理框架来说,服务通信(RPC)和服务管理两部分必不可少,而服务管理又分为服务注册、服务发现和服务人工介入,我们来看看Dubbo框架的结构图(来源网络): 图中可以看出,服务提供者Provider往服务注册中心Registry注册服务,而的消费者Consumer从服务注册中心订阅它需要的服务,而不是全部服务,当有新的Provider出现,或者现有Provider宕机,注册

2016-11-03 20:43:20 22414 3

原创 分布式跟踪系统(一):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/),讲述了Dap...

2016-10-13 23:58:20 23438 9

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

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

2016-09-21 13:06:40 8372 7

原创 可重入锁ReentrantLock初探

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

2016-09-21 13:06:34 620

原创 信号量Semaphore初探

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

2016-09-21 13:06:28 1739 1

原创 AbstractQueuedSynchronizer初探

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

2016-09-21 13:06:22 578

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

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

2016-09-21 13:06:16 854

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

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

2016-09-21 13:06:10 4387 1

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

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

2016-09-21 13:06:04 568

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

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

2016-09-21 13:05:59 678

原创 RocketMQ初探一:NameServer的作用

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

2016-09-21 13:05:53 15978 8

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

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

2016-09-21 13:05:47 10848

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

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

2016-09-21 13:05:41 1185

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

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

2016-09-21 13:05:36 3384 5

原创 HttpClient入门示例

如果你是使用maven来管理项目,你需要在pom.xml添加如下配置:                    org.apache.httpcomponents            httpclient            4.5                            org.apache.httpcomponents            httpmime       

2016-09-21 13:05:30 358

mac docker.dmg

最新的mac docker安装包

2022-06-26

Java消息服务

Java消息服务(第二版),Java开发者学习消息中间件的必读书籍,JMS!!!!

2018-02-21

Java NIO pdf

Java NIO中文版高清可选文字pdf,学习nio不可错过的好书

2018-02-21

图解设计模式pdf

图解设计模式高清可选文字的pdf,学习设计模式不可错过的好书!

2018-02-21

RxJava响应式编程;RxJava反应式编程

RxJava响应式编程(影印版) pdf,学习RxJava和Reactive Streams必读之书(英文名:Reactive Programming with RxJava)

2018-02-20

空空如也

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

TA关注的人

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