自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 浅谈事务的四个基本特性

本文重温了事务的四个特性,以及在mysql的innodb引擎中是如何实现的,言简意赅

2022-08-03 23:03:10 240 2

原创 Kafka 的原理解析

如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的。不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用快速诊断问题。下面我们来探讨一下这三个问题Kafka 是如何进行复制的Kafka 是如何处理来自生产者和消费者的请求的Kafka 的存储细节是怎样的如果感兴趣的话,就请花费你一些时间,耐心看完...

2020-02-26 22:08:20 302

原创 对接微信公众号的流程

前言最近对接一个新的微信公众号,功能比较简单,但是不熟悉微信公众号对接流程的同学可能需要花些时间阅读官方文档和调试。笔者对接过程也是一波三折,于是把流程分享出来帮助没有对接过的同学。对接流程首先,开发微信公众号的相关功能一般是公司新申请的服务号,如果刚开始产品同学的需求比较简单,没有复杂的交互,可以先尝试在微信公众平台的功能编辑区完成功能,如果简单的情况下一般产品和运营同学就可以直接完成了,...

2020-02-19 11:47:46 2250

原创 mysql主从复制原理

1、为什么需要主从复制?在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。做数据的热备架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。...

2020-02-18 21:29:43 449

原创 记录一次dubbo本地缓存清理失败的惨痛教训

我们都知道dubbo的SPI扩展模式可以对开发者的功能扩展进行友好支持。最近我们有一些业务场景,用到了需要dubbo的本地缓存的功能,来支持业务场景的需要,目前使用的是2.6.5版本,发现dubbo本身支持的本地缓存没有做清理重置操作,担心会有问题,于是自己利用SPI进行了本地缓存扩展。由于测试场景简单,不够充分,导致上线引发了相关服务的pot节点全部在启动半小时后内存和cpu使用率同事飙升,虽然...

2019-12-28 14:35:08 5400

原创 JedisPool的testOnBorrow、testOnReturn和testWhileIdle参数的实现原理

前言我们平时使用jedispool来连接Redis的集群、sentinel或者主从服务器,经常会遇到testOnBorrow、testOnReturn和testWhileIdle这些参数的设置问题,我们知道连接Redis服务器的连接是维护在通用对象池中的,如果想要正确的、符合自己业务场景的设置这些参数,需要了解其底层原理。Jedispool和genericObjectPool的关系我们翻到j...

2019-12-17 19:18:40 8770 2

转载 滴滴 Elasticsearch 多集群架构实践

Elasticsearch 是基于 Lucene 实现的分布式搜索引擎,提供了海量数据实时检索和分析能力。Elastic 公司开源的一系列产品组成的 Elastic Stack,可以为日志服务、搜索引擎、系统监控等提供简单、易用的解决方案。一、滴滴 Elasticsearch 简介滴滴 2016 年初开始构建 Elasticsearch 平台,如今已经发展到超过 3500+ Elasticse...

2019-12-01 22:44:52 211

转载 为什么MySQL用B+树做索引

索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在[1,2,3,4]中找到4这个数据,直接对全数...

2019-11-15 19:24:46 597 1

转载 数据库主从不一致的处理方案

在聊数据库与缓存一致性问题之前,先聊聊数据库主库与从库的一致性问题。问:常见的数据库集群架构如何?答:一主多从,主从同步,读写分离。如上图:(1)一个主库提供写服务(2)多个从库提供读服务,可以增加从库提升读性能(3)主从之间同步数据画外音:任何方案不要忘了本心,加从库的本心,是提升读性能。问:为什么会出现不一致?答:主从同步有时延,这个时延期间读从库,可能读到不一致的数据。...

2019-11-05 20:11:00 392

转载 缓存与数据库不一致的问题

