- 博客(79)
- 资源 (10)
- 收藏
- 关注
原创 sentinel源码解析(一)
主要内容该文章主要根据解析sentinel源码分析点有:sentinel-dashboard创建规则保存在哪里? sentinel-dashboard同应用之间的交互关系是怎样的? 应用重启之后,sentinel-dashboard控制台的规则不见了?sentinel-dashboard创建规则保存在哪里?打开sentinel-dashboard控制台新建一个限流规则源码分析根据新建限流规则URL的地址,打开sentinel-dashboard的源码,找到对应的入口:
2021-01-11 11:25:20
665
原创 Spring Cloud Alibaba Nacos Config配置属性加载原理
本文介绍spring cloud 作为主流的微服务分布式组件,本身已经提供了配置中心spring cloud config组件。国内阿里巴巴基于spring cloud体系实现了一套spring cloud alibaba的生态架构。spring cloud alibaba nacos config的使用在这里不进行介绍,这里记录一下spring cloud alibaba nacos config的配置文件属性加载原理。疑问?在nacos客户端创建配置文件之后,那么疑问就来了,naco
2020-12-11 18:36:17
2044
原创 扩展ribbon-loadbalanced自定义负载策略(同集群优先原则)
业务场景应用A调用应用B,应用B下有多个集群,应用A调用应用B时,调用同集群下的应用B实例项目结构client为客户端,有两个服务端:应用名都是customize-ribbon-loadbalanced-server,集群分别是beijing和shanghaiclient去调用应用customize-ribbon-loadbalanced-server,根据client的集群名来分别调用服务customize-ribbon-loadbalanced-server中相同集群的应用配置文
2020-11-10 15:26:08
1442
转载 redis哨兵模式选举机制
当redis集群的主节点故障时,Sentinel集群将从剩余的从节点中选举一个新的主节点,有以下步骤: 故障节点主观下线故障节点客观下线Sentinel集群选举LeaderSentinel Leader决定新主节点 选举过程 1、主观下线 Sentinel集群的每一个Sentinel节点会定时对redis集群的所有节点发心跳包检测节点是否正常。如果一个节点在down-after-milliseconds时间内没有回复Sentinel节点的心跳包,则该redis节点被该Sentinel节点主观下线。
2020-10-15 10:29:20
8651
3
原创 IDEA基于Dockerfile自动构建镜像
1、准备工作操作系统:Windows10 docker版本:v19.03.8(基于Docker Desktop of Windows安装) IDEA版本:2019.2.42、IDEA连接Docker环境2.1、IDEA安装docker插件idea安装好docker插件之后需要重启,然后在idea配置docker环境之前,需要设置docker环境允许远程连接2375端口:cmd以管理员身份运行:netsh interface portproxy add v4tov4 liste.
2020-09-27 15:43:08
2213
原创 多注册中心情况下通过spring boot自动装配机制解决项目启动过程中多注册中心实现ServiceRegistry接口问题
场景:一个spring boot项目同时引入了nacos注册中心依赖和zookeeper注册中心的依赖,需要在不同情况下选择使用不同的注册中心。项目依赖情况: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</art
2020-08-25 11:19:08
1139
原创 策略模式场景实例
定义抽象策略角色public interface CompanyService { public String company();}定义具体策略角色具体策略角色1@Servicepublic class AlibabaCompanyService implements CompanyService { @Override public String company() { System.out.println("alibaba");
2020-06-29 13:28:18
3685
原创 Bootstrap、Application 以及自定义配置属性的优先级对比
bootstrap配置文件和application配置文件优先级bootstrap优先级<application优先级bootstrap、application和自定义配置属性优先级自定义配置属性:public class NacosDiscoveryPrepareApplicationListener implements ApplicationListener<A...
2020-05-08 10:33:20
2550
原创 spring boot actuator各个端点说明
参考:https://www.jb51.net/article/185204.htm https://www.yht7.com/news/81709 端点 端点描述 默认值 端点 端点描述 默认值 auditevents 当前应用的审计事件...
2020-05-08 10:30:17
595
原创 Nacos集群Raft协议选举策略源码解析
1、Nacos集群选举策略在Raft协议中,节点有三种角色:Leader:负责接收客户端的请求 Candidate:用于选举Leader的一种角色 Follower:负责响应来自Leader或者Candidate的请求选举分为两个阶段:服务启动的时候 leader挂了的时候所有节点启动的时候,都是follower状态。 如果在一段时间内如果没有收到leader的心跳(可能是没...
2020-04-22 17:06:27
1571
原创 Zookeeper的集群Leader选举机制和数据同步原理
这里不介绍Zookeeper集群的搭建过程;首先介绍相关概念:1、集群节点状态LOOKING:寻找Leader状态,处于该状态需要进入选举流程 LEADING:领导者状态,处于该状态的节点说明是角色已经是Leader FOLLOWING:跟随者状态,表示Leader已经选举出来,当前节点角色是follower OBSERVER:观察者状态,表明当前节点角色是observer2、ZX...
2020-04-21 15:36:22
670
原创 Spring Cloud Zookeeper源码解析-----服务注册原理
zookeeper作为一个分布式文件系统,可用于注册中心,配置中心(很少),分布式锁,命名服务等场景。同时已经集成到springcloud项目中----spring cloud zookeeper;接下来通过读spring cloud zookeeper的源码来了解它的服务注册原理1、application.yml配置文件配置server: port: 9000spring: ...
2020-04-20 19:48:12
1331
原创 Redis-Cluster集群原理
1、redis-sentinel模式的不足之处使用Redis Sentinel 模式架构的缓存体系,在使用的过程中,随着业务的增加不可避免的要对Redis进行扩容,熟知的扩容方式有两种,一种是垂直扩容,一种是水平扩容。垂直扩容表示通过加内存方式来增加整个缓存体系的容量比如将缓存大小由2G调整到4G,这种扩容不需要应用程序支持;水平扩容表示表示通过增加节点的方式来增加整个缓存体系的容量比如本来有...
2020-04-02 10:50:57
580
原创 Redis哨兵模式原理
Redis的主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工将从节点晋升为主节点, 同时还要通知应用方更新主节点地址, 对于很多应用场景这种故障处理的方式是无法接受的。 可喜的是Redis从2.8开始正式提供了Redis Sentinel(哨兵) 架构来解决这个问题。总结:Redis主从复制的缺点:没有办法对master进行动态选举,需要使用Sentinel机制完成动态选举...
2020-04-01 15:42:36
378
原创 Redis主从复制哨兵模式环境搭建(Windows版)
本文是在基于Redis主从模式搭建过程(Windows版)进一步完成的,请先参考:https://blog.csdn.net/LiaoHongHB/article/details/105223455总体环境一主两从三哨兵模式前情提要在Windows上搭建一主两从模式,参考上面链接即可哨兵模式搭建1、在redis-master,redis-slave1以及redis-sl...
2020-04-01 13:53:15
543
3
原创 Redis主从模式搭建过程(Windows版)
redis下载地址:https://github.com/microsoftarchive/redis/releases下载好之后,解压然后复制一份到同目录下;文件夹分别取名为:redis-master和redis-slaveredis-master不用做任何修改操作redis-slave:进入该文件夹,修改redis.windows.conf文件,修改内容主要是:修改端...
2020-03-31 15:31:13
588
1
转载 Redis主从同步原理-SYNC
和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图为级联结构。 Redis主从复制可以根据是否是全量分为全量同步和增...
2020-03-31 11:20:17
261
原创 SprinBoot整合Dubbo,注册中心选取Zookeeper
提起dubbo,首先想到的是异步调用框架,同时提供了对springboot各种格式的支持,接下来是以spring boot的注解方式来简单描述spring boot整合dubbo的方式官方文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html首先新建dubbo-test项目,其中有三个module,分别是dubbo-api,d...
2020-03-20 14:25:17
177
转载 REST,以及RESTful的讲解
文章目录1.背景1.传统下的API接口对比规则概念REST 系统的特征演化优点&缺点是什么?1.背景1.传统下的API接口http是目前在互联网上使用最多的协议,没有之一。 可是http的创始人一直都觉得,在过去...
2020-03-19 11:14:46
215
原创 nacos的心跳机制
了解nacos的心跳机制,需要先了解nacos的服务注册原理;可先阅读https://blog.csdn.net/LiaoHongHB/article/details/103993074当nacos进行服务注册的时候,NacosServiceRegistry.class会调用register()方法进行服务注册,该方法中调用了namingService.registerInstance()方法...
2020-01-19 16:16:39
13516
3
原创 SpringCloudAlibaba-Nacos服务注册的原理
nacos是阿里巴巴开源的一个集注册中心和配置中心为一体的组件,先已加入到apache大家庭中。本文主要介绍nacos作为注册中心中的服务注册原理首先,所有的服务注册功能,都使用一个相同的接口---ServiceRegistrypackage org.springframework.cloud.client.serviceregistry;/** * Contract to reg...
2020-01-16 10:36:55
3204
1
原创 SpringBoot 启动原理
SpringApplication是SpringBoot的启动程序,我们通过它的run方法可以快速启动一个SpringBoot应用。启动控制台的输出内容:基于SpringFramework的事件机制事件机制是SpringBoot的启动核心,在这里先介绍JDK和Spring中事件的机制和原理JDK的事件机制JDK中的事件机制,首先定义了一个EventObject...
2020-01-13 17:40:08
270
转载 rocketmq原理:name server ,broker, producer, consumer之间通信
RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积...
2020-01-09 17:19:20
1535
原创 Apollo配置中心多环境配置
Apollo的快速启动项目中,只有一个DEV(开发)环境,但是本身的一个apollo-portal管控端可以管理不同环境下的配置;所以apollo配置中心多环境配置下的主要思路为(这里以DEV和FAT两个环境举例说明):搭建两台虚拟机,分别用作DEV环境和FAT环境(需要安装jdk1.8及以上的Java环境以及MySQL环境); DEV环境上面配置apollo-adminserv...
2019-12-26 10:45:56
3510
原创 SpringCloud配置中心源码解读
PropertySourceLocator接口通过这个接口我们可以通过代码动态的向Environment中添加PropertySourceEnvironment:Spring抽象了一个Environment来表示Spring应用程序环境配置,它整合了各种各样的外部环境,并且提供统一访问的方法(getProperty(String key))。locate方...
2019-12-23 15:14:23
739
原创 Nacos集群环境搭建
本文演示在Linux环境下,需要先配置相关环境:Java,maven,MySQL1、下载nacos-server压缩包通过rz命令行将下载好的nacos-server压缩包上传到Linux环境中;两台Linux主机IP分别为:192.168.30.129;192.168.30.1312、解压nacos-server压缩包,并将文件复制到/usr/local目录下...
2019-12-12 14:06:20
230
原创 Kubernetes deployment.yaml文件配置解析
apiVersion: extensions/v1beta1kind: Deploymentmetadata: <Object>spec: <Object> minReadySeconds: <integer> #设置pod准备就绪的最小秒数 paused: <boolean> #表示部署已暂停并且deploy控制器不会处理该部署 ...
2019-12-02 15:07:50
1889
原创 RocketMQ的2主2从集群环境搭建
前言该测试用例是在Linux环境下操作的,需先在Linux环境上安装Java环境和maven环境1、Java环境的安装在/usr/local/java路径下新建Java文件夹通过xshell工具的rz命令将事先下载好的jdk-8u211-linux-x64.tar.gz压缩包上传到Linux虚拟机中解压jdk-8u211-linux-x64.tar.gz压缩包...
2019-11-27 17:26:53
345
转载 源码分析RocketMQ文件清除机制
RocketMQ顺序写Commitlog、ConsumeQueue文件,所有写操作全部落在最后一个CommitLog或ConsumeQueue文件上,之前的文件在下一个文件创建后,将不会再被更新。RocketMQ清除过期文件的方法是:如果非当前写文件在一定时间间隔内没有再次被更新,则认为是过期文件,可以被删除,RocketMQ不会管这个这个文件上的消息是否被全部消费。默认每个文件的过期时间为7...
2019-11-27 15:26:44
759
原创 RocketMQ高可用Q&A
1、rocketmq的主从切换机制当master所在机器正常运行的情况之下,producer往master中写入消息,consumer从master中读取并消费消息 当master所在机器宕机之后,producer无法进行写消息操作,consumer从该master的slaver机器中读取并消费消息 当master所在机器宕机之后,需要手动重启master机器,重启完之后,producer...
2019-11-26 17:57:15
193
原创 RocketMQ HA集群方案
1、了解RocketMQ1.1、RocketMQ的前世今生 RocketMQ是阿里开源的一款十分优秀的消息队列,rocketMQ具有很多其他消息队列不具有的特性,更重要的是rocketMQ是用java开发的学习成本较低,并且经历了双11的数据洪峰的考验。rocketMQ已经加入了apache,成为apache的顶级项目。1.2、相关链接RocketMQ的官网:htt...
2019-11-26 17:55:58
535
原创 什么是Docker
一、Docker的介绍1、Docker的由来 2010年dotCloud公司在旧金山成立,PAAS平台的服务供应商;2013年dotCloud更名为Docker股份有限公司(Docker,Inc)。Docker公司专注开源容器引擎的开发,他们的容器引擎产品就叫docker,基于go语言,并遵从Apache2.0协议。Docker是目前最火的LXC高级容器管理引擎。Do...
2019-11-20 10:36:47
625
原创 容器技术的概念
1、什么叫容器? 容器技术是英文单词Linux Container的汉译。Linux Container两个单词,第一个Linux表明了容器技术一般是应用在Linux操作系统上面;Container意思有:容器,集装箱,货柜的意思,为了方便理解,这里采用集装箱的汉译介绍容器的概念。 集装箱多数存在于航运码头,将货物装入到集装箱中,然后通过轮船运输的方式运送到目的...
2019-11-18 17:57:26
4157
原创 SpringBoot+Aop+Redis+自定义注解来实现防止同一个ip在短时间内恶意多次请求
自定义注解:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)@Documented@Order(Ordered.HIGHEST_PRECEDENCE)public @interface RequestLimit { /** * 允许访问的次数,默认值20 */ int c...
2019-08-22 10:55:07
2324
9
原创 SpringBoot+Mysql+Redis+RabbitMQ实现高并发秒杀
场景:商城对某一商品进行秒杀活动,该项目实例中,商品为watch,库存为10,使用jemter测试工具来模拟高并发场景代码实例:mysql表结构:库存表: 订单表: application.yml文件serve...
2019-08-20 17:37:44
5649
18
原创 RabbitMQ实现延时队列
延时队列的概念场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,就需要设置成超时。场景二:订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单。上述场景都是有一个共同的地方,在物联网在给终端下发命令时,在用户订单下单时,会发送一个消息到队列钟,同时设定改条消息的过期时间,如果终端在过期时间之内响应了物联网的命令或者用户在过期时间之内进行了付款,则会将改条消息...
2019-08-15 10:55:56
1849
原创 数据库四种隔离级别之间锁的区别
数据库四种隔离级别:未提交读(Read uncommitted):事务在读数据的时候并未对数据加锁。事务在修改数据的时候只对数据增加行级共享锁。提交读(Read committed):事务对当前被读取的数据加 行级共享锁(当读到时才加锁),一旦读完该行,立即释放该行级共享锁;事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。可重...
2019-08-12 17:00:30
780
转载 TCP的三次握手与四次挥手理解及面试题(很全面
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携...
2019-07-31 15:53:48
248
基于Zookeeper集群环境下的数据发布订阅代码
2018-12-11
基于Zookeeper集群环境下的master选举代码
2018-12-11
基于Zookeeper集群环境下的服务注册代码
2018-12-11
基于websocket的网页聊天室(私聊+多对多)
2018-11-19
spring security oauth2 实现jwt sso
2018-11-14
Socket编程的client
2018-07-09
Socket编程的server
2018-07-09
JAVA 对CSV和Excel文件格式的读写
2017-09-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人