- 博客(61)
- 收藏
- 关注
原创 mysql MGR 高可用方案搭建过程记录
一、节点Mysql 5.7 环境搭建#/home/admin/Downloadssudo tar zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz -C /usr/local/# 创建软连接cd /usr/localsudo ln -s mysql-5.7.24-linux-glibc2.12-x86_64 mysql# 修改目录权限groupadd mysqluseradd -r -g mysql mysqlcd /usr/local/
2021-09-28 09:03:43
284
原创 关于mysql 的支持的XA 协议
XA 协议是基于2PC 的,因此在事务commit 之前,会多出一步prepare 步骤。大概步骤如下(参考:https://dev.mysql.com/doc/refman/8.0/en/xa-statements.html):1、开始XA 事务2、执行sql 语句3、prepare 阶段4、commit 阶段(or 回滚阶段)注意,执行sql 语句是在 prepare 之前,因此执行 prepare 和commit 响应会很快。...
2021-09-14 16:49:03
415
原创 记一次线上SQL 优化
#### 自定义函数```CREATEOR REPLACE FUNCTION getLongByIp (ip VARCHAR) RETURNS BIGINT AS $BODY$DECLARE res BIGINT ; len INT ; arr BIGINT [];BEGIN res = 0 ; arr = regexp_split_to_array(ip, '\.') ; len = array_length(arr, 1) ;IF len != 4 THEN RETURN...
2021-07-08 14:34:17
216
原创 seata(分布式事务框架)在实际项目中的初体验
概述项目框架:Spring Framwork(4.3.10.RELEASE) + Dubbo(2.5.6)+ Mybatis Plus(2.3.3)数据库:Postgresql涉及的项目模块分为:api-server(对外提供接口)base(存放通用类和配置文件)content-server(主要的业务模块,游戏、加速相关业务逻辑)log-server(日志分析)模拟业务场景:用户使用加速器加速,加速服务器(VPN服务器)上报用户加速请求,并且上报自身的一些状态信息(单纯为了验证 Seata
2021-05-25 15:48:18
571
1
原创 简单记录一下filebeat 后台运行的方法
遇到的问题:适用filebeat tar.gz 压缩包的方式安装的方式,在ssh 窗口执行 ./filebeat & 时,如果会话窗口关闭,则会停止 filebeat 进程。解决方式:方式1:适用rpm 安装方式2:将filebeat 启动脚本设置为系统服务...
2021-05-08 20:03:13
2358
原创 按某个字段分组然后从每组取出某个字段最大的一条纪录
SELECT * FROM ( SELECT *, ROW_NUMBER () OVER ( PARTITION BY package_name ORDER BY version_co...
2021-04-25 11:30:35
384
原创 从头开始写一个简单RPC——第2天
gitee地址项目基于guide-rpc-framwork 拆解,完整框架请参考guide-rpc-framwork 。上篇地址:day1本篇主要内容:使用zk 替代本地文件作为注册中心实现简单负载均衡使用zk 替代本地文件作为注册中心在之前的版本中,我们抽象出了一个注册中心的接口,并且提供一个本地文件注册中心的实现,这次,我们使用zk 作为注册中心,实现服务的注册与发现,并且监听服务实例状态的变化。这里我们使用apache curator 作为zk 客户端,依赖如下:<cura
2021-04-07 14:58:58
176
原创 实际项目中使用Redis布隆过滤器(bloom filter)
项目中使用redis实现布隆过滤器的几种方式:先占个位,假期结束回来详细说明。第一种:redis 安装bloom 过滤器模块,redisTemplate 执行lua 脚本第二种:redis 安装bloom 过滤器模块,由于redisTemplate 不支持bloom 过滤器模块的命令,可以修改redisTemplate 框架的Protocol 源码,添加所支持的命令类型第三种:使用redisson API 原生支持bloom 过滤器...
2021-04-02 17:54:48
4829
原创 从头开始写一个简单RPC——第1天
gitee地址项目基于guide-rpc-framwork 拆解,完整框架请参考guide-rpc-framwork 。上篇地址:day0本篇主要内容:解决Channel 复用问题使用kryo 序列化替代JDK 自身的序列化优化远程服务实现方法先简单介绍下最开始这个RPC的使用方式:服务端发布服务:public class HelloServerTest { public static void main(String[] args) throws Exception {
2021-03-31 10:58:00
135
原创 mybatis 源码导读
1、mybatis 跟spring 整合的入口在哪?查看类:org.mybatis.spring.mapper.MapperScannerConfigurer2、mybatis 使用接口Mapper,如何将Mapper 实例化成spring bean?查看 MapperFactoryBean -> MapperProxyFactory -> MapperProxy3、Mapper 接口默认的select、insert 方法实现是在哪?查看 MapperProxy.invoke()
2021-03-30 18:15:30
121
原创 从头开始写一个简单RPC——第0天
gitee地址项目基于guide-rpc-framwork 拆解,完整框架请参考guide-rpc-framwork 。先简单介绍下最开始这个RPC的使用方式:服务端发布服务:public static void main(String[] args) throws Exception { // 提供一个名字叫做 hello 的远程服务,服务实例是 HelloService ServiceProvider.publishService("hello", new HelloServi
2021-03-06 12:14:48
187
原创 redis aof重写改进方案随想
在现有的AOF 重写方式中,如果子进程在进行重写,父进程需要将新的写命令写入aof 缓冲区和 aof 重写缓冲区,比正常接受客户端请求时多了aof 重写缓冲区的操作。个人觉得可行的优化点:子进程在进行重写时,父进程可以将新的写命令 append 到一个临时文件,比如叫aof.tmp,当子进程重写完毕时,发送信号通知父进程,父进程直接将aof.tmp 的内容append 到新的aof 文件到末尾,然后替换原来的aof 文件, 删除aof.tmp。如果期间断电之类的,服务器重启的时候可以检查是否有a
2021-02-05 21:51:38
155
原创 redis 设计与实现 中疑惑记录
1、关于是否执行bgsave时负载因子不同没执行**bgsave** 或 **bgrewriteaof** 时,负载因子 = 1;执行**bgsave** 或 **bgrewriteaof** 时,负载因子 = 5;因为当执行执行**bgsave** 或 **bgrewriteaof** 时,redis 会fok 出一个子进程,如果这时候进行resize 操作,由于 fork 使用COW(写时复制),会导致父进程产生大量写内存操作,复制大量的数据,造成内存资源浪费2、渐进式rehash 的过程
2021-01-24 12:52:06
88
1
原创 dubbo + spring 服务端部分服务事务不起作用的原因
先抛出问题的原因:服务端的Service 出现了spring 的循环依赖。最近接手了一个项目,项目架构使用dubbo + spring frame 分模块进行开发。假设有dubbo 消费端 A,服务端 B、C (B 和 C 在同一个项目),在开发过程中发现A 消费B 提供的服务,spring 事务不起作用。伪代码如下:@Controllerclass A { @Reference private B b; public void a() {
2020-09-09 23:02:15
1649
5
原创 NIO 零拷贝的示意图
第一部分是阻塞IO,没有零拷贝,需要在用户空间和内核空间多次切换,并且在用户空间和内核空间缓冲区多次拷贝第二部分是NIO,减少用户空间和内核空间的切换,并且不需要用户空间和内核空间缓冲区的拷贝第三部分是最理想的,内核空间的缓冲区不需要拷贝到socket 的缓冲区...
2020-06-04 10:52:00
211
原创 注解配置方式的Spring 是如何解析@Configuration、@Bean以及@Component?
AbstractApplicationContext 中的refresh()方法中,调用invokeBeanFactoryPostProcessors(beanFactory),会回调实现了BeanFactoryPostProcessor 的类中的postProcessBeanFactory(beanFactory) 方法,其中有一个实现类:ConfigurationClassPostProcessor 称作配置类后置处理器,该后置处理器会检查容器中目前存在的BeanDefination 是否有@Conf.
2020-05-30 11:03:19
258
原创 spring security oauth2.0 学习随笔
Spring Security1、核心是FilterChainProxy,里面维护了SecurityFilterChain 列表,public class FilterChainProxy extends GenericFilterBean {……….private List<SecurityFilterChain> filterChains;……….}每个SecurityFilterChain 维护了Filter 列表,和一个请求路径的匹配器,public
2020-05-25 10:45:18
205
原创 CMS 垃圾收集器 的一些疑问
1、整个major GC 过程中GC Roots 有哪些?常见的GC Roots + 整个年轻代2、并发标记阶段,用户线程与GC 线程并发,CMS如何保证存活对象的正确性?三色标记算法,增量更新,写屏障3、并发GC 过程出现老年代引用新生代的对象,怎么处理?card table,dirty cardvoid post_write_barrier(oop* field, oop val) { jbyte* card_ptr = card_for(field); *ca
2020-05-21 16:18:35
154
原创 线程上下文加载器Context ClassLoader的作用
先以一段mysql 数据库连接的代码作为引子public class MysqlDriverTest { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); DriverManager.getConnectio...
2020-03-27 16:00:08
585
原创 ReentrantLock源码解读(一)
我们先跟踪非公平锁加锁和释放锁的大概流程,有一个基本的印象。public class LockTest { private Lock lock = new ReentrantLock(); public void lockTest() { lock.lock(); try { System.out.println("lo...
2020-03-24 17:24:51
212
原创 简单聊一聊UseCompressedOops UseCompressedClassPointers这两个JVM参数
UseCompressedOops:普通对象指针压缩,oops:ordinary object pointerUseCompressedClassPointers:类指针压缩这两者有什么作用呢?拿新建一个对象来说:Object o = new Object()如果不开启普通对象指针压缩,-UseCompressedOops,会在内存中消耗24个字节,o 指针占8个字节,Obj...
2020-03-17 11:23:03
11230
11
原创 垃圾回收可达性分析算法多线程存在的问题
在极客时间 《深入拆解Java虚拟机》这门课的第11讲中,有一下一段话:=======================比如说,在多线程环境下,其他线程可能会更新已经访问过的对象中的引用,从而造成误报(将引用设置为 null)或者漏报(将引用设置为未被访问过的对象)。误报并没有什么伤害,Java 虚拟机至多损失了部分垃圾回收的机会。漏报则比较麻烦,因为垃圾回收器可能回收事实上仍被引用的对象...
2020-03-16 18:24:18
333
原创 tomcat 加载 spring 容器的过程
我们都知道,Spring容器可以在tomcat容器中运行,那么这个流程或者说原理是怎样的呢?简要过程:tomcat调用自身的main方法,main方法里面调用了spring实现ServletContextListener接口的监听器,默认是ContextLoaderListener,ContextLoaderListener.contextInitialized(),contextI...
2020-01-24 17:12:10
516
原创 @Transactional 注解失效实验
这里主要实验同一个Service 中调用不同的方法出现的失效,比如 Service 中 A() 方法中调用 B() 。实验如下:场景1:@Servicepublic class TestTransactionService { @Autowired private SignTaskRepository signTaskRepository; @Tran...
2019-11-22 15:44:19
147
原创 oauth2 提供的接口/oauth/token,第一个参数是接口Principal,参数的实际类型是UsernamePasswordAuthenticationToken
最近在看oauth的源码 ,发现TokenEndpoint 这个类里面,/oauth/token 这个接口的第一个请求参数是接口Principal类型,实际上传过来的是UsernamePasswordAuthenticationToken类型,UsernamePasswordAuthenticationToken实现了Principal接口。那么框架是在哪将请求参数封装成UsernamePa...
2019-10-31 15:52:19
19740
5
原创 centos6 快速安装mysql
参考:https://blog.csdn.net/xxd851116/article/details/22947891注意:中文乱码问题,需要去/etc/my.cnf添加配置,如下[client]default-character-set=utf8[mysqld]character_set_server=utf8[mysql]default-character-set=...
2019-09-09 15:10:33
144
原创 nginx 正向代理转发http跟https,使用lua脚本转发非80,443端口
在上一篇:nginx 正向代理转发http跟https中,我们的nginx还不能转发非80和443端口的url地址,虽说目前http的域名跟https的域名默认端口是80跟443,但总有一些特例嘛。这就需要nginx安装支持lua脚本的模块,方法自行google,不多累述。下面直接上nginx的配置文件。#user nobody;worker_processes 1;#error...
2019-09-06 17:02:35
2018
原创 nginx 正向代理转发http跟https
对于nginx,可能大家用的最多的是反向代理,正向代理用的不多。又或者 ,使用正向代理,可能会选择squid作为方案。但是,我这次就用nginx作为正向代理,为啥,因为squid我找不到资料可以获取post请求的参数,又或者说获取不到requestBody的数据,不然何苦来哉折腾nginx的正向代理。。。。。。。如果有大佬知道,squid的access.log日志如何能记录post的请求参数,一定...
2019-09-06 16:52:49
4174
2
原创 先抛出疑问,待后续研究:华为service mesher如何改造旧有的使用RPC框架提供服务的项目,比如dubbo,或者公司自研的RPC框架
我们知道,旧有的项目想要接入华为CSE,使用微服务的功能,比如,服务注册发现,负载均衡,熔断,限流等,可以使用service mesh的理念,通过类似网络代理,将旧有项目接入CSE,与网络代理组合,形成逻辑上的微服务。如果旧项目作为服务的提供方,使用REST方式提供服务,那我们很容易通过编写OPENAPI契约,植入mesher,消费方请求服务,通过mesher转发,根据契约请求服务提供方。...
2019-08-21 15:37:58
372
原创 谈谈自己关于CAP理论的理解
我这次理解的CAP,都是基于数据的基础上,如有错误,请大家指出。C:一致性,分布式系统中,对一个节点的数据写入,在其他节点上读取到的必须是最新的。A:可用性,某些节点出现故障或者性能不佳导致请求失效,其他节点依旧可以提供服务。P:分区容忍性,简单的说,就是分布式系统中,节点间的通讯必然会出现通讯失败的情况,我们得允许,也不得不允许这个情况的出现,就是说我们得容忍节点间的通讯失败的情况。...
2019-08-09 10:50:07
559
原创 ES mapping 设置中,_analyzer属性的意思
{ "mappings" : { "post" : { "_analyzer" : { "path" : "language" }, "properties" : { "id": { "type" : "long", "store" : "yes", "precision_step" :...
2019-07-16 09:34:43
1646
原创 spring security oauth2 中两个endpoint的注入来源
公司项目使用xml配置的方式整合oauth2,在阅读源码,跟踪整个授权跟获取令牌的过程中,对比xml的配置文件,并没有找到有配置配了两个endpoint的注入:TokenEndpoint 和AuthorizationEndpoint。这两个类分别对应我们oauth2中两个重要的请求:/oauth/token 和/oauth/authorize。我们oauth的功能都围绕着这个给url展开,这里...
2019-07-06 17:18:33
4668
原创 非对称加密的加密解密与签名验签
写在前面,在网络传输中,我们的各种请求和相应,无法避免被人拦截,这就可能导致消息的泄露,为了解决这个问题,发送方可以对报文(数据)进行加密跟签名,接收方进行解密跟验签。加密解密:公钥加密,私钥解密,保证信息的保密性,只有拥有密钥的双方才能获知。签名验签:私钥签名,公钥验签,保证信息的来源,防止信息被篡改。说一个场景,A 公司和 B 公司之间的接口对接,采用非对称加密技术,对数据加密。...
2019-06-17 10:17:07
3391
原创 条件概率、全概率公式、贝叶斯公式
先说理解,如有错误,请在评论处指正,谢谢!!!!:一、条件概率: 有两个事件A和B,发生有先后顺序,假设B先发生,A后发生,那么条件概率求的就是在B发生的之后,求A发生的概率。可能有人会有疑惑,B都发生了,那么A发生跟B有个毛线关系,P(A | B)不就是等于P(A)吗?这样想其实前提是建立在事件A跟事件B是相互独立的,比如掷两次筛子,第二次得到的点数6基于 第一次得到的...
2019-04-22 21:34:41
4974
原创 spring boot resttemplate使用fastjson 转换器
RestTemplate 默认使用的是jackson 转换器,想要使用alibaba 的fastjson 转换器的话,可以移除原来的转换器,替换成fastjson。注意,如果messageConverters.add(0,fastJsonHttpMessageConverter);我这边执行的时候会报错,目前还没找到原因。@Bean public RestTemplate restTe...
2019-03-01 11:06:43
4506
原创 resttemplate 返回中文乱码解决
@Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) { RestTemplate restTemplate = new RestTemplate(factory); List<HttpMessageConverter<?>>messageConverters...
2019-02-28 14:29:06
5173
4
原创 异步客户端和同步客户端
先写下我的理解,方便后边阅读资料校验。一、同步客户端比如一个连接有两个请求,请求1 和 请求2,请求1 先发起请求,请求2后发起请求,则请求2 要等待请求1 响应完成才能接收到响应。举个枣子,httpclient 发送get请求,线程会一致阻塞,直到有响应结果。 二 、异步客户端比如一个连接有两个请求,请求1 和 请求2,请求1 先发起请求,请求2后发起请求,请求1 和 ...
2019-02-19 10:21:58
1848
原创 ES 中dsl结构化查询属性的一些体会
一、es的dsl结构化查询,可以分为query和filter,他们之间的区别是:query会计算分数值来查询,而filter不计算分数值。专业点的说法就是,query查询到的文档,会检查与查询条件的匹配度如何,filter查询到的文档,只是检查是否与查询匹配。正常情况下,filter的性能是强于query的。在es1.X的时候,query跟filter是分开的,即存在:query:{} ...
2019-01-16 11:24:58
588
原创 数据库的连接池的数量大于活跃中的线程数,即 size > busy, Unable to fetch a connection in 10 seconds
当数据库连接池被打满的时候,经常可以看到这样的报错:Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:100; busy:15; idle:0; lastwait:10000].在这里,我们可能有个疑问,为什么size是100而busy是15,这不是说还有 100 - ...
2018-12-12 18:20:51
4434
原创 防止表单重复提交
分为前台处理跟后台处理:前台:当表当提交的时候,把提交按钮disable掉。 后台:利用redis的分布式锁,将表单中可以作为唯一标志的字段,比如身份证号,作为锁(ps:如果找不到唯一标志的字段,可以对表单的所有字段做一个mad加密,作为锁)。伪代码 :boolean flag = RedisUtil.lock(唯一标志,2分钟);if(flag) { tr...
2018-12-07 09:23:49
129
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人