前端时间为了快速迭代一些工具类应用,选择嵌入式Jetty作为web容器,现将配置记录如下。

POM配置

添加Jetty和springMVC的依赖包

阅读全文 »

本文从快捷键、插件两个方面介绍在Mac下使用SublimeText3的一些经验。

快捷键

为方便表达,约定下面的标记。左边是缩写,右边是键盘上的按钮。

  • cmd = command ⌘
  • shift = shift ⇧
  • option = option(alt) ⌥
  • control = control ⌃
阅读全文 »

JSON3是时下流行的兼容了包括IE6、Opera7、Safari2和Netscape6等多个Javascript平台的JSON实现方案,目前的版本号是3.3.2。JSON是建立在松散的JavaScript语法集合之上、与编程语言无关的数据交换格式。该格式最初由Douglas Crockford提出,在第五版的 ECMAScript规范被标准化。2011年被批准的5.1版本修订了若干个关于日期序列化的语法。

JSON3暴露出两个功能:stringify()将JavaScript对象序列化成JSON,parse()从JSON字符串中转换成 JavaScript 对象。这是对 JSON2 的一个嵌入式替换。除了不符合下面提到的日期序列化,这两个函数完全遵照ECMAScript的规范。

阅读全文 »

两年前使用octopress开始写博客,中途由于繁忙和其他事由,中断了写作。工作四年后,越来越觉得该好好沉淀一下,把工作中遇到的问题和解决方案总结出来,所以又开始写博客了。由于从Windows系统换成了Mac OSX,加之当时搭建octopress遇到了种种问题,考虑放弃octopress,衡量再三,决定使用hexo继续写作之路。本文就将使用hexo搭建博客的整个过程记录之。

阅读全文 »

作为代码狗,每天要在命令行上浪费N多绳命。当你为Mac上难用的bash咬牙切齿的时候,殊不知OSX已自带了另一种好用得不得了的shell:zsh。但是由于配置过于复杂,如果想爽快地使用的话,有必要安装oh-my-shell,真的十分好用。本文就将介绍oh-my-zsh的安装使用以及一些技巧。

阅读全文 »

简介

BerkeleyDB(BDB)是一个高效的嵌入式数据库,C、C++、Java、Perl、Python等很多其他语言都有对应的API。Berkeley DB Java Edition (JE) 完全用JAVA写的,它适合于管理海量的,简单的数据。具有如下特点:

  • 能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。
  • 多线程支持,JE使用超时的方式来处理线程间的死琐问题。
  • Database都采用简单的key/value对应的形式。
  • 支持事务。
  • 允许创建二级库,可以方便的使用一级key、二级key来访问数据。
  • 支持RAM缓冲,减少频繁的IO操作。
  • 支持日志。
  • 数据备份和恢复。
  • 支持游标。
阅读全文 »

之前在TB,做一个实时监控引擎,使用了 Groovy 来实现动态规则加载。系统虽然在数据结构以及 JVM 层面进行了多次优化,性能也得到了显著提升。但是感觉机器的性能并未用到极致,还遇到过 PermGen 溢出的问题。隐约感觉是 Groovy 这个环节出了问题,但是苦于水平有限,对 Groovy 在实际运用中的认识不够深刻,迟迟未查到原因。后来,三哥根据毕玄大神的指点,优化了Grrovy 这一块,据说性能提升了三倍。好东西,当然要分享出来。以下是毕玄大神的原文,以飨众生。

Groovy 的动态性为一些 Java 的应用场景带来了便利(例如规则类的场景,因为规则可能会经常变化或不断的增加),因此有不少Java 应用会使用到 Groovy,但在使用 Groovy 时有几个点需要注意,否则很容易碰到一些异常问题,这些总结来源于实际排查的一些 Case。

阅读全文 »

趁着使用Storm的热情,将 Getting Started With Storm 翻译了一下。本人水平有限,如果对某些概念和原理理解错误,请批评指正,切勿打脸。现将译文汇总:

第一章 基础

第二章 入门实例

第三章 Topologies

第四章 Spouts

第五章 Bolts

第六章 真实示例

第七章 在 Storm 中使用非 JVM 语言

第八章 事务 Topologies

附录A 安装Storm客户端

附录B 安装Storm集群

附录C 安装真实示例

在翻译的过程中,参考了如下几个网站的资源,贴出来给大家:

