- 博客(15)
- 收藏
- 关注
原创 分布式锁redis及zookeeper实现区别
基本要求:互斥性。在任意时刻,只有一个客户端能持有锁。不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。Redis --Jedis实现jedis.set(lockKey, lockId, “NX”,“PX”, 15000)。格式 - String set(Stringkey, String va
2021-10-23 17:14:14
533
原创 Mysql
执行器执行器是一个非常核心的组件,负责跟存储引擎配合完成一个sql语句在磁盘和内存层面的全部操作,包括从磁盘加载数据到Buffer Pool中进行缓存,包括写入undo日志,包括更新Buffer Pool里的数据,以及写入redo log buffer,redo log刷入磁盘,写binlog等等。提交事务根据配置的策略把redo日志从redo log buffer里刷到redo log磁盘中配置项:innodb_flush_log_at_trx_commit。1、当值为0时,在提交事务时,不会把r
2021-09-12 18:29:19
473
原创 JVM及GC
满足下面3个条件方法区里的类会被回收:1、该类的所有实例对象都已从java堆里被回收2、加载这个类的ClassLoader已经被回收3、对该类的class对象没有任何引用tomcat需要破坏双亲委派模型的原因:1、tomcat中的需要支持不同web应用依赖同一个第三方类库的不同版本,jar类库需要保证相互隔离;2、同一个第三方类库的相同版本在不同web应用可以共享3、tomcat自身依赖的类库需要与应用依赖的类库隔离4、jsp需要支持修改后不用重启tomcat即可生效,为了上面类加载隔离和类
2021-09-05 09:49:25
165
原创 Dubbo可扩展机制
Dubbo动态代理策略默认使用javassist 动态字节码生成,创建代理类。但是可以通过 spi 扩展机制配置自己的动态代理策略。spi简单来说,就是 service provider interface ,说白了是什么意思呢,比如你有个接口,现在这个接口有 3 个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢? 这就需要 spi 了,需要根据指定的配置或者是默认的配置,去找到对应的实现类加载进来,然后用这个实现类的实例对象。spi 机制一般用在哪里?插件扩展的场景,比如说你开发了一个
2021-08-23 19:42:33
227
原创 Synchronized原理和与ReentrantLock的区别
synchronized原理synchronized的底层是使用操作系统的mutex lock实现的。1、内存可见性:同步块的可见性是由“如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值”、“对一个变量执行unlock操作之前,必须先把此变量同步回主内存中(执行store和write操作)”这两条规则获得的。2、操作原子性:持有同一个锁的两个同步块只能串行地进入锁的内存语义:1、当线程释放锁时,JMM会把该线
2021-08-18 20:24:03
200
原创 volatile原理
volatile原理JMM原子性操作read,读取,从主内存读取数据load,载入,将主内存读取到的数据写入工作内存use,使用,从工作内存读取数据来计算assign,赋值,将计算好的值重新赋值到工作内存中store,存储,将工作内存数据写入主内存write,写入,将store过去的变量赋值给主内存的变量lock,锁定,将主内存变量加锁,标识为线程独占状态unlock,解锁,将主内存变量解锁,解锁后其他线程可锁定该变量内存可见性相关概念:线程对共享变量修改的可见性。当一个线程修改了共享变
2021-08-18 20:22:54
75
原创 Dubbo注册中心
在Dubbo微服务体系中,注册中心是其核心组件之一。Dubbo通过注册中心实现了分布式环境中各服务之间的注册与发现,是各个分布式节点之间的纽带。其主要作用如下:动态加入。一个服务提供者通过注册中心可以动态地把自己暴露给其他消费者,无须消费者逐个去更新配置文件。动态发现。一个消费者可以动态地感知新的配置、路由规则和新的服务提供者,无须重启服务使之生效。动态调整。注册中心支持参数的动态调整,新参数自动更新到所有相关服务节点。统一配置。避免了本地配置导致每个服务的配置不一致问题。工作流程服务提供
2021-07-20 20:22:41
119
原创 Hystrix
在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有 的时候某些依赖服务出现故障也是很正常的。 Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提供故障时的 fallback 降级机制。 总而言之,Hystrix 通过这些方法帮助我们提升分布式系统的可用性和稳定性。Hystrix 的设
2021-06-29 16:33:23
448
原创 Dubbo
dubbo 工作原理第一层:service 层,接口层,给服务提供者和消费者来实现的第二层:config 层,配置层,主要是对 dubbo 进行各种配置的第三层:proxy 层,服务代理层,无论是 consumer 还是 provider,dubbo 都会给你生成代理,代理之间进行网络通信第四层:registry 层,服务注册层,负责服务的注册与发现第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务第六层:monitor 层
2021-06-25 18:47:54
95
原创 分库分表及读写分离
分库分表水平拆分的意思,就是把一个表的数据给弄到多个库的多个表里去,但是每个库的表结构都一样,只不过每个库表放的数据是不同的,所有库表的数据加起来就是全部数据。水平拆分的意义,就是将数据均匀放更多的库里,然后由多个库来扛更高的并发,还有就是用多个库的存储容量来进行扩容。垂直拆分的意思,就是把一个有很多字段的表给拆分成多个表,或者是多个库上去。每个库表的结构都不一样,每个库表都包含部分字段。一般来说,会将较少的访问频率很高的字段放到一个表里去,然后将较多的访问频率很低的字段放到另外一个表里去。因为数据库是
2021-06-15 10:38:46
323
原创 redis
redis 的线程模型redis 内部使用文件事件处理器 file event handler ,这个文件事件处理器是单线程的,所 以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。文件事件处理器的结构包含 4 个部分:多个 socketIO 多路复用程序文件事件分派器事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)多个
2021-06-09 21:24:07
79
原创 Elasticsearch
相关概念Cluster 集群:集群包含多个节点,每个节点属于哪个集群都是通过一个配置来决定的,对于中小型应用来 说,刚开始一个集群就一个节点很正常。Node 节点:Node 是集群中的一个节点,节点也有一个名称,默认是随机分配的。默认节点会去加入一个名 称为 elasticsearch 的集群。如果直接启动一堆节点,那么它们会自动组成一个elasticsearch 集群,当然一个节点也可以组成 elasticsearch 集群。Document&Field:文档是 es 中最小的数据单元,一个
2021-06-03 19:36:25
206
原创 并发编程及工具类
并发编程CPU时间片轮转机制:又称RR调度,会导致上下文切换什么是进程和线程进程:程序运行资源分配的最小单位,进程内部有多个线程,会共享这个进程的资源线程:CPU调度的最小单位,必须依赖进程而存在。并行和并发并行:同一时刻,可以同时处理事情的能力并发:与单位时间相关,在单位时间内可以处理事情的能力调用一个线程的interrupt() 方法中断一个线程,并不是强行关闭这个线程,只是跟这个线程打个招呼,将线程的中断标志位置为true,线程是否中断,由线程本身决定。isInterrupted()
2021-05-03 12:39:27
78
原创 Kafka如何做到高可用及保证写入数据不丢失
Kafka如何做到高吞吐低延迟的高并发高性能页缓存+磁盘顺序写。首先kafka是基于操作系统的页缓存(page cache)来实现写入文件,写入的时候先往页缓存中写,基于内存,性能非常好,然后由操作系统自己决定何时把数据写入磁盘,写磁盘是按追加在文件结尾顺序写的方式,这样性能也非常好零拷贝技术。读数据的时候,会先看操作系统中的cache中是否存在,存在的话直接让操作系统中cache的数据发送到网卡后传输给消费者,不会拷贝数据到socket缓存。Kafka如何保证写入数据不丢失分布式存储架构。k
2021-04-26 21:00:57
610
原创 Eureka和Consul的区别
Eurekaclient默认每隔30s发送请求给server,拉取最新的注册表client默认每隔30s发送心跳给server,证明自己还活着server定时检测默认超过90s,client没有发送心跳更新时间,则认为client挂了拉取注册表:维护和拉取注册表、更新心跳时间,都是发生在内存里具体拉取时基于多级缓存来拿数据,这样可以减少并发读写冲突,且进一步提高服务响应先从 ReadOnlyCacheMap 查缓存的注册表;若没有,就找ReadWriteCacheMap 缓存的注册表;若
2021-04-24 18:10:09
476
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人