- 博客(576)
- 资源 (4)
- 收藏
- 关注
原创 springboot监控db事项
1. 增加CAT对SQL的监控//DynamicDataSourceConfig.javasessionFactory.setPlugins(new CatMybatisInterceptor("defaultDatasource"));//cat监控SQL执行效率2.增加对druid Connection的监控#logback.xml<logger name="druid.sql.Connection" level="DEBUG"/>#application.pro
2022-03-01 10:50:00 796
原创 1.2亿数据的表结构修改
背景 :tbl_order_detail 表目前存储1.2亿条数据,表中共56个字段。 字段pay_id采用tinyint数据结构,(带符号-128-127,无符号0-255)。随着业务的扩展,pay_id的字段需要扩充,修改为smallInt类型。技术方案:1. 新建tbl_order_detail_a表,与tbl_order_detail保持同样的数据结构(pay_id修改为smallInt类型)2. 数据迁移,将tbl_order_tail中的数据迁移到tbl_order_deta..
2022-02-21 17:31:29 1604 1
转载 traceId 跨线程使用
目录1. 为什么需要这个traceId 2.通过MDC设置traceId 2.1 使用filter过滤器设置traceId 2.2 使用JWT token过滤器的项目 2.3 使用Interceptor拦截器设置traceId 3.logback.xml中配置traceId 4.补充异步方法带入上下文的traceId 5.在接口放回中,增加traceId返回 先看一张图:有同学问:日志中[]中类似uuid的这个traceId是怎么实现的,这边文章就介绍下如何在s
2022-02-17 16:44:09 3073
转载 一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)
一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)_犬小哈-CSDN博客
2021-11-15 10:41:22 195
转载 记一次Safepoint导致长时间STW的踩坑之旅 GC
过 程 记 录现象:小米有一个比较大的公共离线HBase集群,用户很多,每天有大量的MapReduce或Spark离线分析任务在进行访问,同时有很多其他在线集群Replication过来的数据写入,集群因为读写压力较大,且离线分析任务对延迟不敏感,所以其G1GC的MaxGCPauseMillis设置是500ms。但是随着时间的推移,我们发现了一个新的现象,线程的STW时间可以到3秒以上,但是实际GC的STW时间却只有几百毫秒!打印GC日志 -XX:+PrintGC -XX:+Pr
2021-11-03 20:16:27 1362
转载 JVM 常用参数及safepoint
JVM系列-常用参数_weixin_30739595的博客-CSDN博客每日一面 - JVM 何时会 Stop the world - 简书1.堆内存堆内存用于存储new对象,垃圾回收器负责堆内存的管理。但Java程序实际占用的空间则由堆内存、栈内存(程序运行栈)、程序计数器、常量区、代码区、本地内存等。堆内存分为Young和Old,Young分为2个Survivor (From Survivor和To Survivor),1个eden,具体见JVM系列-垃圾回收。-Xms??[m|
2021-11-03 17:44:12 962
转载 7张图揭晓RocketMQ存储设计的奥妙
1、存储概述RocketMQ存储的文件主要包括Commitlog文件、ConsumeQueue文件、Index文件。RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时按顺序写文件,尽最大能力确保消息发送的高可用性与高吞吐量。但消息中间件一般都是基于主题的订阅与发布模式,消息消费时必须按照主题进行帅选消息,显然从Commitlog文件中按照topic去筛选消息会变得及其低效,为了提高根据主题检索消息的效率,RocketMQ引入了ConsumeQueue文件,俗成消费队列文件。关系
2021-11-03 11:10:44 177
转载 RocketMQ之消息查询IndexFile
原作:RocketMQ之消息查询IndexFile(四) - 红发-的个人空间 - OSCHINA - 中文开源技术交流社区首先我们先看看indexfile的流程是怎么样的,然后对其一步步分析源码调试,MessageStore中存储的消息除了通过ConsumeQueue提供给consumer消费之外,还支持通过MessageID或者MessageKey来查询消息;使用ID查询时,因为ID就是用broker+offset生成的(这里msgId指的是服务端的),所以很容易就找到对应的commitLog文件.
2021-11-02 20:39:30 535
转载 Druid连接池在MySQL主备切换时引发高可用问题
背景由于MySQL供应sql教程商内java基础教程部升级,线上python基础教程数据库需c#教程要主动进行主vb.net教程备切换。切换基于SIP漂移,理论上是毫秒级闪断。但在实际模拟演练的过程中,除了预期内切换瞬间产生的连接异常外,后续半个小时仍不断地产生连接异常,导致问题不可控。org.springframework.dao.RecoverableDataAccessException:### Error querying database. Cause: com.mysql.cj.j
2021-10-09 19:12:04 815
转载 聊聊ES写入数据的原理?查询数据的原理?倒排索引了解吗?ElasticSearch
es 写入数据的工作原理是什么啊? es 查询数据的工作原理是什么啊? 底层的 lucene 介绍一下呗? 倒排索引了解吗? 面试问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是......对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,那还能指望你什么呢?面试..
2021-09-22 19:34:04 298
转载 基于SpringBoot的javax.validation.Validation的参数校验方法
问题描述当要对用户输入的参数进行校验时,可以用javax.validation.Validation包下的注解进行验证,实现简单,并且是基于JSR-303标准的。添加pom.xml依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId>
2021-09-06 16:42:01 1158
转载 SpringBoot整合Feign
什么是FeignFeign是由Retrofit,JAXRS-2.0和WebSocket启发的一个java到http客户端绑定。 Feign的主要目标是将Java Http Clients变得简单。Feign的源码地址:https://github.com/OpenFeign/feign写一个Feign在我之前的博文有写到如何用Feign去消费服务,文章地址:http://blog.csdn.net/forezp/article/details/69808079 。简单的实现一个Feign客户
2021-07-26 17:30:00 10052
转载 SpringBoot外部化配置顺序
https://www.jb51.net/article/146324.htm先给大家介绍下spring boot 配置加载顺序,具体内容如下所示:使用 Spring Boot 会涉及到各种各样的配置,如开发、测试、线上就至少 3 套配置信息了。Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发、测试、线上环境使用不同的配置。在 Spring Boot 里面,可以使用以下几种方式来加载配置。本章内容基于 Spring Boot 2.0 进行详解。1、properties文件;
2021-07-26 17:15:59 163
转载 Feign输出日志(Demo)
1. 修改配置文件#'com.excemple.service.HelloService'为feignclient接口在项目中的路径logging.level.com.excemple.service.HelloService=debug
2021-07-23 17:04:41 479
原创 动态数据源配置
DataSource@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface DataSource { String value() default "";}DataSourceAspect@Aspect@Component@Order(1)public class DataSourceAspect { @Pointcut("@annotat
2021-07-20 20:29:02 585
转载 SpringBoot启动机制(starter机制)核心原理详解
一、前言使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程。本文的目的就是一步步分析springboot的启动过程,这次主要是分析springboot特性自动装配。那么首先带领大家回顾一下以往我们的web项目是如何搭建的,通常我们要搭建一个基于Spring的Web应用,我们需要做以下一些工作:pom文件中引入相关jar包,包括spring、springmvc、redis、mybaits、log4j、mys
2021-06-17 14:48:53 3077 3
转载 Spring Boot EnvironmentPostProcessor 的使用
EnvironmentPostprocessor的使用1、编写自定义配置文件custom.propertis,并放到resource目录下file.size=11112、编写自定义的加载类CustomEnvironmentPostProcessor,实现EnvironmentPostProcessor接口,重写postProcessEnvironment方法package org.yujuan.springbootlearning.processor;import org.s
2021-05-25 09:39:03 460
转载 RPC 和 HTTP 理解,看完这一篇就够了
RPC 和 HTTP 理解,看完这一篇就够了 网上充斥着各类类似于这样的文章:rpc 比 http 快了多少倍?既然有了 http,为什么还要用 rpc 调用等等。遇到这类文章,说明对 http 和 rpc 是由理解误区的。 这里再次重复强调一遍,通信协议不是 rpc 最重要的部分,不要被这类回答带偏。如果要了解 rpc 请更多的去了解服务治理(SOA)的一些基本策略,推荐去看看 dubbo 的相关文档。详解 rpc是远端过程调用,其调用协议通常包含:传输协议和序列化协议。...
2021-05-13 15:53:51 698
原创 服务注册和发现 nacos替换zookeeper
为什么Kafka在2.8版本中会“抛弃”Zookeeper,选择拥抱Raft?为什么nacos比zookeeper更适合做注册中心一文详解 Nacos 高可用特性
2021-05-06 20:05:33 948
转载 了解canal,看这个就够了
https://blog.csdn.net/zhouyan8603/article/details/108612575一. canal概述canal是Alibaba旗下的一款开源项目,纯Java开发.它是基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持mysql。应用场景:1.数据同步,比如:做在线、离线数据库之间的数据同步操作; 2.数据消费,比如:需要根据关注的数据库表的变化,做搜索增量; 3.数据脱敏,比如:需要将线上动态数据导入到其他地方,做数据脱敏。二.
2021-04-21 20:48:28 1833
转载 使用canal同步MySQL数据到ES的有序性保证
原著地址:https://www.jianshu.com/p/2144250176d9最近在做的项目中有用到canal实时同步MySQL的数据,并且写入es的场景,总结了一些心得,以备后查。总体同步的流程图如下:MySQL-es process.png链路中的环节稍微解释下: binlogMySQL的自身的操作日志,用来记录数据的变更操作及变更后的数据。需要开启并配置 binlog-format 为 ROW 模式。具体可查看canal文档。 canalali...
2021-04-21 20:44:39 710
原创 几个系统的gc参数配置,仅作参考
dispatcher-apiJava HotSpot(TM) 64-Bit Server VM (25.101-b13) for linux-amd64 JRE (1.8.0_101-b13), built on Jun 22 2016 02:59:44 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)Memory: 4k page, physical 98586924k(6610476k free), swap 0k(0k free)Co
2021-03-25 15:32:10 2422
原创 mysql之B+索引
最简单方式理解为什么MongoDB索引选择B-树,而 Mysql 选择B+树MySQL索引原理及慢查询优化MySQL索引背后的数据结构及算法原理联合索引(复合索引)在B+树上的结构
2021-03-23 14:13:34 94
转载 Synchronized(1) - 偏向锁
Synchronized(1) - 偏向锁在多线程并发编程中,synchronized一直扮演重要的角色,在JAVA SE 1.6版本之前被称为重量级锁。在JAVA SE 1.6中synchronized得到了优化,为了减少锁和释放锁带来的性能消耗而引入了偏向锁和轻量级锁。本文重点介绍偏向锁的实现。1 synchronized实现原理与使用利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现为以下三种形式。 对于普通同步方法,锁是当前实例对象
2021-03-19 17:25:34 416
转载 ZooKeeper 的应用场景
ZooKeeper 的应用场景0 OverviewZooKeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架。ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.ZooKeeper 解决了什么问题?高性能使得 ZooKee
2021-03-19 15:42:29 151
转载 高性能短链设计
前言今天,我们来谈谈如何设计一个高性能短链系统,短链系统设计看起来很简单,但每个点都能展开很多知识点,也是在面试中非常适合考察侯选人的一道设计题,本文将会结合我们生产上稳定运行两年之久的高性能短链系统给大家简单介绍下设计这套系统所涉及的一些思路,希望对大家能有一些帮助。本文将会从以下几个方面来讲解,每个点包含的信息量都不少,相信大家看完肯定有收获 短链有啥好处,用长链不香吗 短链跳转的基本原理 短链生成的几种方法 高性能短链的架构设计 注:里面涉及到不少布隆过
2021-03-19 14:03:49 93
转载 rocketmq消息积压一例
1、面试场景与面试技巧金三银四招聘季,一位粉丝朋友最近在蚂蚁金服第二轮面试时遇到这样一个问题:如果MQ消费遇到瓶颈时该如何处理?。横向扩容,相比很多读者与我这位朋友一样会脱口而出,面试官显然不会满意这样的回答,然后追问道:横向扩容是堆机器,还有没有其他办法呢?在面试过程中,个人建议大家在听到问题后稍作思考,不要立马给出太直接的答案,而是应该与面试官进行探讨,一方面可更深刻的理解面试官的出题初衷,同时可以给自己梳理一下思路。消费端遇到瓶颈,这是一个结果,但引起这个结果的原因是什么呢?在没有弄清
2021-03-19 10:05:48 2441
转载 线程池中的线程执行任务时遇到了异常,线程被销毁还是放回线程池重新利用呢?
原文点这里,我这做个备份。有的线程它死了,于是它变成一道面试题。有些线程它活着,但它躺在池中碌碌无为;有的线程它死了,于是它变成一道面试题。这次的文章,要从一次阿里的面试说起。我记得那天是周一,刚刚经历过周末过的放松,干劲十足的我正在键盘上疯狂的输出。这时,我的手机响了起来,拿起一看,是来自杭州的电话,心想这次是要给我推荐股票呢还是要让我贷款呢。我接起了电话,准备“调戏一番”。那边响起一个声音:"你好,请问是xxx吗?这边是杭州阿里巴巴,现在有时间进行电话面试吗?"。说实在的,听完这句话..
2021-03-15 19:45:54 3064
转载 美团针对Redis Rehash机制的探索和实践
背景Squirrel(松鼠)是美团技术团队基于Redis Cluster打造的缓存系统。经过不断的迭代研发,目前已形成一整套自动化运维体系,涵盖一键运维集群、细粒度的监控、支持自动扩缩容以及热点Key监控等完整的解决方案。同时服务端通过Docker进行部署,最大程度的提高运维的灵活性。分布式缓存Squirrel产品自2015年上线至今,已在美团内部广泛使用,存储容量超过60T,日均调用量也超过万亿次,逐步成为美团目前最主要的缓存系统之一。随着使用的量和场景不断深入,Squirrel团队也不断发现Re
2021-03-11 11:36:07 186
转载 Redis 哨兵集群模式下各节点之间的通讯机制
这篇文章,我们来看Redis是如何实现故障自动恢复的,它的实现正是要基于之前所讲的数据持久化和数据多副本而做的。Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis也提供了完善的故障恢复机制:哨兵。下面就来具体来看看Redis的故障恢复是如何做的,以及其中的原理。部署模式Redis在部署时,可以采用多种方式部署,每种部署方式对应不同的可用级别。单节点部署:只有一个节点提供服务,读写均在此节点,此节点宕机则数
2021-03-10 17:54:18 843
转载 jvm误区--动态对象年龄判定
虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到MaxTenuringThreshold中要求的年龄。学习jvm的人,基本都阅读过上面这段话,这里讲的是动态年龄的判定。对于动态的判定的条件就是相同年龄所有对象大小的总和大于Survivor空间的一半,然后算出的年龄要和MaxTenuringThreshold的值.
2021-03-08 10:34:24 219
原创 PhantomReference 引发的GC问题
一、问题分析围栏系统cms gc时间长,导致其他依赖系统接口报警。 查询gc日志如下:2020-05-08T16:12:11.082+0800: 883881.058: [GC remark 2020-05-08T16:12:11.082+0800: 883881.058: [Finalize Marking, 0.0272172 secs] 2020-05-08T16:12:11.109+0800: 883881.085: [GC ref-proc2020-05-08T16:12:11.109
2021-03-02 15:26:17 952
原创 ElasticSearch 入门指南
ElasticSearch使用指南系列文章索引【数据库】-- ElasticSearchElasticSearch官方指南
2021-02-24 19:09:31 104
原创 选单大厅架构分享
需求背景 即时单: 订单超过一定时间未派单成功,进入即时单大厅,满足'特定过滤条件'的司机可查看并抢单 预约单: 订单超过一定时间未派单成功,进入预约单大厅,满足'可发送抢单通知条件'的司机可查看并抢单 奖励: 对于通过抢单大厅抢单成功的订单,给予司机在价格等方面一定程序的奖励feed流系统架构 (脸书|推特|微博|知乎) 粉丝关注大V,大V发布文章(或动态),粉丝feed流中显示。 派单系统推送订...
2021-02-02 11:38:28 314
原创 Apparent connection leak detected
异常信息:pool.all.log.2021012610.gz:java.lang.Exception: Apparent connection leak detectedpool.all.log.2021012610.gz: at com.sq.driver.datasource.HikariDatasourceWrap.initDatasource(HikariDatasourceWrap.java:73)pool.all.log.2021012610.gz: at com.sq.config.
2021-01-26 18:48:30 12941 1
原创 根治JAR包冲突
JAR包冲突不可避免 maven依赖管理的方式决定了jar包冲突不可避免,举个例子:在项目中引入了zookeeper jar 包依赖,但zookeeper 内部还会依赖于其他的 jar 包,从而形成一种链式的传递依赖,即A->B->C->D1。在一个项目中,这种链式的传递依赖线路是多条的,最终表现为tree,假设另一条链路为E->F->D2,这里的D1和D2分别为D的不同版本,就产生了JAR包冲突。 maven 解析 pom.xml 文件时,同一...
2021-01-23 18:16:23 479
lucene in action第二版(word版)
2010-04-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人