徐明明的Storm博客

量子恒道官方博客的Storm入门教程

Storm GitHub Pages

Storm 客户端允许你使用指令来管理 topology 提交到集群中。遵循如下步骤来安装 Storm 客户端:

    1. Storm 站点下载最新稳定版 Storm;
    1. 一旦下载了,将其解压到/usr/local/bin/storm
    1. 接着,添加storm PATH,以便可以运行 storm 指令,无需输入全路径。如果你使用/usr/local/bin/storm目录,使用export PATH=$PATH:usr/local/bin/storm来设置;
阅读全文 »

特别注明:本文翻译自 Getting started with Storm 第八章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。

在Storm中,如本书前面提到的,你可以使用 ackfail策略来保证消息被处理。但是如果消息重放了呢?如何保证不被重复计数?

事务 Topology 是 Storm 0.7.0 里面的新特性,可以使用消息原语来保证消息以安全的方式重放,且仅被处理一次。没有事务性 topology 的支持,你无法以并发的、容错的方式百分百准确地进行统计。

阅读全文 »

特别注明:本文翻译自 Getting started with Storm 第七章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。

有时候你希望使用非JVM语言来实现一个 Storm工程,也许是你使用其他语言感觉更舒服,或者是你想使用其他语言的开发的库。

Storm 是用 Java 实现的,你之前所看到的本书那些示例 spout 和 bolt 也是用Java来编码的。所以能用能用 Python、Ruby 或者 JavaScript 来编写呢?答案是肯定的。通过使用多语言协议multilang protocol) 来实现这种可能。

阅读全文 »

特别注明:本文翻译自 Getting started with Storm 第六章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。

本章将演示一个典型的网页分析方案,通常使用 Hadoop 批量作业来解决的问题。不像 Hadoop 的实现方案,基于 Storm 的解决方案实时刷新并呈现结果。

示例有三个主要部分(如图6.1所示):

  • 一个 Node.js 的web应用,用来测试系统

  • 一个 Redis 服务器,用来持久化数据

  • 一个 Storm topology,用于实时分布式数据处理

阅读全文 »

特别注明:本文翻译自 Getting started with Storm 第五章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。

如你所见,bolt 是Storm集群的关键组件。本章,你将了解到一个 bolt 的生命周期、一些 bolt 设计策略以及几个演示如何实现它的例子。

5.1 Bolt 生命周期

Bolt 是一个将 tuple 作为输入、产出多个 tuple 作为输出的组件。实现一个 bolt,通常需要实现IRichBolt接口。Bolt 在客户端服务器中被创建,序列化到 topology 中,然后被提交到集群的管理节点上。集群加载工作者,将 bolt 反序列化、调用 bolt 的prepare方法,然后开始处理 tuple。

阅读全文 »

特别注明:本文翻译自 Getting started with Storm 第四章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。

本章,你将学习到最被经常用来设计 topology(spout)的策略以及 spout 是如何具有容错能力的。

4.1 可靠 vs. 不可靠消息

当设计 topology 时,消息的可靠性是浮现在脑海中最重要的一件事。如果一个消息不能被处理,你需要决定如何处理这条消息以及整个topology需要做什么。比如,当处理银行存款业务时,很重要的一点事不能丢失任何一条交易消息。但是如果你处理上百万条tweet信息时来寻找某些统计指标时,一条丢失的消息对指标的准确性没有影响。

阅读全文 »

特别注明:本文翻译自 Getting started with Storm 第三章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。

你将从本章学习到:如何在一个 Storm topology 的不同组件间传递 tuple,以及如何将 topology 部署到一个 Storm 集群。

3.1 流分组

当设计一个 topology 的时候,你需要做的最重要的一件事是定义如何在不同组件间交换数据,换言之就是 bolt 间如何消费数据流。流分组明确了哪些流被每个 bolt 消费以及被如何消费。

一个节点可以发射不止一个数据流。流分组允许我们选择接收哪个流。

阅读全文 »

特别注明:本文翻译自 Getting started with Storm 第二章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。

本章将演示创建一个 Storm 工程和第一个 topology。

下文是建立在你的机器上安装有 JRE 1.6 及以上的环境。建议使用Oralce JRE,可从 http://www.java.com/download 获得。

2.1 运行模式

在开始之前,理解 Storm 的运行模式很重要。Storm 有两种运行模式。

阅读全文 »