自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xzh_blog

哦~ 慢慢清晰

  • 博客(30)
  • 资源 (6)
  • 收藏
  • 关注

原创 Eureka实现原理和自我保护机制简单介绍

Eureka是在Java语言上,基于Restful API开发的服务注册与发现组件,由Netflix开源。Eureka遵循AP原则。目前Eureka仅开源到1.X版本,2.X版本已经宣布闭源。Eureka采用的是Server/Client的模式进行设计:Server扮演了服务注册中心的角色,为Client提供服务注册和发现的功能,维护着注册到自身的Client的相关信息,同时提供接口给Client获取到注册表中其他服务的信息。 Client将有关自己的服务的信息通过一定的方式登记到Server上,

2021-03-31 15:30:28 188

原创 Consul的基本概念和实现原理

Consul是由HashiCorp基于Go语言开发的,用于微服务下的服务治理,采用Raft算法保证服务的一致性,采用主从模式的设计可横向扩展,集群间通过RPC调用(HTTP和DNS)。Consul主要特点:服务发现、健康检查、Key/Value存储、安全服务通信、多数据中心。Consul的应用场景:服务发现、服务隔离、服务配置。...

2021-03-31 11:55:43 1720 13

原创 Redis的对象和数据结构

Redis数据库的键值对(key-value)都是由对象(object)组成。对象总共有5种:字符串对象(string) 列表对象(list):有序链表,value能重复,可通过下标取元素,可在头/尾进行插入或删除。使用场景: 哈希对象(hash):HashMap 集合对象(set):不重复、无序、不能通过下标取元素。 有序集合对象(zset)而对象则是由6种主要数据结构创建:简单动态字符串(SDS):相比C字符串,SDS做了优化:直接获取字符串重读、避免缓冲区溢出、空间预分配。 链

2021-03-29 23:32:01 194

原创 MySQL InnoDB 缓冲池 buffer pool

什么是buffer poolMySQL服务器启动的时候会向操作系统申请了一片连续的内存作为缓冲池(buffer pool),默认128M,可以通innodb_buffer_pool_size过来调整它的大小。用于缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。buffer pool中存有控制块和缓存页一一对应,控制块包含:缓存页所属的表空间编号、页号、缓存页在buffer pool中的地址、链表节点信息、一些锁信息以及LSN信息;缓存页和磁盘上默认的

2021-03-29 15:15:26 229 1

原创 MySQL 日志 redo log、undo log、binlog、relay log、general log、slow query log、errorlog

