自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(206)
  • 资源 (5)
  • 收藏
  • 关注

转载 什么是软件设计(OCP)原则

文章转自什么是软件设计(OCP)原则_shanglizhangrui的专栏-CSDN博客设计一个模块时,应当使该模块在不被修改的前提下被扩展。(1)对扩展是开放的即当要扩展功能时,不必更改内部代码块,可以直接进行扩展;(2)对更改是封闭的对模块进行扩展时,内部代码无须改动。...

2022-02-13 20:10:52 612

转载 Redis SDS 原理

本文转载自Redis SDS 原理_m0_57015193的博客-CSDN博客redis 使用 c 语言开发,但它没有复用 c 原生字符串实现,自己构建了一种新的字符串实现:SDS(simple dynamic String),SDS 是 redis默认字符串实现SDS 原理:struct sdshdr { // 记录buf数组中已使用字节的数量,也就是已用字符串的长度 int len; // 记录buf数组中未使用字节的数量 int free; //

2022-02-13 20:09:25 607

原创 Netty概念与应用

Netty 是由 JBOSS 提供一个异步的、 基于事件驱动的网络编程框架。一,Netty线程模型

2022-01-24 21:08:30 520

原创 RocketMQ Consumer源码剖析

一,Consumer实例初始化DefaultMQPushConsumer#start()DefaultMQPushConsumerImpl#start()二,拉取消息RocketMQ中推送与拉取消息底层皆为拉取PullMessageService#run()DefaultMQPushConsumerImpl#pullMessage()二,消费消息组装PullMessageProcessor#processRequest()Defau..

2022-01-22 23:47:22 1837

原创 RocketMQ Producer源码剖析

一,底层接口(MQAdmin)二,启动流程DefaultMQProducer-->start()DefaultMQProducerImpl-->start()客户端的启动MQClientInstance-->start()三,消息的发送DefaultMQProducer -->send(Meesage msg)DefaultMQProducerImpl-->send(Message)获取路由信息,如果缓..

2022-01-22 19:09:05 91

原创 RocketMq NameServer源码解析

一,启动入口(NameSrvStartUp类)通过mqnamesrv命令启动,会去执行类NameSrvStartup,为NameServer启动入口类org.apache.rocketmq.namesrv.NamesrvStartup创建命名控制器(createNamesrvController方法)命名控制器的启动(start方法)--> initializie() 初始化方法二,broker注册NameServer(BrokerStartu..

2022-01-22 17:56:55 109

转载 ConcurrentHashMap源码分析(1.8)

0、说明 1、ConcurrentHashMap跟HashMap,HashTable的对比2、ConcurrentHashMap原理概览3、ConcurrentHashMap几个重要概念4、ConcurrentHashMap几个重要方法5、ConcurrentHashMap的初始化6、ConcurrentHashMap的put操作详解7、ConcurrentHashMap的扩容详解8、ConcurrentHashMap的get操作详解9、Con...

2022-01-18 11:09:54 1673

原创 SpringCloud Alibaba 搭建与使用

一,Nacos搭建下载地址:https://github.com/alibaba/nacos下载后启动二, 配置服务注册到NacosMaven依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> ..

2022-01-16 18:48:05 638

原创 SpringCloud OAuth2搭建(学习记录)

一,认证服务器端:Maven依赖 <!--导入spring cloud oauth2依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId> <e

2022-01-14 16:51:22 979

原创 SpringCloud Sleuth+Zipkin链路追踪搭建

网关配置Maven依赖<!--链路追踪--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependen

2022-01-14 11:03:26 288

原创 SpringCloud配置中心Config+Bus

Maven依赖<!--config配置中心服务端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <depend.

2022-01-12 20:57:55 839 2

原创 SpringCloud gateWay网关搭建

Maven依赖(不要引入web模块,要引入webflux模块)<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--引入webflux--&g

2022-01-12 16:47:18 439 1

原创 Hystrix入口与切面执行源码剖析

Hystrix入口与切面解析spring.factories文件如下

2022-01-12 11:17:41 231

原创 Hystrix熔断器

雪崩效应:下游微服务响应时间过⻓,⼤量请求阻塞,⼤量线程不会释放,导致服务器资源耗尽,最终导致上游服务甚⾄整个系统瘫痪雪崩效应解决方案:服务熔断:熔断机制是应对雪崩效应的⼀种微服务链路保护机制。在微服务架构中,当扇出链路的某个微服务不可⽤或者响应时间太⻓时,熔断该节点微服务的调⽤,进⾏服务的降级,快速返回错误的响应信息。当检测到该节点微服务调⽤响应正常后,恢复调⽤链路服务降级:将⼀些不关紧的服务停掉(调⽤的时候,给你返回⼀个预留的值,也叫做兜底数据),待渡过难关⾼峰过去,再把那些服务打开。 服务

2022-01-12 10:29:13 105

原创 Ribbon RestTemplate对象拦截器源码剖析

1)RibbonAutoConfiguration2)LoadBalancerAutoConfiguration注入restTemplate对象到集合中待用注入restTemplate定制器对象使用定制器对象给容器中的restTemplate注入拦截器添加了@LoadBalance注解的RestTemplate对象都会被添加一个拦截器LoadBalancerIntercept,该拦截器就是后续拦截请求进行负载处理的3)LoadBalancerIntercep...

