Arganzheng's Blog

stay hungry, stay foolish

MySQL主从同步学习

原理 如下图所示: Master将binlog推送给每个连接上来的slave Slave的IO线程将Master发送过来的binlog写入到本地的Relay log日志文件 Slave的SQL线程读取relay log日志,apply里面的变更 具体可以参见:How does MySQL Replication really work?,非常深入浅出的一篇文章。 ...

Quartz的misfire机制

Quartz在如下情况下可能没有办法按时执行job: 所有的worker线程都处于忙碌状态(可能在执行更高优先级的任务) Quartz scheduler挂掉了 这个任务的开始执行时间就是在过去(可能是创建时候配置错了) org.quartz.jobStore.misfireThreshold (in milliseconds), 默认是60000ms(也就是1min)....

如何让一个Quartz实例不执行任务

Quartz默认的集群方式每个节点(实例)都是对等,都可以创建任务,都会去抢任务。但是有时候我们希望能够有不对等的结构,比如运营后台提供友好的界面管理任务,然后有一些肉机,专门执行任务。这样的好处,任务不会影响到管理后台,管理后台的发布也不会中断执行中的任务。 谷歌和翻看官方文档都没有发现这个配置,只能查看源码了。最后发现有一个类看起来就是为这个实现的: package org.quar...

怎样获取form-data方式POST的数据

昨天君仔问我说遇到一个诡异的问题,他有一个controller方法,用x-www-form-urlencoded方式提交表单就可以正常绑定数据,但是用form-data方式提交就绑定不了: @Controller @RequestMapping("/tag") public class TagController { @Autowired private NanTianM...

高可用分布式缓存系统

需求 由于Redis的单线程模型,我们需要对Redis进行多实例部署,然后采用一致性哈希进行负载均衡。但是一致性哈希只是解决增加节点的影响范围,不能做到实时的主从自动切换。而我们知道Redis是支持主从同步,同时提供了sentinel支持主从自动切换的。能不能在一致性哈希的基础上对每个节点增加主从自动切换呢,并且这一切都对客户端透明呢? 设计 实现 Redis的Java客户端一般...

记一次Redis错误排查经历

日志集中式监控平台上线已经有一段时间,但是大部分情况下只是作为发布或者出问题时查看日志的便利工具使用。平时大家都不怎么主动上去看看。于是前几天把应用的错误日志也加上邮件、Hi和短信报警,马上就收到很多错误报警,引起了大家的重视。其中有一个Redis报错: Push notify error: => redis.clients.jedis.exceptions.JedisConnect...

Spring的Bean生命周期和扩展点

Bean扩展点 1、JSR-250注解(推荐方式) @PostConstruct @PreDestroy 2、实现Spring接口 InitializingBean: afterPropertiesSet() DisposableBean: destroy() 3、XML配置 init-method, default-init-method de...

Tomcat调优

Tomcat有线程池的概念,比如下面这个配置: <?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <!--APR library loader. Documentation at /docs/apr.html --> <Liste...

记一次MySQL主从同步错误处理

其实MySQL主从同步错误已经出现过好几次了,每次处理完都没有整理,今天恰好又出现了一次,花点时间记录一下,方便下次操作。 问题 今天早上收到报警短信,说印尼的一台机器home目录快爆满了,登上去看了一下,发现是一个应用的日志文件超级大,有好几百G。查看了一下日志内容,发现都是”Too many open file”错误。用ulimit -a查看,发现open files只有默认的655...

Metric监控系统

背景 对系统运行中的一些情况进行统一上报,监控,统计和展示。允许业务自定义监控项。有助于了解系统的运行情况,如性能,访问频率,Cache命中率等。 实现 具体参见笔者写的另一篇文章:java服务端监控平台设计 使用 首先需要配置pom.xml,引入monitor-client包: <dependency> <groupId>com.baidu.globa...