- 博客(53)
- 收藏
- 关注
原创 mycat-基础篇(一)-单体架构-集群的演进
1.什么是mycat?数据库中间件;2.数据库在应用时会出现的问题?2.1.连接数不够;2.2.速度变慢;2.3.存储不够用;3.数据库优化层次3.0.重启3.1.sql与索引sql是否用到索引;3.2.表与存储引擎表的结构不同;3.3.数据库与应用架构比如中间添加缓存,先把数据库的数据缓存到内存;读写分离;分片原理;冗余;3.4.数据库与操作系统配置让集器发挥本身的作用。3.5.硬件4.单体应用所有的业务都放到一个war包中;–>核心数据库;5.系统拆分
2021-02-19 12:29:00
341
2
原创 MySQL操作如何用到索引之原理分析
1.索引类型1.1 主键索引建立主键索引有两种方法,第一种,可以在创建表的时候建立,例如:create table test(id not null primary key);第二种ALTER TABLE table_name ADD PRIMARY KEY ( column ) ;1.2.唯一索引唯一索引是这一列的数据不能重复ALTER TABLE table_name ADD UNIQUE ( column ) ;唯一索引和主键索引最大的区别是 唯一索引可以允许有一个列为null;
2021-02-05 11:30:38
195
原创 MYSQL之流程执行逻辑以及探索索引原理
1.MYSQL之流程执行原理1.2 MYSQL框架图msyql是由客户端,服务server以及存储引擎构成的;客户端:用于连接mysql数据库,进行CURD操作;server服务:用来调用,计算数据以及返回给client端,进行与存储引擎提供的API进行交互;1.3 MYSQL执行流程如上图图片所示,mysql大致的执行流程图,接下来我们将细节放大;由此图可以看出所有的核心再与执行器和存储引擎的交互上;由于内存和磁盘进行读取数据时,寻址时间较长,所以我们接下来来看。由于执行器和磁盘的数
2021-02-05 00:29:56
306
转载 如何看到threadlocal
详情https://blog.youkuaiyun.com/jh39456194/article/details/107304997
2021-01-25 10:39:34
404
1
原创 事务的传播特性
spring对jdbc提供了7中事务隔离级别;1.PROPAGATION_REQUIRED:默认事务类型,如果没有,就新建一个事务;如果有,就加入当前事务。适合绝大多数情况。2.PROPAGATION_REQUIRES_NEW:如果没有,就新建一个事务;如果有,就将当前事务挂起。3 PROPAGATION_NESTED:如果没有,就新建一个事务;如果有,就在当前事务中嵌套其他事务。4.PROPAGATION_SUPPORTS:如果没有,就以非事务方式执行;如果有,就使用当前事务。5.PRO
2021-01-20 11:39:25
70
原创 分布式事务seata
分布式事务理论tcc/seata/lcn商业:dts/gts分布式事务在聊什么?数据的一致性问题数据库事务的特性ACID跨数据库的数据一致性X/OpenDTP事务模型(强一致性)1.RM 表示资源管理器2.TM 表示事务管理器2pc协议1.写事务日志2.提交回滚CAP/BASE1.CAPC:consistency(强一致性)A:avaiablity(可用性)P: Partion Tolerance 分区容错如果出现网络分区,还要保证系统的可用性raft 脑裂eure
2021-01-15 21:50:27
296
原创 国内微服务最新使用组件以及趋势
#1.服务注册与发现:nacos;#2.服务调用:openFegin已经代替了netflix-Fegin;#3.服务负载:LoadBalaner#4.服务熔断:Resilience4J和Sentienl,替换Hystrix#5.服务配置中心:config已被nacos替换#服务网关:gateway,旧版本zuul;...
2021-01-15 12:02:18
196
原创 java中的4中引用类型
1.强引用java默认的是强引用,比如:Object obj=new Object();//只要obj还指向Object对象,Object对象就不会被回收ojb=null;只要强引用还存在,垃圾回收器永远不会回收被引用的对象,哪怕内存不足,jvm也会直接抛出OutOfMemoryError。不会被回收,如果想中断引用和对象的关系,可以显示的将对象赋值为null,这样一来对象就会在合适时,回收对象。2.软引用软引用用来描述非必须而有用的对象的,在内存足够时,软引用对象是不会被回收的,只有系统内存不
2021-01-11 11:17:57
159
原创 nacos的初步认识-服务端-分布式高可用性
如何保证数据的一致性-raft算法要想在分布式系统中保证服务的高可用,则必须用集群来,不可能是单节点,这样服务宕机会导致服务不可用,会造成严重的损失。1.raft算法、paxos算法。raft算法的组件应用有 redis,sentinel,etcd。paxos算法的组件应用有:zk。1.1 leader选举1.1.1 启动的时候进行选举1.1.2 leader宕机时进行选举1.2 数据的一致性同步1.2.1保证集群节点中所有的节点数据的一致性2.raft 原理基于2pc 弱一致性原理,保
2021-01-07 23:38:05
2018
原创 nacos的初步认识-服务消费端-源码解析
消费端概述应用app从nacos-server上获取远程服务的地址信息用来调用;1.0服务的发现NacosDiscoveryClient.getInstances(serviceId);从过这个方法从nacos上获取对应的服务;@Override public List<ServiceInstance> getInstances(String serviceId) { try { return serviceDiscovery.getInstances(serviceId);
2021-01-05 22:26:11
624
原创 nacos的初步认识-服务注册-源码解析
nacos是什么?1.1 来自于官网诠释Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。1.2 来自于第一视角的角度来看Nacos可以用来做服务注册,发现 以及配置管理;2 提供者2.1 服务注册 discover2.1.1概述将应用app的matedata 数据以及地址信息注册到 nacos-server端。2.1.2 代码入口NacosServiceRegistry.register
2021-01-04 23:09:24
552
原创 dubbo之服务发布源码解析
1.通过加载spring容器来进行加载dubbo1.1 解析配置文件spring通过DubboNamespaceHandler进行加载dubbo的各个组件加载各种configbean,通过DubboBeanDefinitionParser解析各个组件,有没有注意到以bean结尾的3个类,ConfigCenterBean(配置中心),ServiceBean(服务提供者),ReferenceBean(服务消费者);显而易见的是服务的提供者在servicebean中;1.1.1 servicebean的
2020-05-17 16:51:38
438
原创 Mysql性能调优之事务和锁详解
1.事务特性1.1 原子性最小单元,不可再分割1.2 一致性相关的事务操作要么一致性成功,要么一致性失败;1.3 隔离性事务与事务之间具有不可见性;1.4 持久性一旦事务提交了,则永久性生效;2. 事务的并发问题2.1 脏读事务A在读取数据时,事务B在更新数据后,回滚后;事务A再次读取数据时不一致;2.2 不可重复读事务A再读取数据时,事务B再更新数据后,并提交数据,事务A再读取数据时不一致,叫不可重复读2.3 幻读系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等
2020-05-12 09:05:41
233
原创 dubbo之简单认识
1.负载均衡权重随机算法假设我们有一组服务器 servers = [A, B, C],他们对应的权重为 weights = [5, 3, 2],权重总和为10。现在把这些权重值平铺在一维坐标值上,[0, 5) 区 间属于服务器 A,[5, 8) 区间属于服务器 B,[8, 10) 区间属于服务器 C。接下来通过 随机数生成器生成一个范围在 [0, 10) 之间的随机数,然后计算这个随机数会落...
2020-04-01 20:55:36
138
原创 zookeeper之顺序一致性
由于网络延迟原因,多个客户端访问的数据可能不一致;但是在同一视图里,客户端所访问的数据是一致的;大概就是A客户端在进行修改x=0变为x=1时,修改后leader节点会返回zxid给到客户端A,如果客户A下一次再请求zookeeper获取读请求时,请求到follow节点上,由于2pc协议,如果该follower节点上的数据没有更新,所以zxid的旧值,因为和客户A经过leader返回时的zxid...
2020-04-01 11:59:32
382
原创 zookeeper原理之leader选举
每个节点都会投自己的票据(myid/zxid/epoch);如果有三台服务器的话,相当与每台集器里有3个票据;选举规则:首先需要比较epoch最大;如果相等的下,接下来要比较谁的zxid最大就投谁如果zxid相等的情况下,看下谁的myid最大;在部署zookeeper集群中,初始设置时会添加myid;所有第二轮投票时就可以选举出谁是leader...
2020-04-01 11:52:36
110
原创 zookeerper之zab协议
1 ZAB协议ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议;在zookeeper中主要依赖ZAB协议来实现分布式数据的一致性,基于该协议,zookeeper实现主备模式来保证集群中各个副本之间的数据一致性2. ZAB协议介绍2.1崩溃恢复和原子广播当集群启动时或者leader节点网络终端,崩溃等情况,ZAB协议就会进入恢复模式并选举新的leader...
2020-03-31 21:09:16
154
原创 Redis的分布式原理
1.为什么需要redis集群?1.1 为什么需要集群?1.1.1 性能Redis本身的QPS已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们希望有更多的Redis服务来完成工作。1.1.2 扩展第二个是出于存储的考虑。因为 Redis所有的数据都放在内存中,如果数据量大,很容易受到硬件的限制。升级硬件收效和成本比太低,所以我们需要有一种横向扩展的方法。1...
2020-03-31 11:32:47
731
原创 redis的工作原理
1.发布订阅模式1.1列表的局限性lpop和lpush可以实现消息队列,但是消息不停的要用lpop来查看list中是否有等待消息处理,为了减少通信消耗,可以让lpop睡眠一会,再进行消费;这样会存在两个问题?1.如果生产者的速度远远大于消费者的速度,则导致list浪费;2.消息的实时性降低;list还提供了阻塞命令:blpop没有任何元素弹出时,将会被阻塞;blpop queue 5...
2020-03-30 20:28:42
1474
原创 Redis基础篇
非关系型数据库的特点:储存非结构化的数据,比如文本,图片,音频,视频;表与表之间没有关联性,可扩展性强;保证数据的最终一致性。遵循base理论, BasicallyAvailable(基本可用); Soft-state(软状态); Eventually Consistent(最终一致性)。支持海量数据的读写和高并发的高效写入;支持分布式,能够对数据进行分片存储,扩缩容简单;1、K...
2020-03-30 12:10:44
288
原创 tomcat之性能调优篇
Tomcat性能的指标?怎样判断一个tomcat的好坏?吞吐量,响应时间,错误数,cpu,内存[tomcat java进程];命令和工具ps -ef|grep tomcat -->pid;cat pid status;性能优化server.xml文件可以进行优化Connetor :Host/context/executor:属性可能进一步的优化jmeter进行压测;进行吞...
2020-03-29 19:15:43
241
原创 JVM之参数和工具介绍
JVM参数(1)标准参数java -version/-help(2)-x参数非标准参数,随着jdk的版本而变动-Xint(3)-XX参数(重点)a- Boolean类型-xx:[+/-]name 表示启动或停止b-非boolean类型-XX:name=value-XX:MaxHeapSize=100M(4)其他参数-Xms100m >-XX:initialHeapS...
2020-03-28 20:33:18
91
原创 JVM性能调优之垃圾回收算法以及使用
1.复制算法有两个相等的区域,将未回收的对象复制到空的区域;优点:解决了空间碎片问题;缺点:带来了空间内存的浪费;2.标记-清除算法对堆进行扫描,标记出已被引用,未被使用和空,然后进行清除未被使用的对象;缺点:造成空间碎片,以至于物理空间不连续,标记和清除比较耗时,效率比较低;3.标记–整理对堆进行扫描,标记出已被引用,未被使用和空,将所有已使用的对象向一端移动;优点:解决了空间...
2020-03-27 16:38:31
84
原创 java性能调优之进阶篇
1.从java虚拟机栈说起在主线程被调用时,会创建一个java虚拟机栈,当方法被调用时,会创建一个栈帧;栈帧粗略的讲,是由四部分组成,有局部变量表,操作数栈,动态链接,方法返回地址;2.java对象的内存分布由对象头+实例数据+对其填充组成的;对象头MarkWord 标识一系列的标记位(哈希码,分代年龄,锁状态标志位),class pointer 指向对象对应类的类元数据的内存地址,L...
2020-03-26 16:39:28
86
原创 JVM性能调优之基础篇
1.前序大家都所认知的java程序是一次编译到处运行机制,为什么能到处运行呢?因为java经过javac编译成class文件,然后交给Java虚拟机来运行;2.java的class文件如何交给java虚拟机?经过类加载机制2.1 装载通过classloader来寻找所有class的绝对路径从自己需要加载的类开始(自己的类路径)->app ClassLoader(加载指定包以及...
2020-03-26 11:47:11
116
原创 zookeeper如何实现分布式锁
1.利用zk的特性利用zookeeper的节点特性实现独占锁,就是同级节点的唯一性,多个进程往zookeeper的指定节点中创建一个节点名称相同的节点,只有一个成功,另一个创建失败;创建失败的节点通过zookeeper的watcher机制来监听这个子节点的变化,一旦子节点发生删除事件,则再次触发进程区写锁这种实现方式简单,但是会产生"惊群效应",如果存在许多客户端在等待获取锁,当成功获取到锁...
2019-12-10 22:23:18
745
原创 zookeeper的CURD基于java实现
zookeeper的curdpackage com.zookeeper.demo;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.retry.Exponenti...
2019-12-10 22:01:14
93
原创 zookeeper的初步认识
1.zookeeper的初步认识它是一个可靠的分布式协调服务,主要用来解决分布式一致性问题,同时也是一种粗粒度的分布式锁服务。1.1 分布式一致性问题在一个分布式系统中,有多个节点,每个节点都会提出一个请求,所有节点只能确定一个请求被通过,这个通过需要所有节点达成一致的结果。所谓的一致性是所有的请求中能够选出一个最终确定的请求。由于网络存在不可靠的问题,存在消息丢失,或者网络延迟,如何在这...
2019-11-24 19:58:23
152
原创 Springboot之自动装配
1.创建一个springboot项目1.依赖包pom.xml<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> &...
2019-11-23 20:32:00
88
原创 基于netty实现简洁版RPC
1.服务提供者package com.netty.provider;import com.netty.api.IRpcService;/** * Created by chenli on 2019/11/13. */public class IRpcServiceImpl implements IRpcService { @Override public int a...
2019-11-14 21:32:13
173
原创 基于netty实现的迷你版TOMCat
1.首先有一个tomcat类用来管理网络请求和servlet映射package com.tomcatmini;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.s...
2019-11-13 21:57:45
308
原创 java的发展历程
1.java中的BIO,NIO,AIO1.1BIO和NIO对比BIO模型IO模型BIO通信面向流处理阻塞IO(多线程)触发无NIOIO模型NIO通信面向缓冲(高速公路,多路复用技术)处理非阻塞IO(反应堆 Reactor)触发选择器(轮询机制)对比。1.1 面向流和面向缓冲java ...
2019-11-11 00:16:11
161
原创 迷你版手写RPC
1.什么是RPC?个人理解:RPC是远程服务通信。需要通过计算机网络来传输数据。2.api提供1.定义一个远程调用的接口IHellowServicepackage com.rpc.api;/** * Created by chenli on 2019/11/10. */public interface IHellowService { public String sayH...
2019-11-10 23:06:02
68
原创 tcp协议的三次握手和四次挥手
TCP握手协议TCP的可靠消息首先要建立一个有效的连接,在数据传输前,需要三次握手来建立一个连接。所谓的三次握手就是在建立TCP连接时,需要客户端和赴服务端总共发送3次数据包来确认建立连接。在socket编程中,这个过程由客户端发起第一次握手,由客户端发送一个TCP的SYN标志位置1的包,指明客 户端打算连接的服 务器的端口,以及 初始序号 X , 保存 在包头的序列号 (Sequence ...
2019-11-10 18:20:28
108
原创 分布式架构初步认识之笔记
1.架构的分类架构一般可以分为技术架构,应用架构,业务架构:1.业务架构从概念层帮助开发人员更好的理解系统。2. 应用架构从逻辑层面帮助开发落地系统,如数据交互关系、应用形式、交互方式,是的整 个系统逻辑上更容易理解,步入大家熟知的SOA就属于应用架构的范畴 。3.技术架构主要解决技术平台选型、如操作系统、中间件、设备、多机房、水平扩展、高可 用等问题。2.大型架构的网站演进2.1 电...
2019-11-10 17:40:29
181
原创 序列化和反序列化之学习笔记
1.java领域的对象传输1.基于socket对象传输1.传输对象package com.study.serializable;/** * Created by chenli on 2019/11/9. */public class User { private String name; private int age; public String get...
2019-11-09 21:06:01
158
原创 ConcurrentHashMap如何实现扩容机制之学习笔记
1 addCount transfer扩容首先判断是否需要扩容,也就是当更新后的键值对总数baseCount>=阀值(sizeCtl)时,则重新进行hash;扩容进行两个阶段:1.有一个线程正在扩容,另一个线程进来协助扩容;2.如果当前没有扩容,直接触发扩容操作;private final void addCount(long x, int check) {...if (chec...
2019-11-02 00:02:20
3807
4
原创 ConcurrentHashMap是如何保证线程安全?
1.ConcurrentHashMap简介ConcurrentHashMap是一个Map集合,数据结构是由数据和链表组成;在jdk1.7中使用了分段锁实现线程安全,不过segment锁的粒度大。在java1.8中做了优化,锁的粒度更小了,只在多线程环境下在相同位置添加值时,需要获取锁;还在扩容上做了优化。...
2019-11-01 00:36:51
3388
原创 J.U.C之阻塞队列使用
1. 生产者和消费者分布式消息队列有activeMQ,kafka,RabbitMQ等,消息队列使程序之间解耦,提升程序响应效率。2.阻塞队列的使用2.1注册成功后添加积分场景模拟:就是用户注册的时候,在注册成 功以后发放积分。这个场景在一般来说,我们会这么去实 现但是实际上,我们需要考虑两个问题 1. 性能,在注册这个环节里面,假如添加用户需要花费1秒 钟,增加积分需要花费 1 秒钟,...
2019-10-30 23:34:16
177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人