- 博客(31)
- 资源 (8)
- 收藏
- 关注
原创 xxj-job服务端架构流程
本篇我们主要讲一下《xxl-job的调度流程》,在讲调度流程前,我们先概述一下:客户端接入流程、服务端配置流程和路由策略参数详解。
2022-11-29 19:02:24
733
原创 Apisix网关快速入门实践
APISIX是一个微服务API网关,具有高性能、可扩展性等优点。它基于nginx(openresty)、Lua、etcd实现功能,借鉴了Kong的思路。和传统的API网关相比,APISIX具有较高的性能和较低的资源消耗,并且具有丰富的插件,也方便自己进行插件扩展。
2022-11-18 16:32:32
2498
原创 ElasticSearch部署架构和容量规划
前面介绍了ElasticSearch原理和使用相关的内容,在生产环境如何比较科学的进行容量规划、部署、调优、排查问题呢,业界和官方也对相关的问题进行总结,我这边也结合自己的经验对这些使用ElasticSearch经常遇到的问题进行了总结。其中主要包括以下三大模块:ElasticSearch有多种类型的节点,在前面概述和核心也已经介绍过了。在这里可以重新回顾下。ElasticSearch的部署节点类型如下:主节点及其候选节点,负责集群状态(cluster state)的管理配置项:node.master,默认
2022-06-03 13:21:42
1944
原创 RocketMQ—Producer(五)路由队列选择
前言路由队列选择的作用在于发送消息时可以指定发送到某个broker队列,或均衡发送到broker队列,其作用就是在于选择合适的队列进行消息发送。目前客户端队列选择分为三种方式:第一种:可根据MessageQueueSelector的实现或自扩展实现选择队列; 第二种:未开启Broker故障延迟机制(sendLatencyFaultEnable:false),会采用默认轮训机制(默认是此种实现方式); 第三种:开启Broker故障延迟机制(sendLatencyFaultEnable:true
2022-05-17 09:37:04
2289
1
原创 ElasticSearch查询流程详解
一、前言前面已经介绍了ElasticSearch的写入流程,了解了ElasticSearch写入时的分布式特性的相关原理。ElasticSearch作为一款具有强大搜索功能的存储引擎,它的读取是什么样的呢?读取相比写入简单得多,但是在使用过程中有哪些需要我们注意的呢?本篇文章会进行详细的分析。在前面的文章我们已经知道ElasticSearch的读取分为两种GET和SEARCH。这两种操作是有一定的差异的,下面我们先对这两种核心的数据读取方式进行一一分析。二、GET的流程2.1 整体流程
2022-05-12 18:35:11
2475
原创 REDIS集群安装运维调优及常见问题处理
上篇详细阐述了redis集群的安装搭建以及集群监控变更相关运维操作,本篇继续对redis集群调优和常见问题的解决进行介绍。一、集群调优1.1 Linux 内存内核参数优化:Vm.overcommit_memory参数说明: 文件指定了内核针对内存分配的策略,其值可以是0、1、2。0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存, 内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2:
2022-04-26 09:36:36
1465
原创 Spring核心流程分析
Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转模式(IOC)将应用的配置和依赖性规范与实际的应用程序代码分开。BeanFactory使用依赖注入(DI)的方式给组件提供依赖 。一、Bean的注册Spring对于Bean的配置有两种方式:基于资源文件解析的方式,其中最常用的是XML配置优点:可以在后期维护的时候适当地调整Bean管理模式,并且只要遵循一定的命名规范,可以让程序员不必关心Bean之间的依赖关系 。缺点:.
2022-04-21 09:21:34
452
原创 RocketMQ—Producer(四)消息发送流程
前 言在深入讲解消息发送之前,我们可先简单概括消息的发送的主要步骤可分为:消息验证、路由查询、选择消息队列、消息组装、消息发送、消息结果处理、异常处理;(单向发送并不处理消息发送结果);同步、异步、单向发送消息的入口API有一些区别,本文将以下面接口实现类为入口分析消息发送的流程:DefaultMQProducerImpl#sendDefaultImpl(由于消息发送细节非常多,本文将分析核心步骤,如漏掉还请各位查漏补缺,自行分析哈)同步发送总结流程图如下:一、源码分析Def
2022-04-12 08:30:00
945
原创 RocketMQ—Producer(三)发送方式和消息类型
一:发送方式讲解RocketMQ版提供三种方式来发送消息:同步(Sync)发送、异步(Async)发送和单向(Oneway)发送。 我们会介绍每种发送方式的原理、应用场景、代码差异,以及三种发送方式的对比。1.1 同步发送CommunicationMode#SYNC原理:同步发送是指发送者向MQ执行发送消息API时,同步等待,直到消息服务器返回发送结果 。应用场景:此种方式应用场景非常广泛,例如重要通知邮件、报名短信通知、营销短信系统等。同步发送接口介绍:MQPro
2022-04-12 08:00:00
3545
原创 Tomcat:应用加载原理分析
前情回顾上一篇文章主要了解了一下Tomcat启动入口,以及初步的分析了Tomcat的启动流程,下面我们将会解密Tomcat应用部署的实际流程。一、直观对比虽然前面已经说了那么多关于Tomcat的东西,但是我相信绝大部分同学应该都没有专门的去研究过Tomcat的内部实现。我们接触最多的应该还是上传一个war包丢在webapps目录下,然后重启一下Tomcat服务器(甚至不重启)。下面我们以图形的形式,直观的对比Tomcat各组件的关系。二、应用部署与加载流程分析下面就针对应用部署与
2022-04-11 08:00:00
781
原创 Spring如何解决循环依赖
一、背景我们都知道Spring可以通过xml,或者解析我们的注解,通过扫描所有资源文件,从而将所有匹配到的资源封装成为一个BeanDefinition注册到我们的BeanFactory中。此时,Spring已经知道了所有我们想要注册到容器中的BeanDefinition,下一步就是将BeanDefinition实例化,这样才能提供出来给我们使用。二、Spring中Bean的实例化我们发现Spring整个加载过程都在AbstractApplicationContext.refresh()中去完
2022-04-11 08:00:00
236
原创 Spring定义BeanDefinition
一、背景注解( Annotation) 是 JDK1.5 中引入的 一个新特性。从Spring2.0以后的版本中,Spring引入了基于注解方式的配置 ,用于取代 XML 配置文件 ,从而极简化了 Bean 的配置,Spring后来的新版本。话不多说,直接上图:在Spring Boot 中完全采用基于注解 ( Spring4.x 引 入了更加智能的@Condition 系列注解,实现 “零 XML 的配置”(当然,同时也支持之前的 XML 配置文件方式)。我们知道,@Component注
2022-04-10 15:44:31
839
原创 Spring容器的核心组件
一、背景不妨大胆推测一下:Spring是如何处理我们的Bean的呢?通过读取解析文件中的资源配置,将需要交给容器管理的类先找个地方集中起来(注册表),最后将这个注册表中所有的Bean定义实例化为Bean。将Bean在内存中缓存起来(HashMap),在我们需要使用的时候根据key值直接取出来我们的对象。事实上,Spring的确也是这么处理的。只不过它的设计远比我们所能想到的更要复杂与全面。二、认识一下BeanFactory我们知道Spring使用BeanFactory来产生和
2022-04-10 15:12:50
1926
原创 Spring容器的灵魂
一、背景Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转模式将应用的配置和依赖性规范与实际的应用程序代码分开。BeanFactory使用依赖注入的方式给组件提供依赖 。二、准备工作准备工作:运行一个Springboot工程新建一个Springboot工程,由于我平时使用的版本是2.1.3.RELEASE,所以我选择了自己的常用版本。使用maven项目,引入spring-boot-starter依赖包.OK一个最简单.
2022-04-10 14:59:45
146
原创 动态多数据源使用seata实现分布式事务
一、背景目前公司很多应用因为历史原因,一个应用访问多个数据库进行插入和更新操作,这就可能产生数据一致性问题,同时应用如果跨服务的调用也可能会产生事务问题。目前应用是采用dynamic-datasource-spring-boot-starter做多数据源控制的。而seata是一款开源的分布式事务框架。我们了解到dynamic-datasource-spring-boot-starter的新版本已经支持基于seata的分布式事务了,而官网的例子基本都是标准的单数据源的整合,下面我们分别对dynam..
2021-12-03 16:53:36
4466
原创 字节跳动广告场景使用的“ClickHouse”介绍
背景随着互联网的快速发展和互联网+物联网的场景不断增加,信息数据量正在呈几何式的爆发。这些海量数据决定着企业的未来发展。这些数据中,有用的价值数据就需要数据分析师或分析系统去分析。但是使用一般的工具己满足不了和承受不住庞大的数据带来的压力。近两年针对大数据的开发工具开启了开源大潮,为大数据开发者提供了多个选择,但是也增加了开发者选择合适的工具的难度。尤其是新入行的开发者,会增加很大的学习成本,框架的多样化和复杂度成了很大的难题。有时候会需要各种框架、工具、中间件、平台等整合到一起才能完成数据分
2021-11-25 08:51:55
631
原创 Tomcat:应用加载原理分析
前情回顾上一篇文章主要了解了一下Tomcat启动入口,以及初步的分析了Tomcat的启动流程,下面我们将会解密Tomcat应用部署的实际流程。一、直观对比虽然前面已经说了那么多关于Tomcat的东西,但是我相信绝大部分同学应该都没有专门的去研究过Tomcat的内部实现。我们接触最多的应该还是上传一个war包丢在webapps目录下,然后重启一下Tomcat服务器(甚至不重启)。下面我们以图形的形式,直观的对比Tomcat各组件的关系。二、应用部署与加载流程分析下面就
2021-11-16 09:29:00
1125
原创 ElasticSearch写入流程详解
一、前言 介绍我们在前面已经知道ElasticSearch底层的写入是基于lucence依进行doc写入的。ElasticSearch作为一款分布式系统,在写入数据时还需要考虑很多重要的事项,比如:可靠性、原子性、一致性、实时性、隔离性、性能等多个指标。ElasticSearch是如何做到的呢?下面我们针对ElasticSearch的写入进行分析。二、lucence写2.1 增删改ElasticSearch拿到一个doc后调用lucence的api进行写入的。pub...
2021-11-12 09:12:56
2749
原创 Tomcat启动关闭流程分析
前言 上一篇文章我们全面的介绍了Tomcat各文件目录的作用、源码各模块功能和组件之间的关系,下面我们从源码的角度去看看Tomcat是如何工作的。一、启动脚本分析 tomcat为我们提供了启动和停止脚本,在bin目录下:startup.sh/startup.bat;shutdown.sh/shutdown.bat下面我们以startup.sh启动脚本为例,看一下Tomcat如何运行的。# ...省略部分逻辑代码PRGDIR=`dirname "$...
2021-11-10 09:32:41
743
原创 Tomcat项目结构及架构分析
一、前期准备1.1概述Apache Tomcat自1999年第一个版本发布至今,已经成为一款成熟的轻量级的Java应用服务器,它深受Java研发人员喜爱。虽然它已经更新到10.x的版本,但是大部分人依然使用jdk8和9.0.x因此本文基于tomcat-9.0.x(官网下载地址为:https://tomcat.apache.org/download-90.cgi)从使用和实现的原理探究其经久不衰的奥秘。1.2 版本差异引自ApacheTomcat官网http://tomcat...
2021-11-08 09:16:55
1094
原创 Redis(四):主从同步
前三篇详细分析了redis的特性和核心原理,从本篇开始将对redis的部署结构和运行模式进行分析解读。真正生产环境当中我们基本不会使用单节点的redis来提供服务,至少是主从结构的哨兵或者集群模式,以保障redis服务的可靠性。本篇就来详细解读下redis的主从同步机制。一、Redis主从有两种结构模型:1.1 主从复制 一主N从的这种复制结构复制关系只有一级,也是使用最多的形式,通常搭建哨兵或者集群结构的redis都是采用的这种复制结构,能够通过一级从节点的复制关系...
2021-11-05 08:30:00
735
原创 RocketMQ—Producer(一)启动流程解密
以下为RocketMQ—生产者系列文章索引:1:启动流程(本文)2:路由动态更新3:发送方式分析+消息类型区别4:生产者消息的发送流程5:路由队列选择,客户端冗错策略(问题答疑)一、Producer介绍Producer 是 RocketMQ 消息的投递者,负责生产消息。它会与NameServer集群中的其中一个节点(随机)建立长连接(Keep-alive),定期从NameServer读取Topic路由信息,将路由信息保存在本地内存中;它向提供Topic服务的M.
2021-11-03 00:50:34
2846
原创 RocketMQ—NameServer总结及核心源码剖析
一、NameServer介绍NameServer 是专为 RocketMQ 设计的轻量级名称服务,具有简单、可集群横向扩展、无状态,节点之间互不通信等特点。整个Rocketmq集群的工作原理如下图所示:可以看到,RocketMQ架构上主要分为四部分, Broker、Producer、Consumer、NameServer,其他三个都会与NameServer进行通信: NameServer: 一个简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broke
2021-11-01 08:30:00
663
1
原创 Elasticsearch(三):实战
一、背景前面已经对elasticsearch的核心概念进行比较详细的介绍,但是在实际生产中我们如何使用elasticsearch呢?本篇文章我们先介绍一些elasticsearch常见的使用方法,然后通过一个实际的例子来加深对elasticsearch使用的理解。这个实际例子是网站上收集的用户点击菜单的行为日志数据存储在elasticsearch上,并可以通过工具可以通过一些图表来分析用户的行为。总体的目标:满足多个维度图表的查看,索引可以定期归档或者存储不用人工干预。二、映射和模板2.1.
2021-10-29 08:30:00
2769
原创 Redis(三):持久化
Redis作为内存数据库高性能的同时也带来了内存存储数据在重启或异常宕机后会丢失数据的问题。因此redis提供了RDB、AOF和混合持久化三种方式来对内存中的数据进行持久化。一、RDBRDB是redis默认的持久化方式,符合一定条件时将目前服务中的所有数据全部写入到磁盘中。优势 rdb是二进制压缩文件,本身占用空间很小,数据恢复速度快。 对redis服务能力影响较小,只有在fork子进程的瞬间会阻塞,其他情况下都不影响主进程提供的服务能力。 劣势:数据可靠性相对ao..
2021-10-27 09:10:23
508
原创 Elasticsearch(二):核心
1 开篇 上一篇文章对elasticsearch进行了整体的介绍,初步了解了下elasticsearch的发展、应用场景、整体功能架构和一些基本的概念,并且实际上手搭建了一个集群做了下文档的操作;elasticsearch是如何进行数据分片的呢,集群的容错性又是如何保证的呢。为什么elasticsearch是近实时搜索而不是实时搜索的呢?带着这些问题,我们将从分片容错、选主、索引生命周期、倒排索引等核心概念来深入了解elasticsearch。2 分片与容错2.1 分片 ...
2021-10-25 09:24:19
795
原创 Redis(二):内存模型及回收算法
前言上一篇我们从redis的线程模型分析了redis为什么使用单线程,以及从单线程性能依旧很出色分析了基于I/O多路复用的反应堆模式请求处理流程。本篇将此内存结构出发来分析redisDB的数据结构以及内存管理机制。 redis以内存作为存储资源也是它高性能的一个核心原因,接下来我们就来分析下redis是如何管理内存资源的。一:Redisdb数据结构 Redis源码中对redisdb的定义如上图,其中dict *dict成员就是将key和具体的对象(可能是s...
2021-10-22 13:51:20
563
原创 Elasticsearch(一):概述
1、Elasticsearch是什么elasticsearch是一款开源的分布式搜索、存储、分析引擎;它目前的时效为近实时性的。Solar也是顶级的开源搜索引擎,也是基于lucene;elasticsearch与Solar相比安装更加简单,对于一些复杂的搜索支持更好,在大数据量下,elasticsearch的性能更好,现在被很多公司大量的使用。我们可以看到数据库搜索引擎排名已经很高了https://db-engines.com/en/ranking2、Elasticsear
2021-10-19 20:50:12
1215
原创 Redis(一):单线程为何还能这么快?
提到redis马上在我们脑海中会浮现出这样一些关键字:单线程、高性能、内存数据库、kv存储......这些关键字都从不同层面描述了redis的一些相关特性和技术实现。那么为什么redis具备这些特性以及是如何实现的,本文将进行一一分析。一、单线程1.1 为什么是单线程 总结Redis的普通KV存储瓶颈不在 CPU,而往往可能受到内存和网络I/O 的制约。 Redis 中有多种类型的数据操作,甚至包括一些事务处理,如果采用多线程,则会被多线程产生的切换问题而困扰,也可能因为加锁导致.
2021-10-18 08:50:05
209
Unknown system variable 'storage_engine'
2017-12-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人