- 博客(63)
- 资源 (24)
- 收藏
- 关注
原创 sentinel基于滑动窗口实现实时指标统计原理
sentinel通过责任链模式,让每个slot来实现一种功能来实现流量控制、熔断降级等功能。其中,最重要的一个Slot非StatisticSlot莫属,它通过统计单位时间的调用数、成功数、失败数等,为流量控制、熔断降级等提供数据支撑,而StatisticSlot的底层是基于滑动窗口实现实时指标统计的,下面介绍一下StatisticSlot的工作过程一、StatisticSlot的入口 sentinel将多个slot串联起来,每个slot在处理完成后,将数据传递给下一个slot,这些slot都是...
2021-07-03 17:38:41
651
1
原创 Elastic-Job-Lite 的失效转移机制
Elastic-Job-Lite作为一个分布式任务调度组件,当某个执行的机器出现宕机故障时,需要将这个机器上没有执行的任务分配到其它机器上执行,这就是Elastic-job的失效转移机制。下面详细介绍一下Elastic-job-lite的失效转移机制Elastic-Job-Lite处理失效机制的几个类FailoverService,作业失效转移服务。 FailoverNode,作业失效转移数据存储路径。 FailoverListenerManager,作业失效转移监听管理器。一、作业节点失效监
2021-06-27 22:08:56
887
2
原创 Elastic-Job-Lite 的元数据管理
Elastic-Job-Lite作为一个分布式任务调度组件,通过Zookeeper来实现元数据的管理,下面介绍一下Elastic-Job-Lite的几个重要的元数据类。一、ConfigurationServiceConfigurationService是分布式作业配置服务,用来记录作业的配置信息。在zookeeper中的目录结构是 $jobName/config 对应的值是json格式的字符串,里面记录了本次作业的配置 在 Zookeeper 看一个作业的配置节点数据存储...
2021-06-26 12:50:51
314
2
原创 Elastic-Job-Lite 执行流程
Elastic-Job-Lite是一个被广泛使用的分布式任务调度框架,下面介绍一下运用Elastic-Job-Lite来执行分布式任务的例子public class MyElasticJob implements SimpleJob { public void execute(ShardingContext context) { System.out.println(context.toString()); switch (context.getSharding
2021-05-23 23:40:27
710
原创 Elastic-Job-Lite分片策略
Elastic-Job-Lite在运行时会对作业进行分片,通过继承JobShardingStrategy接口#sharding(...)来执行作业分片的操作public interface JobShardingStrategy { /** * 作业分片. * * @param jobInstances 所有参与分片的单元列表 * @param jobName 作业名称 * @param shardingTotalCount 分片总
2021-05-21 20:13:57
461
原创 zookeeper保证一致性的协议ZAB
一、 ZAB 协议介绍ZAB (Zookeeper Atomic Broadcast原子广播协议) 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的一致性协议。基于该协议,ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副本之间的数据一致性。分布式系统中leader负责外部客户端的写请求。follower服务器负责读跟同步。这时需要解决俩问题。 Leader 服务器是如何把数据更新到所有的Follower的。 Leader 服务器突然间失效了,..
2021-02-21 21:04:06
177
原创 Java线程池ThreadPoolExecutor-终止线程池原理
一、终止线程池主要有两个方法:shutdown() 和 shutdownNow()。shutdown()后线程池将变成shutdown状态,此时不接收新任务,但会处理完正在运行的 和 在阻塞队列中等待处理的任务。shutdownNow()后线程池将变成stop状态,此时不接收新任务,不再处理在阻塞队列中等待的任务,还会尝试中断正在处理中的工作线程。二、shutdown() – 温柔的终止线程池public void shutdown() { final ReentrantLock ma
2021-02-21 17:16:32
1285
1
原创 kafka消费原理
consumer 采用 pull(拉)模式从 broker 中读取数据。push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适当的速率消费消息。pull 模式不足之处是,如果 kafka 没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka 的消费者在消费数
2021-01-03 16:43:04
834
原创 Netty启动流程分析
Netty 是基于 Java NIO 的异步事件驱动的网络应用框架,使用 Netty 可以快速开发网络应用,下面以一段代码来说明一下Netty的启动流程。public void start() { ServerBootstrap bootstrap; EventLoopGroup group; MessageCollector collector; Channel serverChannel; //启动NIO服务的辅助启动类 bootstrap =
2020-12-27 20:53:37
193
原创 Mysql InnoDB如何保证事务
Mysql存储引擎InnoDB支持事务操作,即支持原子性、一致性、隔离性、持久性(ACID)特性。下面介绍一下InnoDB是怎样做到这几个特性的。原子性:原子性是指事务中的语句要么全部执行成功、要么全部不执行,原子性是通过undo log实现的。持久性:持久性是指事务一旦提交,它对数据库的改变就应该是永久性的,不会因为宕机等原因而丢失数据,持久性是通过redo log实现的。一致性:事务前后的数据必须保持一致性。一致性是通过redo log+undo log实现的。隔离性:隔离性是指,事务内部的操作
2020-12-20 22:15:06
920
原创 Elasticsearch选主流程
Elasticsearch作为一个分布式搜索和分析引擎需要一个master来管理集群中的节点、维护集群的元数据。与其它采用zookeeper来实现选主的分布式系统不同,Elasticsearch自己实现了自己的选举流程,下面介绍一下Elasticsearch的选主流程Elasticsearch中的Discovery模块负责发现集群中的节点,以及选择主节点。ES支持多种不同的Discovery选择,内置的实现称为Zen Discovery,其封装了节点发现(ping)、选主等实现过程。Elastics
2020-12-06 20:23:53
482
原创 Mysql数据库中的锁
Mysql是我们常用的数据库,为了保证数据的并发操作而不出错,需要多种锁来操作。下面介绍一下数据库的隔离基本在RR(可重复读)级别下常用的几种锁行锁(Record Lock)(1)记录锁, 仅仅锁住索引记录的一行,在单条索引记录上加锁。(2)record lock锁住的永远是索引,而非记录本身,即使该表上没有任何索引,那么innodb会在后台创建一个隐藏的聚集主键索引,那么锁住的就是这个隐藏的聚集主键索引。如果执行的语句如下:select * from db_table where un
2020-11-29 23:45:08
141
原创 RabbitMQ与Kafka的架构区别
RabbitMQ与Kafka是两周常用的消息队列,下面介绍一下它们的原理和区别一、RabbitMQ的架构: RabbitMQ是一个分布式系统,这里面有几个抽象概念。broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:每个队列都分为一个主队列和若干个镜像队列。 mirror queue:镜像队列,作为master queue的备份。在master queue所在节点挂掉之后,系统把mirror queue提升为master ..
2020-11-22 21:21:23
654
原创 Java8 函数式接口原理及用法
Java8相比之前的Java新增了几个重要的功能:Lambda表达式、函数式接口、Stream流。下面介绍一下Java中常用的函数式接口一、什么是函数式接口?函数式接口是指只有一个抽象方法的接口,它有个专门的注解@FunctionalInterface,该注解主要特点有:1、该注解只能标记在"有且仅有一个抽象方法"的接口上,表示函数式接口。2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。3、接口默认继承 java.lang.Object,所以如果接口显示声明覆盖了Object中的
2020-11-15 20:42:21
1169
3
原创 Eureka Service启动原理
Eureka是Netflix开发的服务治理框架,包括Eureka Service 和Eureka Client。其中Eureka Service是作为服务端,主要功能是登记注册的服务、将服务信息同步给集群中的其它节点、接收客户端发送的心跳信息、将注册的服务列表返回给请求的客户端,Eureka Client作为客户端主要进行服务的注册和发现。Spring Boot中使用Eureka Service很简单,只需要引入依赖以后添加一个@EnableEurekaServer注解即可,如@SpringBoo..
2020-11-08 20:43:45
377
原创 sentinel工作原理及使用
sentinel是一个功能全面的、面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。下面说一下它的工作原理及使用方法sentinel工作原理当sentinel作用在调用的接口上时,会将这个接口抽象成一种资源,调用方需要申请这种资源,使用的方法是SphU.entry(),如果能够申请成功,则说明没有被限流,否则会抛出BlockException,表面已经被限流了。从SphU.entry()方法...
2020-11-01 23:20:04
2256
原创 Java线程同步实现方式
作为一个Java程序员,平常的工作中除了实现代码的业务逻辑,还需要提高代码运行的效率。Java作为一个支持多线程的语言,并发编程对于提高程序的效率至关重要,在Java并发编程是整个Java开发体系中最难以理解但也是最重要的知识点,也是各类开源分布式框架中各个并发组件实现的基础。本周学习了一下Java的并发编程,总结如下。一、Java并发编程需要注意什么?1、共享数据的安全性问题堆内存和方法区内存可以共享。 因此成员变量和静态变量存在数据安全性问题。2、锁竟争带来的程序效率问题多个线程访问
2020-10-27 00:05:05
234
原创 Spring中@Transactional实现事务管理的原理
Spring中@Transactional实现事务管理的原理在日常的web开发中,我们经常会用到数据库的事务,spring中也提供了相应的方法来进行事务的管理。其中,Spring的注解@Transactional是我们常用的管理数据库事务的方法,下面介绍一下@Transactional的原理及使用。@Transactional实现事务管理的原理:...
2020-10-26 23:48:02
937
原创 CentOS安装命令的区别
yum -y install 包名(支持*) :自动选择y,全自动yum install 包名(支持*) :手动选择y or nyum remove 包名(不支持*)rpm -ivh 包名(支持*):安装rpm包rpm -e 包名(不支持*):卸载rpm包
2014-04-11 23:47:12
313
转载 centos下两种方法安装git
今天下个包需要使用git,网上找了下看到大多数只有编译安装,并且编译安装还有错,不知道他们也没有实验过,这里我来给大家介绍下编译安装和yum安装git. 系统:centos 5.5 需要的软件包:git-latest.tar.gz epel-release-5-4.noarch.rpm1.先给大家说下编译安装方法,安装前准备yum -y install zlib-devel
2014-04-11 23:47:03
279
原创 CentOS安装命令的区别
yum -y install 包名(支持*) :自动选择y,全自动yum install 包名(支持*) :手动选择y or nyum remove 包名(不支持*)rpm -ivh 包名(支持*):安装rpm包rpm -e 包名(不支持*):卸载rpm包
2014-04-11 23:46:26
336
转载 centos下两种方法安装git
今天下个包需要使用git,网上找了下看到大多数只有编译安装,并且编译安装还有错,不知道他们也没有实验过,这里我来给大家介绍下编译安装和yum安装git. 系统:centos 5.5 需要的软件包:git-latest.tar.gz epel-release-5-4.noarch.rpm1.先给大家说下编译安装方法,安装前准备yum -y install zlib-devel
2014-04-11 23:45:55
328
原创 mysql导入sql文件
1)首先我们使用MySQL提供的命令行界面来导入数据库,确保自己的电脑中安装了MySQL数据库,我们可以通过命令行来确认是否安装了MySQL数据库,当然,第一步是打开Mysql的数据库服务,我们使用下面的命令来启动服务器:net start mysql2)然后,我们再以一个用户登录到mysql服务器,如用户名为root,密码为root,mysql -hlocalhost -uroot
2014-04-04 23:19:03
432
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