一、数据库主从不一致先回顾下,无缓存时,数据库主从不一致问题。如上图,发生的场景是,写后立刻读:(1)主库一个写请求(主从没同步完成)(2)从库接着一个读请求,读到了旧数据(3)最后,主从同步完成导致的结果是:主动同步完成之前,会读取到旧数据。可以看到,主从不一致的影响时间很短,在主从同步完成后,就会读到新数据。二、缓存与数据库不一致如上图,发生的场景也是,写后立刻读:(1...

2019-11-05 19:56:57 201

转载 缓存,究竟是淘汰,还是修改?

允许cache miss的场景,不管是memcache还是redis,当被缓存的内容变化时,是改修改缓存,还是淘汰缓存?这是今天将要讨论的话题。问:KV缓存都缓存了一些什么数据?答:(1)朴素类型的数据,例如:int(2)序列化后的对象,例如:User实体,本质是binary(3)文本数据,例如:json或者html(4)…问:淘汰缓存中的这些数据,修改缓存中的这些数据,有什么差别?...

2019-11-04 20:07:02 116

转载 缓存的误用

误用一:把缓存作为服务与服务之间传递数据的媒介如上图:服务1和服务2约定好key和value,通过缓存传递数据服务1将数据写入缓存,服务2从缓存读取数据,达到两个服务通信的目的该方案存在的问题是:数据管道,数据通知场景,MQ更加适合多个服务关联同一个缓存实例,会导致服务耦合误用二:使用缓存未考虑雪崩常规的缓存玩法,如上图:服务先读缓存,缓存命中则返回缓存不命中,再读...

2019-11-04 19:57:04 98

转载 GET请求的长度限制

最近在生产环境为上游服务提供了一个批量接口(dubbo接口),没有做长度的限制,造成我调用下游的http请求(GET请求)时由于长度(大概9000+个字符)超过了限制,造成直接返回400 Bad Request,影响了上游服务的使用,特查阅了相关资料,确定了Nginx和Apache等组件都是由相应的限制的,我们使用时要特别注意。 今日,看到前同事大牛多年前的csdn知识总结,发现原来一直信奉...

2019-10-25 22:40:48 9473

转载 JVM参数调优

不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同...

2019-10-25 22:35:02 188

转载 垃圾回收器

知识回顾:第一篇《Jvm垃圾回收器(基础篇)》主要讲述了判断对象的生死?两种基础判断对象生死的算法、引用计数法、可达性分析算法,方法区的回收。在第二篇《Jvm垃圾回收器(算法篇)》中主要介绍了垃圾回收的几种常用算法:标记-清除、复制算法、标记-整理算法、分代收集算法。那么接下来我们重点研究Jvm的垃圾收集器(serial收集器、parnew收集器、parallel scavenge收集器、ser...

2019-10-25 22:20:20 194

原创 多线程场景下由于线程池使用不当引发的血案

由于线程池使用不当引发的血案## 标题背景分析:我们在开发某些类似用户运营侧的需求的时候,往往需要调用多个其他团队的接口来完成数据的整理,再处理业务,如果我们每个接口都同步串行调用,那么总体的响应时长往往是不可接受的,就需要考虑多线程异步的方式来并行调用,加快处理速度,但是使用多线程,尤其线程池使用不当,却会带来严重的后果。问题再现:我们先看看结果,由于某次需求需要紧急上线,开发时间和联调自...

2019-10-20 22:59:37 410

原创 由MissingServletRequestParameterException产生原因的分析

由MissingServletRequestParameterException产生原因的分析问题描述产生原因分析问题描述最近小弟封装了一个新的方法,大概是把请求访问controller层的信息,包括正常的响应和异常信息,通过http请求的方式发送给另外一个接口,之前是通过发送消息给kafka来完成的,改造过程中他除了把请求方式改变了,还把同步的方式改成了启用线程池的异步调用。public ...

2018-09-29 21:04:07 47136 2

原创 使用RedisTemplate配合lua脚本实现分布式锁

使用RedisTemplate配合lua脚本实现分布式锁目前业内常用的分布式锁的实现方式主要有以下几种:基于Redis的分布式锁基于zookeeper的分布式锁基于数据库的锁,如果是更新操作可以考虑乐观锁,如果是插入操作可以考虑在某些字段上建立唯一索引(这里展开说一下,前几天和架构师聊天,如果遇到无法为单一字段建立唯一索引的业务场景,那还可以考虑联合其他字段,建立联合唯一索引,变相使...

2018-09-08 16:58:52 10647 9

原创 动态切换数据源实现读写分离方案

最近生产环境mysql新增了从库,用于做读写分离,于是研究了配置动态数据源的方案。本文主要尝试了利用spring自带的动态选择数据源类以及Sharding-Sphere插件两种方案来实现mysql的读写分离。

2018-08-01 18:15:16 1447

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除