Linux TCP/IP 协议栈调优

最近忙于系统性能的DEBUG和调优。 有些性能瓶颈和Linux的TCP/IP的协议栈的设置有关,所以特别google了一下Linux TCP/IP的协议栈的参数意义和配置,记录一下。
如果想永久的保存参数的设置, 可以将参数加入到/etc/sysctl.conf中。如果想临时的更改参数的配置, 可以修改/proc/sys/net/ipv4/下的参数, 机器重启后更改失效。

阅读全文

ApacheBench 测试结果的解释

Apache Beach (ab)是Apache自带的一个性能测试工具,专门用来测试网站的性能, 不仅限于Apache web服务器。
它可以将每个测试数据写入的一个文件中。 格式如下:

1
2
3
4
5
6
7
8
9
starttime seconds ctime dtime ttime wait
Wed Sep 17 05:13:32 2014 1410945212 0 2 3 2
Wed Sep 17 05:13:32 2014 1410945212 0 3 3 2
Wed Sep 17 05:13:33 2014 1410945213 0 3 3 3
Wed Sep 17 05:13:32 2014 1410945212 0 3 3 3
Wed Sep 17 05:13:32 2014 1410945212 0 3 3 3
Wed Sep 17 05:13:32 2014 1410945212 0 3 3 3
Wed Sep 17 05:13:32 2014 1410945212 0 3 3 3
Wed Sep 17 05:13:33 2014 1410945213 1 2 3 2

可以使用其它作图工具如gnuplot生成图形。
但是首先,你需要了解每一列的数据代表的意思。

阅读全文

Building With Gulp

对网站资源进行优化,并使用不同浏览器测试并不是网站设计过程中最有意思的部分,但是这个过程中的很多重复的任务能够使用正确的工具自动完成,从而使效率大大提高,这是让很多开发者觉得有趣的地方。

Gulp是一个构建系统,它能通过自动执行常见任务,比如编译预处理CSS,压缩JavaScript和刷新浏览器,来改进网站开发的过程。通过本文,我们将知道如何使用Gulp来改变开发流程,从而使开发更加快速高效。

Grunt 一直是前端领域构建工具的王者,然而它也不是毫无缺陷的,近期风头正劲的 gulp.js 隐隐有取而代之的态势。那么,究竟是什么使得 gulp.js 备受关注呢? gulp.js 的作者 Eric Schoffstall 在他介绍 gulp.js 的 presentation 中总结了 Grunt 的几点不足之处,请看nightire的翻译和总结
阮一峰在他的JavaScript 标准参考教程也有专门一节介绍: Gulp:任务自动管理工具
还有chenllos的gulp构建进阶供参考。

阅读全文

java 和netty epoll实现

Java NIO根据操作系统不同, 针对nio中的Selector有不同的实现:

所以毋须特别指定, Oracle jdk会自动选择合适的Selector。 如果想设置特定的Selector,可以属性:

1
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider

阅读全文

Apache Curator Framework

Curator framework提供了高级API, 极大的简化了ZooKeeper的使用。 它在ZooKeeper基础上增加了很多特性,可以管理与ZOoKeeper的连接和重试机制。这些特性包括:

  • 自动连接管理
    ** 有些潜在的错误情况需要让ZooKeeper client重建连接和重试。Curator可以自动地和透明地处理这些情况
  • Cleaner API
    简化原始的ZooKeeper方法,事件等 提供现代的流式接口
  • 技巧(Recipe)实现
    Leader选举 共享锁
    Path缓存和监控 分布式队列
    分布式优先级队列 ...

    阅读全文

Apache Curator Recipes

Curator实现了 ZooKeeper recipes文档中列出的所有技巧(除了两段提交two phase commit)。点击下面的技巧的名字可以查看详细信息。

Elections

  • Leader Latch - 在分布式计算中, leader选举是在几台节点中指派单一的进程作为任务组织者的过程。在任务开始前, 所有的网络节点都不知道哪一个节点会作为任务的leader或coordinator. 一旦leader选举算法被执行, 网络中的每个节点都将知道一个特别的唯一的节点作为任务leader.

  • Leader Election - 初始的leader选举实现.

阅读全文

Apache Curator 入门

学习ZooKeeper

Curator的用户应当了解ZooKeeper。 推荐一排年文章可以学习ZooKeeper: ZooKeeper入门

使用Curator

Curator的类库可以从Maven仓库中获取。上一篇文章已经介绍了它的相关组件。无论你使用Maven, Gradle还是 Ant都可以很容易的将curator包含到你的编译脚本中。

大部分用户都想使用curator预置的技巧(解决方案),所以你需要加上curator-recipes依赖。如果你想包装ZOoKeeper增加连接管理重试机制等, 加上 curator-framework依赖。

阅读全文

Apache Curator 简介

Curator提供了一套Java类库, 可以更容易的使用ZooKeeper。 ZooKeeper本身提供了Java Client的访问类,但是API太底层,不宜使用, 容易出错。 Curator提供了三个组件。 Curator client用来替代ZOoKeeper提供的类, 它封装了底层的管理并提供了一些有用的工具。Curator framework提供了高级的API来简化ZooKeeper的使用。它增加了很多基于ZooKeeper的特性,帮助管理ZooKeeper的连接以及重试操作。Curator Recipes提供了使用ZooKeeper的一些通用的技巧(方法)。 除此之外, Curator Test提供了基于ZooKeeper的单元测试工具。
所谓技巧(Recipes),也可以称之为解决方案, 或者叫实现方案, 是指ZooKeeper的使用方法, 比如分布式的配置管理, Leader选举等。

Curator最初由Netflix的Jordan Zimmerman开发。20117月在github上基于Apache 2.0开源协议开源。 之后发布了多个版本,并被广泛的应用。

Curator作为Apache ZooKeeper天生配套的组件。ZooKeeper的Java开发者自然而然的会选择它在项目中使用。

阅读全文