前端时间为了快速迭代一些工具类应用,选择嵌入式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写的,它适合于管理海量的,简单的数据。具有如下特点:
之前在TB,做一个实时监控引擎,使用了 Groovy 来实现动态规则加载。系统虽然在数据结构以及 JVM 层面进行了多次优化,性能也得到了显著提升。但是感觉机器的性能并未用到极致,还遇到过 PermGen 溢出的问题。隐约感觉是 Groovy 这个环节出了问题,但是苦于水平有限,对 Groovy 在实际运用中的认识不够深刻,迟迟未查到原因。后来,三哥根据毕玄大神的指点,优化了Grrovy 这一块,据说性能提升了三倍。好东西,当然要分享出来。以下是毕玄大神的原文,以飨众生。
Groovy 的动态性为一些 Java 的应用场景带来了便利(例如规则类的场景,因为规则可能会经常变化或不断的增加),因此有不少Java 应用会使用到 Groovy,但在使用 Groovy 时有几个点需要注意,否则很容易碰到一些异常问题,这些总结来源于实际排查的一些 Case。
趁着使用Storm的热情,将 Getting Started With Storm 翻译了一下。本人水平有限,如果对某些概念和原理理解错误,请批评指正,切勿打脸。现将译文汇总:
在翻译的过程中,参考了如下几个网站的资源,贴出来给大家:
首先,从GitHub仓库克隆该示例:
1 | > git clone git://github.com/storm-book/examples-ch06-real-life-app.git |
src/main:包含Topology源代码
src/test:Topology的测试
webapps directory h:包含 Topology 相关的 Node.js WebApp
如果想创建一个 Storm 集群,有如下两种途径:
使用 storm-deploy在 Amazon EC2创建一个集群,如第六章所示
手动安装Storm(本节的内容)
手动安装Storm,需要安装如下软件:
特别注明:本文翻译自 Getting started with Storm 第八章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。
在Storm中,如本书前面提到的,你可以使用 ack
和 fail
策略来保证消息被处理。但是如果消息重放了呢?如何保证不被重复计数?
事务 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 设计策略以及几个演示如何实现它的例子。
Bolt 是一个将 tuple 作为输入、产出多个 tuple 作为输出的组件。实现一个 bolt,通常需要实现IRichBolt
接口。Bolt 在客户端服务器中被创建,序列化到 topology 中,然后被提交到集群的管理节点上。集群加载工作者,将 bolt 反序列化、调用 bolt 的prepare
方法,然后开始处理 tuple。
特别注明:本文翻译自 Getting started with Storm 第四章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。
本章,你将学习到最被经常用来设计 topology(spout)的策略以及 spout 是如何具有容错能力的。
当设计 topology 时,消息的可靠性是浮现在脑海中最重要的一件事。如果一个消息不能被处理,你需要决定如何处理这条消息以及整个topology需要做什么。比如,当处理银行存款业务时,很重要的一点事不能丢失任何一条交易消息。但是如果你处理上百万条tweet信息时来寻找某些统计指标时,一条丢失的消息对指标的准确性没有影响。
特别注明:本文翻译自 Getting started with Storm 第三章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。
你将从本章学习到:如何在一个 Storm topology 的不同组件间传递 tuple,以及如何将 topology 部署到一个 Storm 集群。
当设计一个 topology 的时候,你需要做的最重要的一件事是定义如何在不同组件间交换数据,换言之就是 bolt 间如何消费数据流。流分组明确了哪些流被每个 bolt 消费以及被如何消费。
一个节点可以发射不止一个数据流。流分组允许我们选择接收哪个流。
特别注明:本文翻译自 Getting started with Storm 第二章,以作学习交流之用,非盈利性质。如需转载,请以超链接形式标明文章原始出处和作者信息及版权声明。
本章将演示创建一个 Storm 工程和第一个 topology。
下文是建立在你的机器上安装有 JRE 1.6 及以上的环境。建议使用Oralce JRE,可从 http://www.java.com/download 获得。
在开始之前,理解 Storm 的运行模式很重要。Storm 有两种运行模式。