2022-01-11 22:29:00 223

原创 EurekaClient初始化源码剖析

1)EurekaClientAutoConfiguration装配过程SpringBoot自动装配EurekaClientAutoConfiguration类2) EurekaClientAutoConfiguration启动过程配置读取EurekaClient对象实例化,获取服务实例信息注册实例开启一些定时任务(心跳续约、刷新本地缓存...)3)EurekaClient下架服务...

2022-01-11 16:06:56 697

原创 EurekaServer服务接口源码剖析

EurekaServer服务接口暴露策略1)启动时注册的jersey Filter2)jerseyApplication细节配置,指定包加载EurekaServer服务注册接口1)ApplicationResource.class注册信息校验2)PeerAwareInstanceRegistryImpl.classEurekaServer服务续约接口1)InstanceResource.class2) PeerAware...

2022-01-11 14:25:13 820

原创 EurekaServer启动过程源码剖析

1)EurekaServerAutoConfigurationSpringBoot自动装备,装配EurekaServerAutoConfiguration类,详情如下所示2)EnableEurekaServerMain函数中@EnableEurekaServer注解,用于向容器中注入Marker对象。只要添加了@EnableEurekaServer注解,才能注入该类。3)EurekaServerAutoConfiguration中的插件仪表盘注册器节点信息...

2022-01-11 14:00:59 158

原创 初代SpringCloud 服务发现搭建

Maven依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>Yaml配置server: port: 8090#注册到Eu

2022-01-11 10:51:19 75

原创 初代版本SpringClouder服务提供者集群与注册Eureka

Maven依赖<!--eureka client 客户端依赖引入--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency

2022-01-11 09:54:53 203

原创 初代版本SpringCloud Eureka集群搭建

集群节点数目:2Maven依赖 <dependencies> <!--Eureka server依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</arti

2022-01-11 09:20:24 401

原创 RocketMQ高级特性与原理

消息的存储机制目前的高性能磁盘,顺序写速度可以达到600MB/s, 超过了一般网卡的传输速度。但是磁盘随机写的速度只有大概100KB/s,和顺序写的性能相差6000倍!数据结构消息真正的物理存储文件 是CommitLog,ConsumeQueue是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储 的地址。每个Topic下的每个Message Queue都有一个对应的ConsumeQueue文件CommitLog:消息主体以及元数据的存储主体,存储Producer端写入的消息主体

2021-12-09 14:02:25 539

原创 RocketMQ架构

RocketMQ的角色:Producer:消息的发送者;举例:发信者 Consumer:消息接收者;举例:收信者 Broker:暂存和传输消息;举例:邮局 NameServer:管理Broker;举例:各个邮局的管理机构 Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者 可以订阅一个或者多个Topic消息 Message Queue:相当于是Topic的分区;用于并行发送和接收消息...

2021-11-28 03:15:00 349

原创 RabbitMQ高级特性

一,消息的可靠性客户端代码中的异常捕获,包括生产者和消费者 消息发送过程通过try catch 方式捕获异常, 在异常处理理的代码块中执行行回滚业务操作或者执行行重发操作等。这是一种最大努力确保的方式, 并无法保证100%绝对可靠,因为这里没有异常并不代表消息就一定投递成功。可以通过spring.rabbitmq.template.retry.enabled=true 配置开启发送端的重试AMQP/RabbitMQ的事务机制没有捕获到异常...

2021-11-26 04:00:00 730

原创 Aerospike

Aerospike(简称AS)是一个分布式,可扩展的键值存储的NoSQL数据库。 T级别大数据高并发的结构化数据存储,读写操作达微妙级,99%的响应可在1毫秒内实现。采用混合架构,索引存储在内存中,而数据可存储在机械硬盘(HDD)或固态硬盘(SSD) 上(也可存储在 内存) AS内部在访问SSD屏蔽了文件系统层级,直接访问地址,保证了数据的读取速度。 AS同时支持二级索引与Client聚合,支持简单的sql操作(aql),相比于其他nosql数据库,有一定优势。应用场景个性化推荐广告应用用户

2021-11-25 10:00:39 879

原创 RabbitMQ架构了解

