- 博客(31)
- 资源 (17)
- 收藏
- 关注
原创 Nginx高级知识(负载均衡、限流、缓存、黑名单、发布)
在本地磁盘创建一个文件目录,根据设置,将请求的资源以K-V形式缓存在此目录当中,KEY需要自己定义(这里用的是url的hash值),同时可以根据需要指定某内容的缓存时长,比如状态码为200缓存10分钟,状态码为301,302的缓存5分钟,其他所有内容缓存1分钟等等。根据Cookie查询version值,如果该version值为v1转发到host1,为v2转发到host2,都不匹配的情况下转发到默认配置。上述配置中,192.168.2.0/24网段的IP访问是不限流的,其他限流。配置(nginx.conf)
2024-06-23 10:43:10
378
原创 Nginx基础理论
最终结果可以发现,程序获取到的客户端IP是Nginx的IP而非浏览器所在机器的IP,获取到的URL是Nginx配置的proxy_pass的URL组成的地址,而非浏览器地址栏上的真实地址。Nginx反向代理后,Servlet应用通过 request.getRemoteAddr() 取到的IP是Nginx的IP地址,并非客户端真实IP,通过 request.getRequestURL() 获取的域名、协议、端口都是Nginx访问Web应用时的域名、协议、端口,而非客户端浏览器地址栏上的真实域名、协议、端口。
2024-06-15 14:02:49
966
原创 IO与NIO基础概念
这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。最重要的是在调用一个方法前,无法知道是否会被阻塞。Channel是一个双向通道,与传统IO操作只允许单向的读写不同的是,NIO的Channel允许在一个通道上进行读和写的操作。传统BIO是一种同步的阻塞IO,IO在进行读写时,该线程将被阻塞,线程无法进行其它操作。
2024-06-14 17:47:59
598
原创 高并发系统限流原理
在上图中,整个虚线矩形框是一个时间窗口,在我们的例子中,一个时间窗口就是1分钟,然后我们将时间窗口进行划分,如上图我们把滑动窗口划分为6格,所以每一格代表10秒,每超过10秒,我们的时间窗口就会向右滑动一格,每一格都有自己独立的计数器,例如:一个请求在0:35到达, 那么0:30到0:39的计数器会+1,那么滑动窗口是怎么解决临界点的问题呢?令牌的数量与时间和发放速率强相关,时间流逝的时间越长,会不断往桶里加入越多的令牌,如果令牌发放的速度比申请速度快,令牌桶会放满令牌,直到令牌占满整个令牌桶,如图所示。
2024-06-05 22:06:54
839
原创 XA强一致性分布式事务原理
需要注意的是,在DTP模型中,MSOL 属于资源管理器,而一个完整的分布式事务中一般会存在多个资源管理器,由事务管理器来统一协调。在Mysql的事务语法中,最后都会跟随XID,对于Mysql来说,XID作为一个事务分支的标识符,事实上XID作为事务分支标识符在XA规范中被定义。Mysql XA 事务状态是正确执行XA事务的关键,每次执行Mysql XA事务语句都会修改XA事务的状态,进而执行不同的XA语句。XA 二阶段提交一提到分布式事务,总会出现二阶段这个词,什么是二阶段,什么是 XA 的二阶段提。
2024-05-30 17:59:19
622
原创 分布式事务解决方案(最终一致性【可靠消息解决方案】)
如果支付服务调用账户服务的接口超过了设置的最大次数,仍然没有调用成功,则支付服务需要提供查询支付结果的接口,以便账户服务调用并恢复丢失的业务。消息恢复服务会定期检测事务参与方业务的执行状态和消息库中的数据,如果发现事务参与方业务的执行状态与消息库中的数据不一致(这里的不一致,通常指的是事务参与方消费消息后,执行本地事务操作失败,导致事务参与方本地事务的执行状态与消息库中的数据不一致),消息恢复服务就会恢复消息库中消息的状态,使消息的状态回滚为事务发起方发送消息成功,但未被事务参与方消费的状态。
2024-05-28 19:00:29
821
原创 分布式事务解决方案(最终一致性【TCC解决方案】)
例如实现TCC分布式事务方案时,需要实现Try、Confirm、Cancel三个阶段的业务逻辑,这就是TCC操作,在TCC操作的每个阶段的方法都需要实现幂等性,这就是幂等操作,如果在执行分布式事务过程中业务服务出现了异常情况,则需要支持重试阶段,以达到事务补偿的目的,这就是可补偿操作,另外业务服务需要提供可以查询自身内部事务状态的接口,以供其他服务调用,这就是可查询操作。TCC是一种典型的解决分布式事务问题的方案,主要解决跨服务调用场景下得分布式事务问题,广泛应用于分布式事务场景。空回滚、幂等和悬挂问题。
2024-05-27 22:00:00
697
原创 分布式事务解决方案(强一致性)
3PC模型指的是三阶段提交,是在2PC模型的基础上改进的版本,3PC模型把2PC模型中的Prepare阶段一分为二,最终形成3个阶段:CanCommit阶段、PreCommit阶段和doCommit或者doRollback阶段,同样也分为事务执行成功和事务执行失败2种情况。DTP模型是X/open组织定义的一套分布式事务标准,这套标准主要定义了实现分布式事务的规范和API,具体的实现交由相应的厂商来实现,其中定义了几个重要的概念,分别是事务、全局事务、分支事务、控制线程。DTP模型的执行流程。
2024-05-24 17:21:53
988
原创 分布式事务的理论知识
Base理论是对CAP理论的一个拓展,它通过牺牲强一致性来获得可用性,Base理论中的Base是基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)的缩写,系统故障时,允许部分数据不可用,但是会保证核心的功能可用,允许数据在一段时间内不一致,但是经过一段时间后,数据最终是一致的。系统在满足分区容错性的前提下,一致性和可用性就是矛盾的,所以最终会有AP、CP、CA三种组合方式。
2024-05-20 20:25:55
352
原创 JVM 底层原理详解
Java中,引用和对象是有关联的,如果要操作对象则需要用引用进行,因此,很显然一个简单的办法就是通过引用计数来判断一个对象是否可以回收,简单来说,给对象加引用的计数器,当有地方应用的时候,这个计数器就加1,当有一个引用失效的时候这个计数器就减1,当这个计数器为零的时候意味着这个对象不可能再被使用,所以这个对象就是可回收对象。对于年老代比较多的应用,可以提高效率。说明:main方法进行m1()方法的调用,方法的调用意味着,方法进入的栈,然后m1中又存在着 t1 对象的引用,那么就验证了第1条。
2024-05-17 21:35:15
903
原创 分布式事务基本概念
将一个大的应用系统拆分为多个可以独立部署的应用服务,需要各个服务远程协助才能完成某些事务操作,总的来说,分布式事务会在一下3中场景下产生,分别是夸JVM进程、跨数据库实例、多服务访问单数据库。总的来说,数据一致性问题包含数据多副本、调用超时、缓存与数据库不一致、多个缓存节点数据不一致等场景。业界对于数据一致性问题提出了相应的解决方案,目前比较成熟的方案有。的演变,很多互联网企业系统架构已经向服务化网格演变。分布式架构目标和架构的原则。
2024-05-16 21:50:05
395
原创 Spring事务的实现原理
Spring框架支持对于事务的管理功能,开发人员使用Spring框架能极大的简化对于数据库事务的管理操作,不必进行手动开启事务,提交事务,回滚事务,就是在配置文件或者项目的启动类配置Spring事务相关的注解驱动,使用@Transaction注解即可,既开启并使用Spring事务管理功能。NOT_SUPPORTED:适用于发送提示信息、站内信、短信、邮件等,这类场景要求不影响系统的主体业务逻辑,即使操作失败也不应该对主体逻辑产生影响,不能使主体逻辑的事务回滚。Spring 事务失效的场景。
2024-05-15 22:11:00
612
原创 Mysql事务实现原理
当事务提交时,需要先将事务日志写入Log Buffer,这些写入Log Buffer的日志并不是随着事务的提交立刻写入磁盘的,而是根据一定的规则将Log Buffer中的数据刷写到磁盘,从而保证了Redo Log文件中的数据的持久化,这种刷盘规则可以通过innodb_flush_log_at_trx_commit 变量控制,innodb_flush_log_at_trx_commit变量可取的值有0、1、2,默认是1。事务提交后Undo Log 会放入待删除的列表,等待后台的线程进行删除操作。
2024-05-14 21:59:52
874
原创 Mysqls事物基本概念
MVCC机制通过在每行数据表记录的后面保存两个隐藏的列来实现的,一个列用来保存行的创建版本号,另外一个保存行的过期版本号,每当有新的事务执行时,版本号就会自动递增,事务开始时刻的版本号作为事务的版本号,用于和查询到的每行记录的版本号作对比。本质上,MVCC机制保存了数据库中数据在某个时间点上的数据快照,意味着同个读操作的事务,按照相同的条件查询数据,无论查询多少次,结果都是一样的,也意味着不同的事务在同一个时刻看到同一个表的数据可能是不同的。InnoDB中的MVCC原理。
2024-05-14 21:53:23
324
原创 Springboot集成Sharding-Jdbc实现分库分表
Sharding-Jdbc介绍Sharding-Jdbc在3.0后改名为ShardingSphere它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-Sphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数
2020-09-28 10:44:17
824
原创 解决myBatis下不能嵌套jar文件的问题
MyBatis扫描通过VFS来实现在SpringBoot中,由于是嵌套Jar,导致Mybatis默认的VFS实现DefaultVFS无法扫描嵌套Jar中的类。说俗一点就是:你的项目要引入别人的jar包,别人的jar包也是有集成mybatis相关的xml文件内容的解决办法,实现自定义的VFS,参考DefaultVFS增加对SpringBoot嵌套JAR的处理。1:新建一个类SpringBootVfs package com.tortoise.workflow.config; ..
2020-09-25 16:18:28
306
原创 高并发面试题知识归纳
大纲: 1:volatile 是java 虚拟机提供的轻量级的同步机制1.1:保证内存可见性1.2:不保证原子性1.3:禁止指令重排2:JMM java内存模型2.1:JMM关于同步的规定: 1 线程解锁前,必须把共享变量的值刷新回主内存中 2 线程加锁前,必须读取主内存的最新值到自己的工作内存(栈...
2019-11-01 14:59:43
278
原创 单点登录解决方案-CAS
课程目标目标1:搭建单点登录服务端,开发单点登录客户端目标2:实现CAS 认证数据源设置目标3:更换CAS 登录页面目标4:掌握CAS与SpringSecurity集成 目标5:完成用户中心单点登录功能 1.开源单点登录系统CAS入门1.1 什么是单点登录单点登录(Sin...
2018-08-08 11:01:52
481
原创 ReadWriteLock : 读写锁 代码Demo
package com.atguigu.juc;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;/* * 1. ReadWriteLock : 读写锁 * * 写写/读写 需要“互斥” * 读读 不需要互斥 * */public cl...
2018-07-12 15:26:47
276
原创 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示
package com.atguigu.juc;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/* * 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程...
2018-07-12 15:25:15
2312
原创 同步锁 Lock
package com.atguigu.juc;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/* * 一、用于解决多线程安全问题的方式: * * synchronized:隐式锁 * 1. 同步代码块 * * 2. 同步方法 * * jdk 1.5 后: * 3....
2018-07-12 15:23:17
196
原创 Docker安装mysql以及tomcat
CentOS Docker 安装Docker支持以下的CentOS版本:CentOS 7.3 (64-bit)前提条件目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.3...
2018-07-12 14:24:18
751
原创 solr colud 集群环境搭建
1. 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。 SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使...
2018-07-12 13:50:31
258
原创 solr单节点环境搭建
1. Solr服务搭建1.1. Solr的环境Solr是java开发。需要安装jdk。安装环境Linux。需要安装Tomcat。1.2. 搭建步骤第一步:把solr 的压缩包上传到Linux系统第二步:解压solr。第三步:安装Tomcat,解压缩即可。第四步:把solr部署到Tomcat下。第五步:解压缩war包。启动Tomcat解压。第六步:把/root/solr-4.10.3/exampl...
2018-07-12 11:53:13
402
原创 redis集群搭建
1. Redis的安装 1.1. Redis的安装Redis是c语言开发的。安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++ 安装步骤:第一步:redis的源码包上传到linux系统。第二步:解压缩redis。第三步:编译。进入redis源码目录。make 第四步:安装。make install PREFIX=/usr/local/redis...
2018-07-12 11:44:06
132
原创 nginx Cloud 集群搭建
1 目标反向代理的使用方法。掌握nginx作为负载均衡器的使用方法。掌握nginx实现web缓存方法。 2 nginx介绍2.1 什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等...
2018-07-12 11:12:32
631
shiro+SpringMVC+Spring+mybatis+maven+mybatis 自动刷新+ Quartz scheduler 定时器
2016-10-13
shiro+SpringMVC+Spring+mybatis+maven+mybatis 自动刷新xml
2016-10-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人