- 博客(32)
- 资源 (1)
- 收藏
- 关注
原创 Redis高并发缓存架构实战
比如服务降级,我们可以针对不同的数据采取不同的处理方式。由于缓存层承载着大量请求, 有效地保护了存储层, 但是如果缓存层由于某些原因不能提供服务(比如超大并发过来,缓存层支撑不住,或者由于缓存设计不好,类似大量请求访问bigkey,导致缓存能支撑的并发急剧下降), 于是大量请求都会打到存储层, 存储层的调用量会暴增, 造成存储层也会级联宕机的情况。新增的时候把数据放入缓存,更新的时候更新缓存,删除就删除缓存,查询的时候就先判断是否在缓存中,如果在就直接返回,没在就先从DB中查询,然后放入缓存,在返回。
2023-02-06 20:29:00
519
1
原创 分布式锁实战
如图中所示,T1和T2同一时刻进入抢占锁,T1加锁成功,T2加锁失败,但是由于某个原因导致T1加锁到解锁之间需要执行15s,在T1执行到10s的时候,T1的锁已经失效,这时等待的T2也加锁成功,这时候的锁就是锁的T2。继续执行5s,T1开始执行释放锁的逻辑,这时T1释放的就是T2的锁。高并发场景下在这段代码里面也会产生版本一的问题,比如在判断clientId成功后,释放锁之前产生卡顿,这时候锁过期,这时有其他的线程抢占锁成功,接着当前线程释放锁,这时也是释放的其他的线程锁,又出现了版本一的缺点。
2023-02-06 20:23:50
230
原创 Redis三种集群架构
master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master和它所有的slave都维护了复制的数据下标offset和master的进程id,因此,当网络连接断开后,slave会请求master继续进行未完成的复制,从所记录的数据下标开始。当客户端向一个错误的节点发出了指令,该节点会发现指令的 key 所在的槽位并不归自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据。这将引起单节点和单机器的复制风暴,开销会非常大。
2023-02-06 20:14:38
259
原创 Nacos1.4.X注册中心核心源码剖析
这里就会根据服务名进去哈希运算,然后对集群数量取模,最终就只会有一台机器返回 true,以后每次都会定位到同一台机器,才会走后面的健康检测的逻辑。这里就会拿到所有的节点,然后每隔一段时间循环对另外的机器发送 status (其实就是调用http接口),如果另外的机器没有收到 status ,就说明当前这台机器挂掉了。将service对应的全量实例instance写入内存注册表中(在里面会判断是临时实例还是持久化实例,这里传入的是临时实例,就会调用阿里自己实现AP模式的Distro协议)。
2023-01-20 20:35:04
294
原创 SpringBoot启动过程源码解析
SpringBoot 的启动流程就要从主启动类中的 run() 方法来看:启动过程的流程图:SpringBoot启动源码流程| ProcessOn免费在线作图,在线流程图,在线思维导图1)如果项目依赖中存在org.springframework.web.reactive.DispatcherHandler,并且不存在org.springframework.web.servlet.DispatcherServlet,那么应用类型为WebApplicationType.REACTIVE。2)如果项目依赖
2023-01-07 22:03:35
279
原创 SpringBoot自动装配原理
条件注解是可以写在类上和方法上的,如果某个条件注解写在了自动配置类上,那该自动配置类会不会生效就要看当前条件能不能符合,或者条件注解写在某个 @Bean 修饰的方法上,那这个 Bean 生不生效就看当前条件符不符合。
2023-01-07 19:44:51
182
原创 MySQL的“锁”你了解吗?
每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;一般用在整表数据迁移的场景。MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行update、insert、delete操作会自 动给涉及的表加写锁。InnoDB在执行查询语句SELECT时,因为有mvcc机制不会加锁。但是update、insert、delete操作会加行 锁。简而言之,就是读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞。
2023-01-02 22:12:23
302
原创 InnoDB底层原理看这篇就够了
表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件,一般是(ibdata1);对于每个独立表空间(也就是上图的File-Per-Table Tablespaces)来说,对应着文件系统中一个名为表名.ibd 的实际文件。InnoDB 是以页为单位管理存储空间的,我们的聚簇索引(也就是完整的表数据)和其他的二级索引都是以 B+树的形式保存到表空间的,而 B+树的节点就是数据页。
2022-12-19 22:49:06
886
原创 并发安全的ConcurrentHashMap
用分段锁实现降低锁粒度,提升并发度用HashEntery对象的不变性来降低执行读操作的线程在遍历链表期间对加锁的需求通过对同一个 volatile 变量的写/读访问,协调不同线程间读/写操作的内存可见性。
2022-11-27 21:20:32
2011
原创 HashMap你“啃”完了吗?
HashMap在 Java 领域已经是一个老生常谈的知识点了,在面试和平时开发中基本上是一个很频繁的 API,这要得益于 Doug Lea 老爷子的操刀,设计的实在是太优秀了。HashMap 最早出现是在 JDK 1.2 中,底层其实就是基于散列算法实现的,它允许 null 键和 null 值,在计算 hash 值的时候,null 键的 hash 值为 0。HashMap 并不保证键值对的顺序,可能由于某些操作导致顺序变化。它还是非线程安全的类,在多线程执行的时候可能导致问题。
2022-11-24 23:13:29
216
原创 深入理解Java线程池
线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销。
2022-11-18 21:27:01
291
原创 AQS原理以及ReentrantLock流程源码分析
Synchronized你“吃透”了解吗?在管程中同步等待队列是跟获取锁相关的,条件等待队列是跟阻塞唤醒机制相关。Java层面的管程实现队列名实现操作同步等待队列入队,出队条件等待队列入队,出队实现层:加锁与解锁的操作主要是在具体的实现类中去实现。Exclusive--独占,只有一个线程能执行,如ReentrantLock。Share--共享,多个线程同时执行,如Semaphore/CountDownLatch。主要用于维护获取锁失败时入队的线程。
2022-11-11 12:58:28
466
原创 Synchronized你“吃透”了解吗?
通过前面的文章已经知道了原子性问题的源头其实是:线程切换。如果能够禁用线程切换那么不就可以解决这个问题了吗?而操作系统的线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换。
2022-11-07 22:24:47
436
原创 并发编程:你真的了解CAS吗?
CAS(Compare And Swap,比较并交换),CAS 指令包含 3 个参数:共享变量的内存地址 A、用于比较的值 B 和共享变量的新值 C;并且只有当内存中地址 A 处的值等于 B 时,才能将内存中地址 A 处的值更新为新值 C。}以上伪代码描述了一个由比较和赋值两阶段组成的复合操作,CAS 可以看作是它们合并后的整体,一个不可分割的原子操作,并且其原子性是直接在硬件层面得到保障的。CPU 为了解决并发问题,提供了 CAS 指令,作为一条 CPU 指令,CAS 指令本身是能够保证原子性的(
2022-11-01 22:59:33
219
原创 并发编程:并发核心问题是什么?
首先,得理解并发的重要性。为什么需要并发?其实就是为了解决「性能」问题。然后,并发处理的是「任务」,就是:对任务的抽象、拆解和分工执行。Java使用的是多线程模型,对应到具体的代码:Thread、Runnable、Task,执行任务:Executors。那么有了多线程势必会有线程安全性问题,因为多线程的访问,数据会存在不一致的问题。在然后,大的任务被拆解为小的任务,小任务各自执行,这些任务之间必然存在依赖关系,那么就需要协调,那要如何协调呢?「锁。
2022-10-30 21:05:39
297
原创 “解剖“JVM之GC调优
前面所说的JVM垃圾收集其实最终也是为了解决GC的,那么GC又是如何调优的呢?其实说白了调优就是为了使程序运行的更好,更快,减少卡顿。这个过程就会使用许多工具来查找到问题发生的原因,解决这些问题来达到我们的目的。接下来我们就用程序的实例来说明如何进行调优的。先随便启动一个应用程序,我们可以使用jps查看改应用的进程id。JVM调优 | ProcessOn免费在线作图,在线流程图,在线思维导图其实调优就是为了加速程序的进行,减少卡顿。
2022-10-19 20:06:29
228
原创 “解剖”JVM之垃圾收集器
JVM就是Java虚拟机,说白了就是为了屏蔽底层操作系统的不一致而设计出来的一个虚拟机,让用户更加专注上层,而不用在乎下层的一个产品。这就是JVM的跨平台,一次编译,到处运行。而JVM中的核心功能其实就是自动化的垃圾回收机制。在Java中你使用对象,使用内存,不用担心回收,只管new对象就行了,不用管垃圾的回收。因为Java当中是自动化的垃圾回收机制。JVM有专门的垃圾回收器,把垃圾回收这件事给干了。一、分代收集理论当前虚拟机的垃圾收集都采用分代收集算法,根据对象存活周期的不同将内存分为几块。
2022-10-11 23:17:35
1265
原创 RabbitMQ入门篇(二)安装RabbitMQ
本次安装以Centos 7.5 为例子一、软件安装1、上传软件erlang18.31.el7.centos.x86_64.rpmsocat1.7.3.25.el7.lux.x86_64.rpmrabbitmqserver3.6.51.noarch.rpm链接:https://pan.baidu.com/s/1RzsSJvxkFF23AbkccA5iag提取码:vi0d2、安装 erlangrpm -ivh erlang-18.3-1.el7.cento...
2021-08-17 21:47:52
177
原创 RabbitMQ入门篇(一)基础概念
一、MQ概述MQ全程 Message Queue(消息队列),实在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。二、MQ的优劣势1、优势(1)应用解耦就以电商下单为例子:在分布式场景下原始的下单逻辑用户下单,订单系统会和其余的各个系统交互,比如库存系统,支付系统等等系统。但是如果现在库存系统挂了,那么订单系统也会受到影响,那么就会导致相应的一些业务板块受到影响。如果还需要加入其余的系统进来,还需要去修改订单系统的代码,这样可维护性也很低。也就是说:系统的.
2021-08-16 21:15:21
297
原创 Vagrant搭建k8s集群
目录一、使用vagrant搭建3台虚拟机二、给每台虚拟机设置网络三、设置linux环境四、所有节点安装docker、kubeadm、kubelet、kubectl五、部署k8s集群一、使用vagrant搭建3台虚拟机vagrant的使用以及搭建虚拟机:vagrant搭建虚拟机二、给每台虚拟机设置网络以下步骤要在每台虚拟机中操做:用xshell连接vagrant后,查看使用的默认网卡:ip route show看到使用的默认网卡是eth0,然后使用 ip
2021-08-13 22:58:58
1104
原创 ShardingJDBC快速实战
一、ShardingSphere简介在开始ShardingJDBC之前,先来讲一下ShardingSphere。官网:https://shardingsphere.apache.org/index_zh.html在2017年开始开源,并逐渐由原本只关注于关系型数据库增强工具的ShardingJDBC升级成为一整套以数据分片为基础的数据生态圈,更名为ShardingSphere。到2020年4月,已经成为了Apache软件基金会的顶级项目。ShardingSphere包含三个重要的产品,Shard
2021-01-12 17:18:11
537
原创 分库分表的概念
目录一、分库分表有什么用二、分库分表的方式三、分库分表的缺点四、什么时候需要分库分表五、常见的分库分表组件总结在前面写了一篇关于MySQL主从集群的文章,而主从的作用,在我们开发角度更大的作用是作为读写分离的支持,也是学习ShardingSphere的重点。分库分表就是业务系统将数据写请求分发到master节点,而读请求分发到slave节点的一种方案,可以大大提高整个数据库集群的性能。但是要注意,分库分表的一整套逻辑全部是由客户端自行实现的。而对于MySQL集群,数据主从同步
2021-01-12 13:46:46
1421
1
原创 MySQL主从架构
一、主从架构的作用通过搭建MySQL主从集群,可以缓解MySQL的数据存储以及访问的压力。1.数据安全给主服务增加一个数据备份。基于这个目的,可以搭建主从架构,或者也可以基于主从架构搭建互主的架构。2.读写分离对于大部分的JAVA业务系统来说,都是读多写少的,读请求远远高于写请求。这时,当主服务的访问压力过大时,可以将数据读请求转为由从服务来分担,主服务只负责数据写入的请求,这样大大缓解数据库的访问压力。MySQL的主从架构只是实现读写分离的一个基础。实现读写分离还是需要一些中间件来支
2021-01-12 10:41:07
602
原创 Hadoop集群配置相关服务器,时间同步
一、配置历史服务器历史这两个字就说明了,就是为了查看程序的历史运行情况,所以需要配置历史服务器。1.配置mapred-site.xmlvim mapred-site.xml添加内容如下:<!-- 历史服务器端地址 --><property> <name>mapreduce.jobhistory.address</name> <value>vagrant1:10020</value></p
2021-01-06 10:48:44
622
原创 Hadoop运行环境搭建(二)
Hadoop运行模式包括:本地模式、伪分布式模式和完全分布式模式。Hadoop官方网站:http://hadoop.apache.org/一、本地运行模式1.在hadoop-3.1.3文件下面
2021-01-04 16:48:53
217
原创 Hadoop运行环境搭建(一)
一、虚拟机环境准备虚拟机环境在上一节已经讲过,如果没有的话可以去看上一篇博文:使用vagrant搭建三台虚拟机环境在上面只是搭建了基本的虚拟机,然后还需要做如下配置(三台虚拟机都要设置,现在以vagrant1为例):1.配置主机名称映射,打开/etc/hostsvim /etc/hosts...
2020-12-31 14:05:13
336
原创 使用vagrant搭建三台虚拟机环境
文章目录一、下载安装vagrant二、下载安装Oracle VM VirtualBox三、下载virtualbox.box文件四、搭建centos7虚拟机环境五、用xshell测试连接虚拟机总结一、下载安装vagrant直接在vagrant官网https://www.vagrantup.com/直接点击下载安装,一直下一步就ok。进入cmd输入vagrant,能出现如下图所示就代表vagrant安装成功:二、下载安装Oracle VM VirtualBox.
2020-12-31 10:28:57
1661
1
原创 Hadoop相关概念
文章目录一、Hadoop是什么二、Hadoop三大发行版本1.Apche Hadoop2.Cloudera Hadoop3.Hortonworks Hadoop三、Hadoop的优势1.高可靠性2.高扩展性3.高效性4.高容错性四、Hadoop组成1.HDFS组成概述2.YARN组成概述3.MapReduce组成概述总结一、Hadoop是什么Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决:海量数据的存储和海量数据的分析计算问题。广义上来说:Hadoop通常是指一个更.
2020-12-30 17:28:40
530
2
原创 大数据相关概念
文章目录前言一、大数据概念二、大数据特点1.Volume(大量)2.Velocity(高速)3.Variety(多样)4.Value(低价值密度)三、大数据应用场景1.物流仓储2.零售3.旅游4.商品广告推荐5.保险6.房产总结前言随着现代行业的不断发展,大数据这门技术也越来越重要,很多人都开启了大数据相关学习,本文就介绍了大数据的一些相关概念。一、大数据概念大数据(Big Data):指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞.
2020-12-30 15:15:59
770
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人