一,RabbitMQ工作流程生产者发送消息的流程:1. 生产者连接RabbitMQ,建立TCP连接( Connection),开启信道(Channel) 2. 生产者声明一个Exchange(交换器),并设置相关属性,比如交换器类型、是否持久化等 3. 生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等 4. 生产者通过 bindingKey (绑定Key)将交换器和队列绑定( binding )起来 5. 生产者发送消息至RabbitMQ Broker,其中包含 r

2021-11-24 22:01:31 1095

原创 RabbitMq常用命令

# 前台启动Erlang VM和RabbitMQrabbitmq-server# 后台启动rabbitmq-server -detached# 停止RabbitMQ和Erlang VMrabbitmqctl stop# 查看所有队列rabbitmqctl list_queues# 查看所有虚拟主机rabbitmqctl list_vhosts# 在Erlang VM运行的情况下启动RabbitMQ应用rabbitmqctl start_apprabbitmqctl stop_app.

2021-11-23 22:36:28 288

原创 EVCache

EVCache是一个开源、快速的分布式缓存 是基于Memcached的内存存储和Spymemcached客户端实现的 是Netflix(网飞)公司开发的。E:Ephemeral:数据存储是短暂的,有自身的存活时间V:Volatile:数据可以在任何时候消失Memcached:基于内存的键值对缓存服务器Mnemonic:基于硬盘(SSD)的嵌入式键值对存储服务器,封装了RocksDB(是一种SSD的技术)#########EVCache集群在峰值每秒可以处理200kb的请求, Ne

2021-11-23 16:32:29 415

原创 消息中间件概念与常用中间件选型

分布式异步通信模式优点:系统间解耦,并具有一定的可恢复性,支持异构系统,下游通常可并发执行,系统具备弹 性。服务解耦、流量削峰填谷等。缺点:消息中间件存在一些瓶颈和一致性问题,对于开发来讲不直观且不易调试,有额外成本。消息中间件概念消息中间件就是在通信的上下游之间截断:break it,Broker 然后利用中间件解耦、异步的特性,构建弹性、可靠、稳定的系统。异步处理、流量削峰、限流、缓冲、排队、最终一致性、消息驱动等需求的场景都可以使用消息中 间件消息中间件的选型Rab

2021-11-22 22:56:25 1889

原创 RabbitMq基本架构

