编者说:本篇由读者投稿,融入开源社区、将自己的目开源将极大提升技术影响力,对职场具有无法比拟促进性。初衷:数据文件的处理,其中涉及到一些定时任务处理。当时刚进XXX公司参与第一个项目,但是意识到公司的产品业务基本上都是围绕数据做一些信息或线索的挖掘,尤其是离线数据,应该会有很多各种各样的任务式场景,编写一个通用的轻量级定时任务处理,能够提高工作中的开发效率和质量,以及运维的能力。目标:设计一个通用...
2023-04-21 15:25:38 3235浏览 0点赞 0回复 0收藏
Netty是一款非常优秀的网络编程框架,是对NIO的二次封装,本文将重点剖析Netty客户端的启动流程,深入底层了解如何使用NIO编程客户端。本文是笔者基于问题的启发式源码阅读技巧的展示,请带着如下问题开始本文的阅读:Netty是如何将客户端的事件加入到事件链中?Netty客户端在启动时需要注册读事件?Netty客户端在启动时需要注册写事件?如果让你基于NIO写一个客户端需要实现的关键点是什么呢?上面的问题也可以这样问:在使用N...
2023-04-21 15:24:57 3312浏览 0点赞 0回复 0收藏
Dubbo在众多的微服务框架中脱颖而出,占据RPC服务框架的半壁江山,非常具有普适性,熟练掌握Dubbo的应用技巧后深刻理解其内部实现原理,让大家能更好的掌控工作,助力职场,特别能让大家在面试中脱颖而出。那Dubbo内部的设计理念,实现原理是什么呢?本文将结合官方提供的3张图,从如下三个方面介绍其内部的核心实现、以及如何指导实践。1、服务注册与发现机制Dubbo的服务注册与发现机制如下图所示:在Dubbo中存在4类角色:Regi...
2023-04-21 15:23:42 2755浏览 0点赞 0回复 0收藏
笔者看来Netty的内核主要包括如下图三个部分:其各个核心模块主要的职责如下:内存管理主要提高高效的内存管理,包含内存分配,内存回收。网通通道复制网络通信,例如实现对NIO、OIO等底层JAVAAPI的封装,简化网络编程模型。线程模型提供高效的线程协作模型。大家不妨回想一下在以往的面试的过程中,面试官通常会问:Netty的线程模型是什么?主从多Reactor模型,相信大家都能脱口而出,然后呢?就没有然后了?线程模型在网络通...
2023-04-21 15:22:23 3059浏览 0点赞 0回复 0收藏
上一篇详细介绍了Netty的编解码的基本实现原理,本节将重点探讨网络编程中一种非常通用的协议设计方法论:协议头+消息体。所谓的通信协议就是通信双方共同遵循的一种“约定”,用于通信发送方将内容按照“通信协议”所规定的格式组装成“二进制流”,通信接收方按照“通信协议”所规定的格式正确的从二进制流中解码出一个个原始请求。那通信协议如何设计呢?温馨提示:本文遵循的目录结构:先提炼通信协议设计的通用方法论,然后...
2023-04-21 15:21:55 2967浏览 0点赞 0回复 0收藏
本文主要介绍网络通信中与通信息息相关的重要部分:通信协议的底层实现原理:编码与解码。温馨提示:源码分析或许比较枯燥,在浏览的过程中建议重点关注黑色字体与流程图,是根据源码进行的提炼,突出源码背后的设计理念。1、Netty4编码解码概述Netty中定义的编码解码器核心类图如下:Decoder(解码器)继承自Inbound事件处理器,而Encoder(编码器)继承自Outbound事件处理器。其实不难理解,以服务端接收请求、返回响应结果的视角...
2023-04-21 15:05:19 3559浏览 0点赞 0回复 0收藏
温馨提示:源码分析AlibabaSentinel专栏开始连载,本文展示如何学习一个全新的技术的方法。该专栏基于1.7.0版本。在学习一个新技术或新框架时,建议先查看其官方文档,以获得对其形成一个整体的认识。https:github.comalibabaSentinelwiki%E4%BB%8B%E7%BB%8D1、Sentinel是什么?主要能解决什么问题?按照官方的定义,Sentinel意为分布式系统的流量防卫兵,主要提供限流、熔断等服务治理相关的功能。服务的动态注册、服务发现是S...
2023-04-21 15:00:44 3076浏览 0点赞 0回复 0收藏
本节重点讨论Kafka的消息拉起流程。温馨提示:本文源码分析部分比较长,基本点出了Kafka消息拉取相关的核心要点,如果对源码不感兴趣的话,可以直接跳到文末的流程图。1、KafkaConsumerpoll详解消息拉起主要入口为:KafkaConsumerpoll方法,其声明如下:publicConsumerRecords<K,V>poll(finalDurationtimeout){1returnpoll(time.timer(timeout),true);2}代码@1:参数为超时时间,使用java的Duration来定义。代码@2:调用内...
2023-04-21 14:59:41 2729浏览 0点赞 0回复 0收藏
踩坑记:rocketmqconsole消费TPS为0,但消息积压数却在降低是个什么“鬼”1、背景当消息积压后,消费端将其代码进行优化后,重启消费端服务器,从rocketmqconsole上发现TPS为0。如图所示。乍一看,第一时间得出应用还未恢复,就开始去查看相关的启动日志,通常查看的是应用服务器的homebaseuserlogsrockemqlogsrocketmqclient.logs,碰巧又看到如下的错误日志:RebalanceService[BUG]ConsumerGroup:consumergroup1TheconsumerId:...
2023-04-21 14:58:39 8182浏览 0点赞 0回复 0收藏
温馨提示:整个Kafka专栏基于kafka2.2.1版本。1、KafkaConsumer概述根据KafkaConsumer类上的注释上来看KafkaConsumer具有如下特征:在Kafka中KafkaConsumer是线程不安全的。2.2.1版本的KafkaConsumer兼容kafka0.10.0和0.11.0等低版本。消息偏移量与消费偏移量(消息消费进度)Kafka为分区中的每一条消息维护一个偏移量,即消息偏移量。这个偏移量充当该分区内记录的唯一标识符。消费偏移量(消息消费进度)存储的是消费组当前的处理...
2023-04-21 14:57:45 3435浏览 0点赞 0回复 0收藏
温馨提示:本文基于Kafka2.2.1版本。如果觉得源码阅读比较枯燥,本文的中间有Sender线程的工作流程图。上文《源码分析Kafka消息发送流程》已经详细介绍了KafkaProducersend方法的流程,该方法只是将消息追加到KafKaProducer的缓存中,并未真正的向broker发送消息,本文将来探讨Kafka的Sender线程。在KafkaProducer中会启动一个单独的线程,其名称为“kafkaproducernetworkthreadclientID”,其中clientID为生产者的id。1、Sende...
2023-02-27 16:12:06 4196浏览 0点赞 0回复 0收藏
1、DegradeSlot概述Sentinel中的熔断实现类为DegradeSlot。DegradeSlot的类定义如下图所示:由此可见,熔断主要实现逻辑定义在DegradeRuleManager的checkDegrade方法中。DegradeRuleManagercheckDegrade代码1:首先从degradeRules熔断规则缓存中获取资源的熔断规则。代码2:遍历熔断规则列表。代码3:调用熔断规则DegradeRule的passCheck,如果该方法返回false,则表示需要熔断,则抛出DegradeException异常。即实现熔断的核心...
2023-02-20 17:12:08 3294浏览 0点赞 0回复 0收藏
在介绍集群限流之前需要首先掌握动态数据源的配置方式,本文将根据Sentinel官方提供的代码提出整体架构思路,并最终给出实践指导。温馨提示:本文主要分为动态数据源架构设计理念、从官方示例寻找改造思路、基于SpringBoot改造方案三个部分来详细剖析Sentienl动态数据源的改造方案,循序渐进,不仅解决问题本身,更是反映了作者研究一个问题的思路与方法。1、架构设计理念在Sentinel中主要有如下几个角色:管理后台、限流熔断规...
2023-02-20 17:11:10 3505浏览 0点赞 0回复 0收藏
1、集群限流使用场景首先一个服务有三个服务提供者,但这三台集群的硬件配置不一样,如图所示:为了充分利用硬件的资源,诸如Dubbo都提供了基于权重的负载均衡机制,例如可以将8C16G的机器设置的权重是4C8G的两倍,这样充分利用硬件资源,假如现在需要引入Sentinel的限流机制,例如为一个Dubbo服务设置限流规则,这样由于三台集群分担的流量不均匀,会导致无法重复利用高配机器的资源。假设经过压测,机器配置为C48G最高能承受...
2023-02-20 17:10:30 3808浏览 0点赞 0回复 0收藏
本文是源码分析Sentinel系列的第十三篇,已经非常详细的介绍了Sentinel的架构体系、滑动窗口、调用链上下文、限流、熔断的实现原理,相信各位读者朋友们对Sentinel有一个较为体系化的认知了,这个时候是该开始如何在生产环境进行运用了。本文将以Dubbo服务调用为案例剖析场景,尝试对官方提供的Dubbo适配器做一个研究学习并对此做出自己的评价,抛出我的观点,期待与大家共同探讨,交流。一个DubboRPC的简易调用过程如下图所示...
2023-02-20 17:08:10 5891浏览 0点赞 0回复 0收藏
1、问题现象首先接到项目反馈使用RocketMQ会出现如下错误:错误信息关键点:MQBrokerException:CODE:2DESC:[TIMEOUTCLEANQUEUE]brokerbusy,startflowcontrolforawhile,periodinqueue:205ms,sizeofqueue:880。由于项目组并没有对消息发送失败做任何补偿,导致丢失消息发送失败,故需要对这个问题进行深层次的探讨,并加以解决。2、问题分析首先我们根据关键字:TIMEOUTCLEANQUEUE去RocketMQ中查询,去探究在什么时候会抛出如...
2023-02-20 17:07:28 5065浏览 0点赞 0回复 0收藏
本文主要分如下几个部分展开:Linux服务器安装RocketMQ、RocketMQConsoleIDEA中搭建可调试环境1、Linux安装RocketMQ、RocketMQConsole1.1安装RocketMQStep1:从如下地址下载RocketMQ安装包cdoptapplicationwgethttps:mirrors.tuna.tsinghua.edu.cnapacherocketmq4.7.1rocketmqall4.7.1binrelease.zipStep2:解压安装包unziprocketmqall4.7.1binrelease.ziplsl解压后的文件如下图所示:其中conf文件夹存放的是RocketMQ的配置文件...
2023-02-20 17:06:53 3647浏览 0点赞 0回复 0收藏
在正式进入RocketMQ的学习之前,我觉得有必要梳理一下RocketMQ核心概念,为大家学习RocketMQ打下牢固的基础。1、RocketMQ部署架构在RocketMQ主要的组件如下:NameserverNameserver集群,topic的路由注册中心,为客户端根据Topic提供路由服务,从而引导客户端向Broker发送消息。Nameserver之间的节点不通信。路由信息在Nameserver集群中数据一致性采取的最终一致性。Broker消息存储服务器,分为两种角色:Master与Slave,上图中...
2023-02-20 17:02:00 4378浏览 0点赞 0回复 0收藏
1、场景描述例如订单库进行了分库分表,其示例如下图所示:现在的需求是希望创建一个任务就将数据同步到MQ集群,而不是为每一个数据库实例单独创建一个任务,将其数据导入到MQ集群,因为同步任务除了库不同之外,表的结构、数据映射规则都是一致的。2、flinkx的解决方案详解2.1finkStreamAPI开发基本流程使用FlinkStreamAPI编程的通用步骤如下图所示:温馨提示:有关StreamAPI的详细内容将在后续的文章中展开,本文主要是关注In...
2023-02-20 17:00:23 3870浏览 0点赞 0回复 0收藏
1、通道概述我们从如下几个方面来简单了解一下Channel。通道的当前状态,open(端口打开)、connect(连接)。通道的配置,包含通道的配置属性与网络通信选项(ChannelOption)。IO通道方法诸如read、write、connect、bind与管道(ChannelPipeline)。所有IO操作在Netty中都是异步的,调用IO方法例如write方法后,并不是等IO操作实际完成后再返回,而是会立即返回一个凭证,IO操作完成后会将结果写入凭证中,典型的Future设计模式。Chan...
2023-02-20 16:59:05 4774浏览 0点赞 0回复 0收藏