Netty 自动重连

自动重连

用 Netty 写 Client 和 Server 的时候必须要去处理自动重连。

Server 端启动时的错误,要去不断重试。

Client 端不仅要处理启动时的错误,还要处理中途断开连接。

“秒杀”问题的数据库和SQL设计

问题的来源

上篇文章介绍了 ETL 场景下的高性能高一致性解决方案,这次的问题也是一个常见的问题。

最近发现很多人被类似秒杀这样的设计困扰,其实这类问题可以很方便地解决,先来说说这类问题的关键点是什么:

  1. 一定要高性能,不然还能叫秒杀吗?
  2. 要高一致性,库存只有100个,不能卖出去101个吧?但是库存10000实际只卖了9999是否允许呢?
  3. 既然这里说了是秒杀,那往往还会针对每个用户有购买数量的限制。

总结一下,还是那几个词:高性能高一致性!

下文的所有解决方案是在 Mysql InnoDB 下做的。因为用到了很多数据库特性。其他的数据库或其他的数据库引擎会有不同的表现,请注意。

高性能、高一致性的数据同步方案

问题的来源

先描述一下问题:

两个系统的数据需要做数据同步,可以是数据库到数据库,也可以是数据库到内存。要求高性能(速度快),高一致性(数据不能错)。

2014年总结

一年一篇

又到了一年一篇时间了,今年真的有很多话想要说,也经历了很多很多很多,这些事是我在2013年完全想不到的。

但是没想到,我还是做了!

Netty 长连接服务

推送服务

还记得一年半前,做的一个项目需要用到 Android 推送服务。和 iOS 不同,Android 生态中没有统一的推送服务。Google 虽然有 Google Cloud Messaging ,但是连国外都没统一,更别说国内了,直接被墙。

所以之前在 Android 上做推送大部分只能靠轮询。而我们之前在技术调研的时候,搜到了 jPush 的博客,上面介绍了一些他们的技术特点,他们主要做的其实就是移动网络下的长连接服务。单机 50W-100W 的连接的确是吓我一跳!后来我们也采用了他们的免费方案,因为是一个受众面很小的产品,所以他们的免费版够我们用了。一年多下来,运作稳定,非常不错!

时隔两年,换了部门后,竟然接到了一项任务,优化公司自己的长连接服务端。

责任链模式

Chain of Responsibility

在 面向对象程式设计里, 责任链模式是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。

传送门:责任链模式

Java 中见到最多的对责任链模式的应用就是在Servlets Filters中了:

public class LogFilter implements Filter  {
   @Override
   public void  init(FilterConfig config) 
                         throws ServletException{ }

   @Override                      
   public void  doFilter(ServletRequest request, 
                 ServletResponse response,
                 FilterChain chain) 
                 throws java.io.IOException, ServletException {

      // do something
      
      chain.doFilter(request,response);
   }
}

利用 WeakReference 关闭守护线程

不要让 this 在构造期间逸出

《Java 并发编程实战》中有这么一段:

不要让this在构造期间逸出。

原因很简单,因为如果在构造期间创建了一个新线程并把this传递给新线程,this还没有准备完毕,新线程如果提前使用调用一些数据的话可能会有未知的错误。具体的错误和JVM的实现有关,可能大部分情况下没问题,但是一旦有了问题,你恐怕找都找不到。

参考:

小米手环评测

坑爹的咕咚手环

自从买了咕咚手环后一直对其他手环念念不忘…

因为咕咚的太难用了!罪证如下:

  • 待机时间只有4天
  • 固件从来不更新
  • 软件基本没更新过
  • 只支持iOS,Android手机明明也有蓝也4.0,可以连接但是同步失败
  • 材质感不好,略丑,搭扣很容易松
  • 不防水,不能带着洗澡

可惜别的手环太贵,直到小米手环到了…

Mac OS 中使用QQ域名邮箱

Google 被墙之后

Google 被彻底墙掉之后,最不方便的就是手机端的邮件、联系人和日历的同步了。

电脑上可以翻墙,手机上没买 VPN,也不想手机一直开着 VPN 啊…

寻思了一番后,发现国内目前做得比较好的也就只有QQ邮箱了,对应的功能全部有。

WordPress 迁移 Github Page + Jekyll

关于这次迁移

为什么迁移

博客写了5年,最烦的就是维护 WordPress 了。WordPress 的写作体验实在是太糟糕了,而且后台非常卡!

近几年 git 兴起,也衍生出了 Markdown 这样最适合程序员的写作方式。另外自己在一年内从 Windows 脑残粉变成了 *nux 脑残粉,更喜欢在 Bash 下干各种事情了。

所以趁阿里云过期之际,顺便把迁移这事做了。

恩,Github Page 是免费的!每个月立省 70!

为什么不迁移

Github Page + Jekyll 的方案很早就有了,我为什么到现在才迁移呢?

其实之前也考虑过,但是主要是遇到了如下难题:

  • 之前的文章是以 html 的形式存在数据库的,怎么做迁移?
  • 分类和标签怎么迁移?
  • 之前的静态资源怎么办?
  • 博客的 URL 会变吗?
  • 评论怎么办!

只是很久之前遇到的问题,今天回头看看发现,各个难点都有了很好的解决方案了。

所以这里给大家介绍一下~