RabbitMq整体逻辑架构RabbitMQ Exchange类型RabbitMQ常用的交换器类型有: fanout 、 direct 、 topic 、 headers 四种。Fanout会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中(广播方式)Directdirect类型的交换器路由规则很简单,它会把消息路由到那些BindingKey和RoutingKey完全匹配的 队列中(指定了绑定队列/消费队列的传输方式)Topic(是对于Direct ...

2021-11-22 20:59:12 286

原创 Tair

Tair(Taobao Pair)是淘宝开发的分布式Key-Value存储引擎,用于服务器端自动负载均衡 分为持久化和非持久化两种方式存储:非持久化:分布式缓存使用 Memcached(mdb)、Redis(rdb)持久化:SQL-DB使用FireBird(fdb),NoSQL-DB:使用Kyoto Cabinet(kdb)、LevelDB(ldb)Tair采用可插拔存储引擎设计,以上这些存储引擎可以很方便的替换,还可以引入新的存储引擎比如: MySQL。使用场景:1,分布式缓存,集成R

2021-11-21 22:04:44 662

原创 Guava Cache

Guava是Google提供的一套Java工具包,而Guava Cache是一套非常完善的本地缓存机制(JVM缓 存)。 Guava cache的设计来源于CurrentHashMap,可以按照多种策略来清理存储在其中的缓存值且保持很高的并发读写性能。GuavaCache、Tair、EVCache、Aerospike比较应用场景:对性能有非常高的要求 不经常变化 占用内存不大 有访问整个集合的需求 数据允许不时时一致Cuava Cache优势:缓存过期和淘汰机制,采用LRU..

2021-11-20 20:31:46 1049

原创 Redis集群与分区

分区是将数据分布在多个Redis实例(Redis主机)上,以至于每个实例只包含一部分数据。分区的意义:1,性能的提升,单机Redis的网络I/O能力和计算资源是有限的,将请求分散到多台机器,充分利用多台机器的计算能力可网络带宽,有助于提高Redis总体的服务能力。2,存储能力的横向扩展,即使Redis的服务能力能够满足应用需求,但是随着存储数据的增加,单台机器受限于机器本身的存储 容量,将数据分散到多台机器上存储使得Redis服务可以横向扩展。一,范围分区根据id数字的范围比如1--10

2021-11-20 16:45:15 1059

原创 Redis哨兵模式

哨兵(sentinel)是Redis的高可用性(High Availability)的解决方案: 由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器。 当主服务器进入下线状态时,sentinel可以将该主服务器下的某一从服务器升级为主服务器继续提供服务,从而保证redis的高可用性。哨兵模式部署方案:一,哨兵模式执行流程1,启动并完成Sentinel初始化Sentinel是一个特殊的Redis服务器,不会进行持久化,Sentinel实例启动.

2021-11-20 15:13:15 702 1

原创 Redis主从模式

一,Redis主从配置Redis高可用集群中,主节点的无需做什么集群配置,只需在从节点中开启主节点配置replicaof ip port如同传统的数据库集群一样,Redis集群一样采用了主写从读的结构,从而达到读写分离的作用<一主多从,主从同步,主负责写,从负责读,提升Redis的性能和吞吐量,主从的数据一致性问题>因为Redis是内存数据库,主从架构还能有效的防止容灾的发生:从机是主机的备份,主机宕机,从机可读不可写,默认情况下主机宕机后,从机不可为主机,利用哨兵可以实现

2021-11-20 14:41:36 919

原创 Redis拓展功能

一,发布与订阅Redis提供了发布订阅功能,可以用于消息的传输Redis的发布订阅机制包括三个部分,publisher(发布),subscriber(订阅)和Channel(发布的频道)发布订阅的机制Redisson是一个分布式锁框架,在Redisson分布式锁释放的时候,是使用发布与订阅的方式通知的使用场景:哨兵模式,Redisson框架使用在Redis哨兵模式中,哨兵通过发布与订阅的方式与Redis主服务器和Redis从服务器进行通信。Redisson是一个分布...

2021-11-18 22:02:44 731

原创 Redis持久化

为什么要持久化?Redis是内存数据库,宕机后数据会消失。 Redis重启后快速恢复数据,要提供持久化机制。Redis持久化方式Redis支持RDB与AOF两种持久化方式。关于持久化的配置信息查看可通过info命令查看一,RDBRDB(Redis DataBase),是redis默认的存储方式,RDB方式是通过快照( snapshotting )完成 的。 这一刻的数据不关注过程。触发RDB的方式:符合自定义配置的快照规则 执行save或者bgsave命令 执行.

2021-11-18 21:12:16 83

原创 Redis通信协议与事件处理

一,Redis通信协议Redis是单进程单线程的。 应用系统和Redis通过Redis协议(RESP)进行交互。Redis协议位于TCP层之上,即客户端和Redis实例保持双工的连接。串行的请求响应模式串行化是最简单模式,客户端与服务器端建立长连接 连接通过心跳机制检测(ping-pong) ack应答 客户端发送请求,服务端响应,客户端收到响应后,再发起第二个请求,服务器端再响应。这种模式下,消耗在网络协议的连接上,有问有答,性能很低。双工的请求响应模式该模式下批量请求,平凉反应.

2021-11-18 16:35:37 525

原创 Redis底层结构与缓存原理

Redis是一个Key-Value的存储系统,使用ANSI C语言编写。key的类型是字符串。value的数据类型有: 常用的:string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类型。不常见的:bitmap位图类型、geo地理位置类型。一,Redis key的设计将一个表,例如User表存入Redis中做缓存时,进行Key值的设计通常需要注意以下四个步骤:用:分割 把表名转换为key前缀, 比如: user: 第

2021-11-17 23:39:48 1122

转载 hbase之布隆过滤器

一、布隆过滤器布隆过滤器(Bloom Filter)是1970由布隆提出的。通过一个很长的二进制向量于一系列随即哈希函数生成。下面我就将通过以下小节来介绍布隆过滤器:1、原因与结构解析2、数学公式1.1 原因与结构解析首先,我们应当知道,hash是内存中使用的经典数据结构。当我们需要判读一个元素是否在一个集合当中时,我们可以用哈希表来判断。在集合较小的情况下,hash是可行而且高效的。然而数据量以PT...

2021-11-16 22:21:35 1799

D4B712F28B882EDB12FE063482B_386C184C_17FE00.zip

D4B712F28B882EDB12FE063482B_386C184C_17FE00.zip

2024-04-12

netty实例与自定义实现RPC代码

netty实例与自定义实现RPC代码

2022-01-24

RocketMQ 4.5.2源码

RocketMQ 4.5.2源码 producer,consumer,nameserver源码注解

2022-01-22

spring-webmvc.5.1.zip-包含详细注解

SpringMVC 5.1源码含详细注解,可参考对应的博客对应查看

2021-09-26

spring-framework-5.1.x-源碼解析详细注解

包含分析Spring IOC容器,lazy-init,循环依赖处理,AOP实现,事务管理实现源码分析详情注解,可以参考博客对应查看

2021-09-22

Mybatis源代码-详细的代码注解

Mybatis源码

2021-09-02

空空如也

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

TA关注的人

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