MySQL中有以下7种类型日志文件:重做日志(redo log) 回滚日志(undo log) 二进制日志(binlog) 中继日志(relay log) 慢查询日志(slow query log) 一般查询日志(general log) 错误日志(errorlog)重做日志(redo log)回滚日志(undo log)二进制日志(binlog)中继日志(relay log)慢查询日志(slow query log)一般查询日志(general log)错误日志(errorl

2021-03-29 11:34:34 217

原创 MySQL 索引的所有叫法 索引有种类哪些 索引概念

在MySQL Innodb存储引擎中,索引就是数据,数据就是索引。索引类型B+树索引:Innodb引擎使用,且内部都是此索引类型。 Hash索引:基于哈希表实现,用于精确匹配索引所指向的数据。 全文索引:仅MyISAM引擎支持,主要用来查找文本中的关键字,而不是直接与索引中的值相比较。 自适应哈希索引:Innodb引擎使用,自动根据访问的频率建立的哈希索引。索引种类聚簇索引,也叫聚集索引、主键索引、一级索引。 非聚簇索引,也叫二级索引。聚簇索引一张表必须存在一个并且只存在一个,叶

2021-03-28 00:13:07 246

原创 MySQL InnoDB 锁概述

锁类型共享锁(S锁):也叫读锁,其他事务可以读,但不能写。 排他锁(X锁):也叫写锁,其他事务不能读取,也不能写。行级锁行锁:Record Locks,记录锁,锁单行记录。 间隙锁:Gap Locks,锁住行之间的间隙,不包括行本身,用于防止幻读。数据页中有两个最大最小值隐藏列,用于锁无限大范围的情况。 行间隙锁:Next-Key Locks,锁住两行记录之间的间隙,不包括行本身,是行锁+间隙锁的结合。 插入意向锁:Insert Intention Locks,插入记录时,如果插入位置被加

2021-03-27 00:01:46 238 6

原创 MySQL主从复制原理

MySQL主从复制步骤:主库记录数据修改的二进制日志(binary log) 从库将主库的二进制日志复制到自己的中继日志(relay log) 从库读取中继日志重放到从库数据中MySQL主从复制方式:异步:在主从复制的过程中,MySQL默认是异步复制的。主库写入binlog就直接返回给客户端了。从库再异步读取binlog重放到数据中。主库不关心从库的数据有没有写入成功。 全同步:主库必须等待全部从库的事务执行完毕才返回给客户端。 半同步:主库等待至少一个从库接收到binlog并写.

2021-03-26 10:57:22 188 1

原创 MySQL InnoDB MVCC原理

什么是MVCCMVCC(Mutil-Version Concurrency Control)多版本并发控制,指的就是在使用已提交读(READ COMMITTD)、可重复读(​​​​​​​REPEATABLE READ)这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程,这样子可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。这两个隔离级别的一个很大不同就是:生成ReadView的时机不同, 已提交读在每一次进行普通SELECT操作前都会生成一个ReadView,而可

2021-03-25 15:36:42 183 2

原创 RocketMQ事务消息

RocketMQ4.3.0开始支持事务消息RocketMQ事务消息的实现原理基于两阶段提交和定时事务状态回查来决定消息最终是提交还是回滚。整个流程:1.生产者开启本地事务,在事务内完成相关业务数据落库,同步发送prepare消息到Broker。...

2021-03-24 22:35:53 146

原创 notifyAll唤醒线程顺序

notifyAll()方法按照后进先出算法唤醒所有wait状态的线程,即LIFO。执行完唤醒方法,并不会立即唤醒等待线程,在hotspot中是退出同步块的时候才会去真正唤醒对应的线程。notifyAll()唤醒过程还使用了monitorexit,当某个线程从wait状态恢复时,要先获取锁,然后再退出同步块,并唤醒最后一个进入wait状态的线程,依次类推。这些策略都可以通过修改JVM参数来改变。...

2021-03-23 23:33:15 204

原创 ZooKeeper的ZAB协议原理

ZAB(Zookeeper Atomic Broadcast)是为ZooKeeper设计的崩溃恢复原子广播协议,也称为zk原子广播协议。它保证ZooKeeper集群数据的一致性和命令的全局有序性。集群角色Leader:一个集群同一时间只会有一个Leader,它会发起并维护与各Follower及Observer间的心跳。所有的写事务必须要通过Leader完成再由Leader将写操作广播给其它服务器。 Follower:一个集群可同时存在多个Follower,它会响应Leader的心跳。Followe

2021-03-23 18:26:08 171 1

原创 ZooKeeper的基本概念

用途ZooKeeper主要服务于分布式系统,提供分布式数据一致性解决方案。可以用ZooKeeper来做:注册中心、分布式锁、命名服务、集群管理、负载均衡、配置管理等。Hadoop、HBase、Dubbo都有用ZooKeeper。数据结构Zookeeper提供的命名空间与标准的文件系统非常类似,一个名称就是一个由“/”分割的路径序列,其层级结构为:...

2021-03-22 14:10:41 195 1

原创 Spring IOC 容器启动过程

1.加锁,防止在refresh的时候出现启动或销毁容器的操作。synchronized (this.startupShutdownMonitor) 2.准备工作,记录下容器的启动时间、标记“已启动”状态、处理配置文件中的占位符。prepareRefresh(); 3.初始化BeanFactory,先创建DefaultListableBeanFactory实例,然后将配置信息解析成beanDefinition,并封装成beanName -> be...

2021-03-22 10:20:23 189 2

原创 Threadlocal

作用用于线程之间数据隔离。使用常见数据库连接、session管理等实现原理set方法public void set(T value) { // 获取当前线程 Thread t = Thread.currentThread(); // 获取ThreadLocalMap对象 ThreadLocalMap map = getMap(t); if (map != null) // 不为空set值 map.set(thi

2021-03-21 00:16:04 127

原创 高可用系统架构设计

系统的高可用需要考虑到:自身服务的高可用、上游与下游服务的影响。自身服务需要做到监控、压测、降级、拒绝服务、弹性伸缩,控制资源合理的使用,如:CPU、内存、磁盘、网络、线程,一旦某个资源超过负载,很容易出现线上问题。进行服务冗余,异地容灾、集群部署、负载均衡。对上游服务做好监控、限流,对下游服务做好重试、熔断降级、兜底方案。还有数据存储高可用,数据主从复制、数据主从切换、数据分片(分库分表)。参考:如何保障高并发系统的稳定性与高可用全面!一文理解微服务高可用的常用手段 ...

2021-03-19 10:58:20 182 1

原创 流量削峰方案

百度百科定义:如果观看抽奖或秒杀系统的请求监控曲线,你就会发现这类系统在活动开放的时间段内会出现一个波峰,而在活动未开放时,系统的请求量、机器负载一般都是比较平稳的。为了节省机器资源,我们不可能时时都提供最大化的资源能力来支持短时间的高峰请求。所以需要使用一些技术手段,来削弱瞬时的请求高峰,让系统吞吐量在高峰请求下保持可控。流量削峰方案:无损方案:排队、验证、分层过滤,不会损失用户发出的请求。有损方案:限流、熔断,会损失用户发出的请求。排队用消息队列来缓冲瞬时流量,把同步的直接调用转

2021-03-18 16:07:07 266 6

原创 volatile是怎么保证可见性和防止指令重排序的

volatile怎么保证可见性每个线程操作数据的时候会把数据从主内存读取到自己的工作内存,根据MESI思想如果某个线程修改数据写回到主内存,其他线程能通过嗅探检查到本地数据无效,然后重新从主内存读取到自己的工作内存。volatile怎么保证指令重排序通过在指令间加入内存屏障来防止指令重排序。一些概念MESImodified(修改)、exclusive(互斥)、share(共享)、invalid(无效)嗅探总线风暴happens-before...

2021-03-18 09:51:06 162

原创 热点数据的发现、处理、更新

热点数据发现1.发现静态热点数据:静态热点数据的发现相对简单些,是可以提前预估预测的数据。比如:秒杀活动商品、降价促销商品、节假日的火车票机票、热门电影门票、明星发布新专辑,以及大数据分析流行趋势预测热点。2.发现动态热点数据:创建异步监控统计服务和热点数据服务。异步监控统计服务在一个周期内对Key进行请求统计,在达到请求量级后将热点Key发送到热点数据服务收集,然后热点数据服务对这些热点Key进行聚合分析,最后推送到业务系统。热点数据处理1.缓存热点数据,放入LRU队列淘汰替换。.

2021-03-17 18:09:58 341 1

原创 Spring Cloud Gateway 过滤器执行顺序原理分析

过滤器类型GlobalFilter:全局过滤器,对所有路由生效。通过实现GlobalFilter接口创建GatewayFilter:网关过滤器,也可以说是局部过滤器、自定义过滤器,只对配置了此过滤器的路由生效。通过GatewayFilterFactory创建。过滤器会被执行两次,过滤分为pre和post。pre:请求前调用。post:响应结果返回时调用,顺序和pre完全相反,这里只讨论过滤器的pre执行顺序,post倒置过来就行了。先说结论结论网上的说法都不太准确,其实.

2021-03-12 17:26:19 373 14

原创 rpc调用过程原理分析以及Dubbo、Feign调用过程

RPC简介RPC是远程过程调用(Remote Procedure Call)的缩写形式。RPC调用流程图客户端方法:服务调用方所调用的接口客户端代理:将接口封装成代理对象,并序列化请求参数、反序列化响应结果,使用远程传输协议调用服务端,(例如:Socket、Netty、RMI、HTTP等)。远程网络调用:采用远程传输协议进行通信实现数据的传输。服务端代理:服务端收到远程请求后,将二进制的数据反序列化为请求对象,然后调用本地接口返回响应数据并序列化结果发送出去。服务端方法:..

2021-03-11 14:16:15 209 4

原创 github打不开 github打开慢 解决方法DevSidecar工具

开发者边车,命名取自service-mesh的service-sidecar,意为为开发者打辅助的边车工具通过本地代理的方式将http请求代理到一些国内的加速通道上不用fan qiang也能解决一些网站和库无法访问或访问速度慢的问题下载安装包百度网盘下载windows版:https://pan.baidu.com/s/16v4gdlZQUXSDS-AunBTLlw提取码:z02hMac版:https://pan.baidu.com/s/1NRih3CaITqDQSFqYMqjftQ...

2021-03-10 11:39:59 2417 3

原创 Netty高性能的原因

Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。Netty的应用:Dubbo、RocketMQ、HadoopNetty的性能为什么高呢?异步非阻塞通信 零拷贝 内存池 高效的reactor线程模型 无锁化的串行设计概念 高效的并发编程 高性能的序列化框架 灵活的TCP参数配.

2021-03-09 14:58:29 150 1

原创 MySQL explain简介

explain各字段说明id选择标识符(查询的顺序号)select_type:查询的类型table:输出结果集的表partitions:匹配的分区type:访问类型(性能:ALL < index < range < ref < eq_ref < const < system < NULL)possible_keys:可能使用的索引key:实际使用的索引key_len:索引中使用的字节数ref:索引的哪一列被使用了rows:扫描

2021-03-08 11:53:08 105 2

原创 JDK1.8 HashMap数据结构图 转红黑树时机

当链表中的元素个数⼤于8时,如果数组长度小于64则扩容,如果数组长度大于64则转红黑树。

2021-03-05 17:23:31 153

原创 RocketMQ高并发高吞吐量的原理

路由中心(NameServer)NameServer通过集群部署,为追求简单高效NameServer彼此之间互不通信。NameServer与每台Broker服务器保持长连接,并间隔30s检测Broker是否存活,如果检测到Broker宕机,则从路由注册表中将其移除。但是路由变化不会马上通知消息生产者,降低NameServer实现的复杂性,在消息发送端提供容错机制来保证消息发送的高可用性。消息生产者(Producer)消息生产者集群部署。本地缓存topic路由信息,如果本地路由表中未缓存t

2021-03-04 14:47:52 486 1

原创 oauth2内置接口清单

/oauth/token

2021-03-02 16:00:45 147

转载 redis知识点总结

1、基本类型及底层实现1.1、String用途:适用于简单key-value存储、setnx key value实现分布式锁、计数器(原子性)、分布式全局唯一ID。底层:C语言中String用char[]数组表示,源码中用SDS(simple dynamic string)封装char[],这是是Redis存储的最小单元,一个SDS最大可以存储512M信息。struct sdshdr{ unsigned int len; // 标记char[]的长度 unsigned int fre

2021-03-02 15:51:57 121 1

原创 核心流程处理到一半,服务器崩溃了,怎么处理

这里同时存在三个问题:1.问题排查以及快速恢复2.异常数据修复3.服务高可用,规避服务宕机先抢通业务  当发现服务器宕机后,最关键的是抢通业务,而不是抢修服务器。因此,需要做应急方案。最好准备2个网站服务器,他们存放的内容相同,而ip不同,并且机房的地理位置不同。这样第一时间发现宕机问题后,可以迅速的通过修域名记录,指向目前正常的网站空间。而且2个主机,同时宕机的可能性就大大降低了。服务器崩溃问题定位1.内存溢出,磁盘资源耗尽2.线程死锁,进程过多或者不断创建,耗尽资源..

2021-03-01 15:39:38 215 2

原创 接口幂等性方案

1.数据库主键或唯一索引。2.数据库乐观锁。3.数据库字段状态。4.数据库防重表(流水表)。5.redis令牌,先获取唯一key,再请求业务系统,查找并删除key。6.下游服务唯一序列号,请求时在redis存个有效期的key,若存在就说明执行过。7.分布式锁。8.全局唯一号。source(来源)+seq(序列号),多个三方系统采用此方式。详细:https://mp.weixin.qq.com/s/7AZDaF4m8yGe19yNb_V7cAhttps://www.

2021-03-01 10:49:38 101 4

SecureCRT9.0下载64位 scrt-sfx-9.0.0.2430

SecureCRT是一款终端仿真程序,支持SSH(SSH1和SSH2)以及Telnet和rlogin协议。

2021-04-07

MySQL5.7下载 64位 mysql-5.7.20-winx64 免安装

MySQL数据库服务是一种完全托管的数据库服务,用于部署云原生应用程序

2021-04-07

JDK11下载 64位 官方正式版 jdk-11.0.10_windows-x64_bin.exe

感谢您下载此版本的Java™平台标准版开发套件(JDK™)。 JDK是用于使用Java编程语言构建应用程序和组件的开发环境。

2021-04-07

SublimeText4下载

Sublime Text – 性感的代码编辑器、程序员之必备神器!Sublime Text 是个功能强大的代码编辑器,也是HTML和散文先进的文本编辑器。

2021-04-07

JDK1.8下载 64位 官方正式版 jdk-8u191-windows-x64.exe

感谢您下载此版本的Java™平台标准版开发套件(JDK™)。 JDK是用于使用Java编程语言构建应用程序和组件的开发环境。

2021-04-07

Git下载 64位 官方正式版 windows Git-2.31.1-64-bit.exe

Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。

2021-04-07

空空如也

空空如也

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

TA关注的人 TA的粉丝

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