- 博客(72)
- 资源 (6)
- 收藏
- 关注
原创 springcloud本地服务不注册到注册中心
开发人员本地的服务如果注册到服务器的注册中心,服务器上的服务如果调用到开发本地的服务会调用不通,影响大家的开发效率。以往为了不把本地服务注册到注册中心,会采用以下几种处理方式:1、修改服务名,例如:将user-service修改为user-service-double,这样别的服务就不会调用到开发人员本地注册上去的服务了2、修改是否注册到注册中心的配置参数为false:-Dspring.cloud.service-registry.auto-registration.enabled=false第
2022-01-26 18:21:38 3524
原创 SOLID设计原则
SOLID设计原则SRPThe Single Responsibility Principle单一责任原则OCPThe Open Closed Principle开放封闭原则LSPThe Liskov Substitution Principle里氏替换原则DIPThe Dependency Inversion Principle依赖倒置原则ISPThe Interface Segregation Principle接口分离原则一、单一职责原则
2021-07-02 19:50:44 951
原创 ThreadLocal详解
ThreadLocal详解下面引用ThreadLocal的API注释:This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of th.
2021-06-21 11:18:12 1042
原创 InheritableThreadLocal详解
InheritableThreadLocal详解打开InheritableThreadLocal类的源码,InheritableThreadLocal继承自ThreadLocal,重写了三个方法:childValue,getMap,createMappublic class InheritableThreadLocal<T> extends ThreadLocal<T> { /** * Computes the child's initial val...
2021-06-21 11:16:03 958
原创 consul-template + nginx实现动态负载均衡、故障转移
consul-template + nginx实现动态负载均衡、故障转移前置条件确保nginx服务器已安装consul客户端参考《Consul client端安装》一、Consul-Template安装wget https://releases.hashicorp.com/consul-template/0.24.1/consul-template_0.24.1_linux_amd64.tgztar -xvf consul-template_0.24.1_linux_amd64.tgzmv
2021-06-17 09:55:31 923
转载 TransmittableThreadLocal(TTL)
???? 功能???? 在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。一个Java标准库本应为框架/中间件设施开发提供的标配能力,本库功能聚焦 & 0依赖,支持Java 17/16/15/14/13/12/11/10/9/8/7/6。JDK的InheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父
2021-06-16 20:46:52 1079
原创 内存分析工具MAT的使用
内存分析工具MAT的使用MAT下载地址http://www.eclipse.org/mat/downloads.php我使用的是mac,这里选择Mac OSX版本下载启动MAT导入dump文件导入一个1.58G的dump文件报错"Java heap space"解决方式:编辑文件MemoryAnalyzer.ini修改最大堆内存为4G,-Xmx4g重新启动MAT,导入dump文件打开Leak Suspects视图,分析内存使用情况可以看到(a) Problem Susp
2021-06-09 20:22:49 883 1
原创 定时计算zipkin-dependencies数据
定时计算zipkin-dependencies数据创建聚合脚本创建相关目录mkdir -p /opt/server/zipkinmkdir -p /data/logs/zipkin/logsvim calc-zipkin-dependencies.sh#!/bin/bashSTORAGE_TYPE=elasticsearch ES_HOSTS=http://127.0.0.1:9200 nohup java -jar /opt/server/zipkin/zipkin-dependenc
2021-06-08 17:33:03 640
原创 Rancher下部署zipkin服务
Rancher下部署zipkin服务在rancher中新建一个服务部署指定服务名称为:zipkin配置Docker镜像为:openzipkin/zipkin:2.21.5将容器内的9411端口映射到主机的9411端口配置环境变量1、配置ES地址ES_HOSTS: http://192.168.1.228:92002、指定存储类型STORAGE_TYPE: elasticsearch3、配置kafka地址KAFKA_BOOTSTRAP_SERVERS: 192.168.
2021-06-08 14:58:06 742
原创 zipkin架构介绍
zipkin架构介绍Zipkin简介Zipkin是 Twitter 的一个开源项目,基于 Google Dapper实现。可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的API接口之外,它也提供了方便的 UI 组件帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。上图展示了Zipkin的基础
2021-06-08 14:44:50 843
原创 优雅关闭consul
优雅关闭consulconsul关闭原理分析consul agent 在正常关闭的时候会向集群发送 leave 信令,宣告自己离开集群,那么什么才叫正常关闭呢?首先 agent 监听了三个系统信令,os.Interrupt, syscall.SIGTERM, syscall.SIGHUPos.Interrupt, syscall.SIGTERM两个信令分开处理,os.Interrupt这个信令对应的其实就是 ctrl+c, 这一般是我们在开发时才会用到,那么和这个信令配合的配置是*config
2021-05-13 13:01:08 2510
原创 docker容器优雅停机
docker容器优雅停机我们部署在docker中的springboot程序在docker停止的时候并没有执行shutdownHook的操作,正常在本地idea停止springboot服务会看到一系列的shutdownHook操作日志日志如下:2021-05-13 11:12:29.253 INFO 218 [,] [SpringContextShutdownHook] o.s.s.c.ThreadPoolTaskScheduler Shutting down ExecutorService 'cat
2021-05-13 12:54:16 2211 1
原创 Rancher下部署Consul集群
Rancher下部署Consul集群配置服务名称,docker镜像,端口映射配置数据卷映射配置启动参数启动命令设置如下:agent -server -bootstrap-expect=3 -client=0.0.0.0 -datacenter=shenzhen-dev -ui可以看到node1节点已经正常运行,集群地址为10.42.0.89,记住这个IP,后面的 consul-server-2、consul-server-3节点和client节点都需要这个IP才能加入集群。同时我们看到
2021-04-28 10:45:10 1331
原创 elasticsearch深度分页问题
elasticsearch深度分页问题一、深度分页方式from + sizees 默认采用的分页方式是 from+ size 的形式,在深度分页的情况下,这种使用方式效率是非常低的,比如我们执行如下查询curl -XGET '127.0.0.1:9200/shop/shop/_search?pretty' -H 'Content-Type: application/json' -d'{ "query":{ "match_all": {} }, "from":5000, "si
2021-04-19 15:42:28 1005
原创 elasticsearch中文分词插件IK安装
elasticsearch中文分词插件IK安装elasticsearch几种常用分词器如下:分词器分词方式StandardAnalyzer单字分词CJKAnalyzer二分法IKAnalyzer词库分词其中常用的是IKAnalyzer,但IK是第三方插件,需要安装。安装分词器下载IK软件包下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.3.1在tags栏选
2020-11-22 10:55:12 1139 1
原创 Google 重叠实验框架:更多,更好,更快地实验(Google A/B实验论文)
Google 重叠实验框架:更多,更好,更快地实验IntroductionGoogle是一个数据驱动型公司,这意味着所有对用户的改动的发布,都要决策者以相应的经验数据作为依据。这些数据大部分是由在线流量上的实验产生的。在web的语境下,一个实验是由一股流量(比如,用户的请求)和在这股流量上进行的相对对比实验的修改组成的。修改包括用户可见的修改(比如,修改顶部广告的背景色),以及不可见的修改,比如测试一个新的广告点击率(CTR)预测算法,都可以通过实验的方式进行的。要支持数据驱动方法论的挑战在于要跟上创
2020-11-22 10:51:12 2700 1
原创 在MAC上使用Charles抓包HTTPS接口
在MAC上使用Charles抓包HTTPS接口安装证书点击 Help – SSL Proxying – Install Charles Root Certificate可以看到“此根证书不被信任”的提示,系统默认对Charles证书是不信任的双击Charles Proxy CA证书,选择始终信任,点关闭,弹出账户密码验证,填一下就改好了回到证书列表可以看到Charles证书已经受信任了配置抓取HTTPS端口Proxy -> SSL Proxying Settings安装SSL
2020-09-05 11:02:59 2432
原创 redis定时手动执行bgsave、备份rdb
redis定时手动执行bgsave、备份rdb 每小时备份rdbvim /opt/server/redis/redis_rdb_bak_hourly.sh#!/bin/sh history_hour=`date +%Y%m%d%H`rm -rf /data/redis-data-backup/$history_hourmkdir -p /data/redis-data-backup/$history_hourcp /opt/server/redis/data/dump-6380.r
2020-08-13 20:27:45 1930
原创 MySQL like查询后置%索引失效分析
MySQL like查询后置%索引失效分析表结构CREATE TABLE `t_food_shop` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `shop_name` varchar(50) NOT NULL DEFAULT '' COMMENT '店铺名称', `shop_img` varchar(250) NOT NULL DEFAULT '' COMMENT '店铺图片', `category_
2020-07-28 15:18:33 1703
原创 redis添加布隆过滤器插件
redis添加布隆过滤器插件概念布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。redis在4.0版本以后可通过插件的形式添加布隆过滤器 编译安装到redis安装目录创建module目录cd /opt/server/redismkdir module && cd mo
2020-07-06 20:11:41 2410 1
原创 通过gitlab Api自动下载gitLab上的所有项目
通过gitlab Api自动下载gitLab上的所有项目背景现在越来越多的公司采用gitlab来管理代码。但是公司越来越大,项目越来越多,一个个clone比较麻烦,于是写个java程序批量clone思路gitlab有提供api来获取git数据,利用这些信息clone项目参考文档:https://docs.gitlab.com/ee/api/projects.html#list-all-p...
2020-04-29 17:13:22 9632 1
原创 缓存穿透、缓存雪崩、缓存击穿场景模拟、解决方案
cache-best-practice 完整项目代码参考: cache-best-practice一、缓存穿透、缓存雪崩、缓存击穿场景模拟 1、缓存穿透缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常处于容错的考虑,如果从缓存层查询不到数据则不写入缓存层缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储层的意义缓存穿...
2020-04-16 10:31:42 2717 1
原创 接口幂等性校验
接口幂等性校验 一、概念幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和set...
2020-04-15 17:48:21 17843
原创 如何在github上创建一个项目
如何在github上创建一个项目 在repositories页面,点击new进入仓库创建页面,填写相关信息Repository name:仓库名Description:仓库描述类型:public 公共仓库 所有人都可访问 ,private 私人仓库,不是所有人都能访问是否初始化:如果选了是,则会自动初始化一个项目,里面有个readme.md文件,用于描述的描述说明。...
2020-04-14 14:52:59 7493
原创 缓存更新的策略
缓存更新的策略 1、先淘汰缓存,再更新数据库 public void updateData1(DataObject dataObject) { //第一步,淘汰缓存 deleteFromCache(dataObject.getId()); //第二步,操作数据库 updateFromDB(dataObject);...
2020-04-12 10:01:59 2138
原创 通过联合索引优化MYSQL慢查询
通过联合索引优化MYSQL慢查询一、慢SQL分析慢SQL如下SELECT SUM(t.amount) as amount FROM (SELECT game_id,room_id,is_robot,amount,record_time FROM t_statements_logs WHERE game_id = 30 AND is_robot = 0 ORDER BY record_time...
2020-04-09 14:49:24 1796
原创 Redis中删除过期Key的三种策略
Redis中删除过期Key的三种策略Redis对于过期键有三种清除策略:被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key当前已用内存超过maxmemory限定时,触发主动清理策略被动删除只有key被操作时(如GET),REDIS才会被动检查该key...
2020-04-03 15:42:40 1940
原创 Redisson分布式锁的源码分析
Redisson分布式锁的源码分析Redisson 分布式锁实现思路锁标识:Hash 数据结构,key 为锁的名字,filed 当前竞争锁成功线程的唯一标识,value 重入次数队列:所有竞争锁失败的线程,会订阅当前锁的解锁事件,利用 Semaphore 实现线程的挂起和唤醒源码分析基于redisson3.11.5版本加锁流程图解锁核心源码:tryLockInnerAsync ...
2020-04-02 14:41:45 1645
原创 SpringBoot项目配置JSON日志格式输出
SpringBoot项目配置JSON日志格式输出采用logstash-logback-encoder来实现JSON日志输出引入依赖implementation 'net.logstash.logback:logstash-logback-encoder:5.0'compileOnly 'org.projectlombok:lombok'compile group: 'org.codeha...
2020-04-02 10:17:16 4300
原创 redis事务是否支持原子性
redis事务是否支持原子性ACID 中关于原子性的定义:原子性:一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。redis事务测试127.0.0.1:6379> multiOK127.0....
2020-04-01 10:22:43 3020
原创 Redis实现分布式锁进化
Redis实现分布式锁进化1、SetNXtryLock(){ SETNX $key $value}release(){ DELETE $key}如果业务执行因为某些原因意外退出了,导致创建了锁但是没有删除锁,那么这个锁将一直存在2、SetNX + SetExtryLock(){ SETNX $key $value EXPIRE $key Seconds}rele...
2020-03-31 17:26:16 1535
原创 redisson分布式锁并发测试
redisson分布式锁并发测试模拟秒杀抢购场景,100库存,用jmeter并发测试,起300个线程并发请求2次,总计600个请求数,最后查看库存是否为负数,证明分布式锁是否锁住了库存。注意:分布式锁并不是实现秒杀最佳方式,本文只是侧重说明分布式锁一、编写相关代码1、添加依赖项dependencies { compile 'org.springframework.boot:spr...
2020-03-30 17:57:25 2728 2
原创 使用bind转发consul DNS服务
使用bind转发consul DNS服务1、安装bindyum install bind bind-utils -y2、配置name服务做解析vim /etc/named.confoptions { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; direc...
2020-03-27 11:33:40 1828
原创 consul DNS+ dnsmasq实现域名解析配置
consul DNS+ dnsmasq实现域名解析配置dnsmasq简介Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以用于为局域网电脑分配内网ip地址和提供路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适...
2020-03-27 10:58:35 3816
原创 consul各端口作用分析
consul各端口作用分析consul服务端启动时会监听5个端口,如下图:这5个端口的作用:8300:集群内数据的读写和复制8301:单个数据中心gossip协议通讯8302:跨数据中心gossip协议通讯8500:提供获取服务列表、注册服务、注销服务等HTTP接口;提供UI服务8600:采用DNS协议提供服务发现功能...
2020-03-26 16:13:00 9000
原创 SpringBoot中自定义consul的instance-id
SpringBoot中自定义consul的instance-idapplication.ymlspring: cloud: consul: discovery: instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}...
2020-03-26 16:09:52 1993
原创 consul通过DNS协议查找服务
consul通过DNS协议查找服务1、centos默认没有dig命令,dig命令属于bind-utils工具包,安装这个包之后就可以使用dig命令了。yum -y install bind-utils2、使用DNS API来获取A记录ip地址对于DNS API,服务的DNS名称是 NAME.service.consul 。默认所有的DNS名称都是在 consul 名称空间下,当然这个是可...
2020-03-26 11:15:05 2968
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人