Arganzheng's Blog

stay hungry, stay foolish

MIME和编码学习笔记

Base64 所谓Base64,就是说从ASCII码中选出64个字符—-大写字母A-Z、小写字母a-z、数字0-9、符号”+”、”/”(再加上作为填充字符的”=”,实际上是65个字符),作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。 具体来说,转换方式可以分为四步: 将每3个字节作为一组,一共是24个二进制位: 3x8=24 将这24个二进制位分为4组,每...

分布式文件系统选型和预研

背景 候选DFS MooseFS FastDFS TFS Hi all, 背景 我们目前有接近3.5kw的文件数,总体容量是800GB的样子,平均文件大小是二三十KB的样子。主要是图片、HTML文件等小文件。走CDN之后,QPS大概是二三十的样子。目前我们的静态资源是部署在BPC的私有云平台NFS上。该平台主要是支持大文件,对单机文件数量有比较大的限制(单机100w...

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...