- 博客(10)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于redis分布式配置中心
基于redis分布式配置中心基于redis分布式配置中心常见的配置中心有spring-cloud、dubbo、zk、nacos等,都需要引入第三方中间件,如果项目比较小,只是为了实现配置中心而引入中间件,有点得不偿失,增加维护成本;redis在大多数引用中都有使用,基于这一背景产生了此项目。通过redis hash,PubSub实现动态更新@Vaule,Environment等配置属性值功能。项目介绍采用spring-boot-stater方式接入,实现了低耦合,便于开发管理。应用启动自动加载配
2020-07-22 09:13:41
1106
原创 Logan分布式改造&OSS上传优化
Logan分布式改造&OSS上传优化背景logan是美团开源的一个日志回捞系统,日志文件在默认在本地存储,到上报用户增多时,单机性能到达瓶颈,需要升级架构,改造为分布式。问题日志文件的共享防止重复解析日志文件解决方案日志文件存储方式采用对象存储OSS解析日志文件增加redis分布式锁详情客户端上报的日志分为两种,1是手动回捞的日志,2是客户端奔溃上报日志。日志文件是加密的压缩文件,上传到服务端以后,需要进行解压解密,然后上传存储到oss。日志文件解密解压过程,是以‘\1’
2021-05-28 15:38:07
363
原创 Sychronized图解锁的升级(二)
Sychronized图解锁的升级(二)Mark Work状态变化锁的升级在Java SE 1.6中,锁一共有4种状态,级别由低到高依次:无锁状态、偏向锁状态、轻量级锁、重量级锁。锁只能升级不能降级,目的是为了提高获得锁和释放锁的效率。偏向锁:始终是同一个线程访问同步块轻量级锁:没有资源竞争,多个线程交替访问同步块重量级锁:有资源竞争,多个线程同时访问同步块偏向锁的获得和撤销轻量级锁及膨胀流程图...
2020-11-22 21:45:45
102
原创 Zookeeper分布式锁实现
分布式锁原理图Code 实现Lock.javapublic interface Lock { void getLock(); void unLock();}AbstractLock.javapublic abstract class AbstractLock implements Lock{ @Override public void getLock() { //竞争锁 if(tryLock()){
2020-09-10 16:43:43
100
原创 Synchronized解析(一)
基本使用Synchronized关键字是jdk内置的解决并发问题的锁。jdk1.6以后进行了优化,增加了偏向锁、轻量锁、重量锁。用法:修饰普通方法修饰静态方法修饰代码块举例:修饰普通方法public class SychMethod { public synchronized void method1(){ System.out.println("sych method1 start"); try { System.out
2020-09-02 20:46:44
138
原创 Zookeeper集群搭建(docker-compose)
初识ZookeeperZookeeper提供了一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务。简单的数据结构,树形结构,类型Linus文件系统。顺序访问,对于每一个读请求,zk会分配一个全局唯一的递增编号。高性能,数据存储于内存(笔者认为就是一个内存型树形数据结构数据库)。常见场景数据发布订阅负载均衡命名服务Master选举集群管理配置管理分布式队列分布式锁进入正题集群搭建环境搭建准备3台虚拟机,安装好docker-compose,拉取zookeeper
2020-08-03 20:53:02
605
原创 Redis Lua脚本使用(分布式锁)
Lua脚本Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的 Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式 脚本的最佳选择。Redis中使用Lua脚本的好处多个请求合并成一个发送,减少请求次数redis将一个lua脚本作为一个整体操作,提供了在redis中的原子操作客户端发送的脚本在redis中永久存在,这样其他客户端可以复用脚本速度快、可移植、源码小巧Lua脚本使用(spring-boot
2020-07-29 16:51:39
370
原创 2PC和3PC分布式事务
两阶段提交(2PC)优点:尽量保证了数据的强一致性,各大主流数据库本身支持(XA协议)缺点:单点问题:阶段一完成以后,事务管理器宕机,导致无法进行阶段二,资源管理器一直处于阻塞状态。同步阻塞:阶段一完成以后,所有的资源管理器都属于阻塞状态,直到事务提交或回滚才能释放资源。数据不一致:在第二阶段中,事务管理器发送commit指令,由于网络等原因,部分资源管理器没有收到指令,导致数据不一致。总结:2PC由于锁定资源时间长,对性能影响大,基本不适用分布式事务问题三阶段提交(3PC)
2020-07-22 16:51:33
244
原创 redis配置中心原理篇
redis配置中心原理篇实现思路所有的配置数据(xx.properties,xx.yml)都存储在环境变量Environment中,更改配置其实就是更改Environment中的属性值。在单例bean中的@Value注解配置的属性值如何实现动态更新?单例bean只创建了一次,其余取值都是从singleObjects缓存中拿取。如何解决这个问题?当然可以用多例,我们也可以自定义Scope。更新完Environment环境变量以后,刷新带有我们自定义Scope的BeanDefinition
2020-07-22 12:32:45
827
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人