dennis_zane
- 浏览: 919365 次
- 性别:
- 来自: 杭州
社区版块
- ( 33)
- ( 1529)
- ( 28)
最新评论
-
hw7777777:
非常感谢作者提供这么好的工具,在使用的过程中遇到一些问题?1、 ...
基于java nio的memcached客户端——xmemcached -
since1978:
多久过去了时间能抹平一切
无路用的人 -
fangruanyjq:
[img][/img]引用
用osworkflow写一个请假例子(提供代码下载) -
thinkingmysky:
楼主,你确定,java memached client能处理并 ...
memcached java client性能测试的几点疑问和说明 -
hellostory:
aaa5131421 写道07年2月hibernate已经出来 ...
dozer与beanutils
文章列表
一、背景资料
memcached本身是集中式的缓存系统,要搞多节点分布,只能通过客户端实现。memcached的分布算法一般有两种选择:1、根
据hash(key)的结果,模连接数的余数决定存储到哪个节点,也就是hash(key)%
sessions.size(),这个算法简单快速,表现良好。然而这个算法有个缺点,就是在memcached节点增加或者删除的时候,原有的缓存数据
将大规模失效,命中率大受影响,如果节点数多,缓存数据多,重建缓存的代价太高,因此有了第二个算法。2、consistent hashing,一致性哈希算法,他的查找节点过程如下: 首先求出memcached服务 ...
xmemcached
发布1.0-beta
,从0.60直接到1.0-beta,主要改进如下:
1、支持更多协议,在已有协议支持的基础上添加了append、prepend、gets、批量gets、cas
协议的支持,具体请查看xmemcachedclient类的实例方法。重点是cas操作,下文将详细描述下。
2、memcached分布支持,支持连接多个memcached server,支持简单的余数分布和一致性哈希分布。
3、0.60版本以来的bug修复。
memcached 1.2.4之后开始支持cas协议,该协议存储数据同时发送一个版本号,只有当这个版本号与memcached ...
翠花,上图,首先是容器类和自定义对象的get、set在不同并发下的表现
很明显,在linux下,spymemcached读写复杂对象的效率远远超过在windows下的表现,xmemcached在两个平台之间表现平稳,在linux上get效率低于spymemcached,差距比较大,准备再优化下;set效率略高于spymemcached。
xmemcached 0.70将支持多服务器功能和简单的分布能力,基于hash key后模节点数的余数值做分布,这也是spymemcached默认的分布方式,一致性哈希暂不实现。下面是在linux下多节点情况下读写简单类型的效率 ...
- 2009-03-07 10:43
- 浏览 4704
- 评论(0)
充分利用jprofile等工具观察性能瓶颈,才能对症下药,盲目的优化只是在浪费时间,并且效果可能恰恰相反
1、
观察到countdownlatch.await占据最多cpu时间,一开始认为是由于jprofiler带来的影响,导致这个方法调用时间过长,从而 ...
- 2009-03-06 14:37
- 浏览 3352
- 评论(0)
1、xmemcached是什么?
xmemcached是基于java nio实现的memcached客户端api。
实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/
的基础上实现的(目前是基于yanf4j 0.52),核心代码不超过1000行,序列化机制直接挪用spymemcached的transcoder。
性能方面,在读写简单类型上比之spymemcached还是有差距,在读写比较大的对象(如集合)有效率优势。
当
前0.50-beta版本,仅支持单个memcached服务器,以后考虑扩展。目前已经支持get、set、add、r ...
yanf4j
发布一个0.50-beta2
版本,这个版本最重要的改进就是引入了客户端连接非阻塞ap
i,主要最近的工作要用到,所以添加了。两个核心类tcpconnectorcontroller
和udpconnectorcontroller
分别用于tcp和udp的客户端连接控制。例如,现在的udp echo client可以写成:
//
客户端echo handler
class
echoclienthandler
extends
handleradapter {
public
void
onreceive(session udpse ...
- 2009-02-19 00:15
- 浏览 2930
- 评论(0)
俺的山寨nio框架yanf4j发布0.50-alpha版本,下载地址在这里
,更新了wiki
。本测试版本主要修改如下:
1、controller接口引入了两个新方法
:
a)接受inetsocketaddress类型参数的系列open方法,用以在多宿主机上绑定到不同网络接口
public
void
open(inetsocketaddress inetsocketaddress,
boolean
reuseaddr,
handler handler, codecfactory codecfactory)
throws
ioexcep ...
- 2009-02-04 19:28
- 浏览 4092
- 评论(1)
过去推荐过两篇blog《java nio类库selector机制解析》(上
,下
),感叹java为了跨平台似乎“很傻很天真”。最近学习使用ace,才知道这个解决办法倒不是java开创的,ace也是这样搞的。java nio中selector的wakeup方法,类似于ace_select_reactor的notify机制,可以从非select调用的线程去唤醒阻塞在select调用上的select线程,当然ace_select_reactor的notify强大多了,可以实现event handler的无限扩容。ace_select_reactor的notify的实现是通过ace_pipe,在ace ...
- 2009-02-01 11:15
- 浏览 2979
- 分类:编程语言
项目名称:yanf4j (yet another nio framework for java)
项目网址:http://code.google.com/p/yanf4j/
下载网址:http://code.google.com/p/yanf4j/downloads/list
0.41 beta版
的主要修改:
1、引入流量控制,通过controller的setreceivepacketrate方法设置接收消息频率(单位 个/秒),当超过设定值时,yanf4j将放缓接收数据直到实时统计的接收频率降低。此功能默认未开启。
2、改善了数据统计,数据统计不再是从服务器启动时间点到当前的时间段内的平 ...
- 2009-01-20 14:01
- 浏览 1790
在cpp中为了可移植性,string的长度是string::size_type,突然就想知道java允许的最大字符串长度为多少。看string的源码:
public
final
class
string
110
implements
java.io.serializable, comparable
<
string
>
, charsequence
111
...
- 2009-01-15 01:37
- 浏览 7489
yanf4j
简介,请看这里
。
这里俺要介绍下用yanf4j写个最简单的聊天室,可以直接telnet上去聊天。请先下载common-logging
和yanf4j-0.40-stable-bin.tar.gz
。
聊天室嘛,肯定要维护一个聊天者聊表:
list
<
session
>
sessionlist
=
� ...
- 2008-11-26 11:36
- 浏览 5337
项目名称:yanf4j(yet another nio framework for java)
项目地址:http://code.google.com/p/yanf4j/
,当前版本0.30-beta1
协议:apache license, version 2.0
简单描述:
有这么多nio框架了,为什么要another?重复造轮子也罢,这框架脱胎于一个服务器项目的网络层代码,期间参考了cindy、grizzly等nio框架的实现,加上自己的一些心得体会实现的。特点是简单、小巧、超轻量级。项目没有多大野心,目标是高效、简单地实现非阻塞模式的server(tcp、udp)并且保证不错的性 ...
- 2008-10-11 14:25
- 浏览 1934
阻塞队列的性能对比
主要是比较offer跟poll两个方法的性能,开n个线程,每个线程往队列里写或者取500个整数。
线程数
20
50
100
200
500
1000
linkedblockingqueue
15,0
31,15
32,16
63,32
203,47
563,110
arrayblockingqueue
15,0
16,15
31,15
47,16
125,47
364,68
priorityblockingqueue
78,78
172,188
36 ...
- 2008-09-08 10:06
- 浏览 5664
典型的j2ee项目,package的设计有成熟的套路可循,如分为domain、dao、service、action等等,职责已经分解的比较单一和
清晰,循环依赖这样的情况出现并不多。而在一般的java项目,如服务器程序、客户端程序和通用性框架的开发中,包的设计并没有套路可循,毕竟由于应用和
业务种类的不同,想得出通用性的设计套路是不大可能的。这时候遵循一些原则比之生搬硬套更为重要。在《敏捷软件开发》一书中对包的设计有深入的讨论,虽然
针对的是发布的二进制包而言,但是对于java
package的设计同样有借鉴意义,如对包的内聚性、可重用性、稳定性的强调,对于依赖的探讨,这些都是比较笼统的 ...
- 2008-09-06 00:15
- 浏览 2057
- 分类:企业架构
- 博客分类:
- java
这个题目比较怪,听俺道来。俺一直在负责公司游戏服务器的开发和维护,日积月累下来终于将原本混乱的代码和结构重构的比较清晰了,在此过程中的体会就是,重构啊,不仅仅是技术活,更多是要克服不情愿的、得过且过的心理去做,去做了才发现麻烦并没有想象中的大。
改造过程中遇到这么个问题,我想将对某个创建的游戏的操作都固定在一个线程执行,与其他游戏可以并发地处理;或者说依据游戏id派发到某个固定的线程处
理,对此游戏的操作都是串行化。不是俺不想彻底并行化,但是要将现有的代码改造成适应并行化相当困难,俺尝试的结果是问题百出,因此就想了这么个折中策
略,不同游戏之间的操作可以并行,单个游戏内操作 ...
- 2008-09-01 19:39
- 浏览 1938
前两天在公司内网上搭了个2个节点hadoop集群,暂时没有多大实际意义,仅用作自己的测试。遇到的问题在阿里巴巴这位仁兄的《hadoop集群配置和使用技巧
》都有提到的。也遇到了reduce任务卡住的问题,只需要在每个节点的/etc/hosts将集群中的机器都配置上即可解决。
今天将一个日志统计任务用hadoop
mapreduce框架重新实现了一次,数据量并不大,每天分析一个2g多的日志文件罢了。先前是用ruby配合cat、grep命令搞定,运行一次在
50多秒左右,如果纯粹采用ruby的话cpu占用率非常高而且慢的无法忍受,利用io.popen调用linux的cat、grep ...
- 2008-08-23 11:10
- 浏览 2723
分布式文件系统的设计目标大概是这么几个:透明性、并发控制、可伸缩性、容错以及安全需求等。我想试试从这几个角度去观察hdfs的设计和实现,可以更清楚地看出hdfs的应用场景和设计理念。
首先是透明性,如果� ...
- 2008-08-15 22:39
- 浏览 8018
- 分类:企业架构
hdfs用户指南
原文地址:http://hadoop.apache.org/core/docs/current/hdfs_user_guide.html
译者:dennis zhuang(killme2008@gmail.com),有错误请指正,多谢。
目的
本文档可以作为使用hadoop分布式文件系统用户的起点,无论是将hdfs应用在一个hadoop集群中还是作为一个单独的分布式文件系统使用。hdfs被设计成可以马上在许多环境中工作起来,那么一些hdfs的运行知识肯定能大大地帮助你对一个集群做配置改进和诊断。
概览
hdfs是had ...
- 2008-08-14 20:27
- 浏览 2081
- 论坛回复 / (3 / 16573)
- 分类:企业架构
- 博客分类:
- java
ehcache的overflowtodisk属性用来配置当缓存存储的数据达到maxinmemory限制时是否overflow到磁盘上。如果这个属
性为true,那么要求缓存的数据必须是可序列化的,如果不是可序列化的,ehcache将在日志中打印这个错误(文档中仅指出了这点),并且调用
memorystoreevictionpolicy设置的策略(例如lru)移除内存中的一个缓存元素再放入新的element,同时触发
cacheeventlistener的notifyelementevicted方法。
- 2008-08-06 23:18
- 浏览 10739
1、如果用java6的scriptenginemanager来调用jruby,并且脚本使用到了ruby的标准库(比如我用到了yaml库),如果没有正确设置,是会找不到标准库的。通过打印$:变量可以看到文件的加载路径,比如在某台机器上的打印的结果:
puts $:
输出:
.
/root/.jruby/lib/ruby/site_ruby/1.8
/root/.jruby/lib/ruby/site_ruby
/root/.jruby/lib/ruby/1.8
/root/.jruby/lib/ruby/1.8/java
lib/ruby/1.8
......略
显然,默认会到 ...
- 2008-07-07 20:47
- 浏览 2806
- 分类:企业架构
socketchannel和serversocketchannel,两者的父类是selectablechannel,它在jdk中的文档有这么段话:
once registered with a selector, a channel remains
registered until it is deregistered.this involves deallocating whatever
resources were allocated to the channel by the selector.
a channel cannot be deregistered ...
- 2008-06-18 01:53
- 浏览 7082
javaone2008上有个session《upcoming java programming language
features》,讲了即将到来的jdk7可能引入的新的语言特性,比较开眼界的是jsr308对annotation的扩展使用,更多地作为断言或者
说checker使用以便减少bug。在ppt前面,我觉的更有意思的是对java语言演化的讲述,做个笔记。
1
、应用
vs.
语言
应用是特性越多越好,应用是
rich
的;而语言是
pure
的,更少的、普通的特性更好。
2
、添加一个
java
语言特性的三个前提:尊重过去、着眼未来以 ...
- 2008-06-18 00:22
- 浏览 1939
- 分类:编程语言
hadoop分布式文件系统:架构和设计要点一、前提和设计目标1、硬件错误是常态,而非异常情况,hdfs可能是有成百上千的server组成,任何一个组件都有可能一直失效,因此错误检测和快速、自动的恢复是hdfs的核心架构目标。2、跑在hdfs上的应用与一般的应用不同,它们主要是以流式读为主,做批量处理;比之关注数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。3、hdfs以支持大数据集合为目标,一个存储在上面的典型文件大小一般都在千兆至t字节,一个单一hdfs实例应该能支撑数以千万计的文件。4、
hdfs应用对文件要求的是write-one-read-many访问模型。一个文件经过创建、写 ...
- 2008-06-05 14:26
- 浏览 3017
- 论坛回复 / (11 / 28634)
- 分类:企业架构
第一个程序:
import java.util.arraylist;
import java.util.list;
public class tailrecursiontest {
public static void main(string[] args) {
tailrecursiontest t = new tailrecursiontest();
for (int i = 0; i < 10000; i )
t.a(0);
}
public void a(int j) { ...
- 2008-05-31 17:36
- 浏览 3364
- 论坛回复 / (25 / 14784)
- 分类:编程语言
- 博客分类:
- java
前段时间看了这篇文章《ropes:理论与实践
》。这两天为了提高工作中某个系统对外接口的效率,才认真学习了一番。本质上ropes是将字符串表示为一棵二叉树,特别适用于长字符串的处理,貌似c stl库中也有这么个实现。具体实现和原理还是看这篇paper
。《ropes:理论与实践
》
一文中给出的测试数据相当惊人,ropes比之string和stringbuffer在append,insert,delete等操作上的效率都有一
个数量级以上的差距。跑下作者给出的测试程序,其实在测试的字符串不是很长的情况下,这个差距并没有那么大,这也从侧面说明了rope的应用范围:即只有
在大量修改大型 ...
- 2008-05-05 18:49
- 浏览 2164
推荐两篇blog:
《java nio 类库selector机制解析(上)》
《java nio 类库selector机制解析(下)》
有一个奇怪的现象引出的话题,为了selector.wakeup功能做到跨平台,
每个
selector.open()
时,在
windows
会建立一对自己和自己的
loopback
的
tcp
连接;在
linux
上会开一对
pipe
(
pipe
在
linux
下一般都是成对打开)。
java为了跨平台真是无所不用其极,此中冷暖谁知啊。
- 2008-04-22 18:13
- 浏览 1800
在《程序员》最新一期有个专题介绍java开源nio框架,其中谈到了mina和grizzly。mina我还算比较熟悉,写过一些代码,也尝试去读过源
码。而grizzly是第一次听说,这个项目是sun的一个开源nio框架,是2004年在glassfish项目中诞生的,一开始是一个http
web server,用于取代tomcat的coyote connector和sun
webserver,2007年7月1.5版本发布并宣布成为开源项目,项目凯发推荐主页在https://grizzly.dev.java.net
grizzly与mina的性能比较(基于2007年javaone会议上的ppt) ...
- 2008-02-23 19:15
- 浏览 4136
- 论坛回复 / (3 / 7387)
primitive
writes up to and including…
...are made visible to…
object
the end of a synchronized block or method
a thread entering a synchronized block or method for the same object.
...
- 2008-02-23 11:38
- 浏览 2330
提取swf文件元信息、压缩swf、解压swf都可以处理,来自于http://www.brooksandrus.com/blog/category/java/,或者直接这里下载。
一个小例子: swfheader header = new swfheader("g:\\mplayer\\test.swf");
system.out.println("signature: " header.getsignature());
system.out.println("version: ...
- 2008-01-07 15:34
- 浏览 9329
小结下最近做的东西吧。因为是做一个素材管理的东西,因此需要处理各种各样的素材,音频、视频、图片、pdf、ppt等等。遇到一个需求就是将ppt转成
图片组,google一下,在java里是可以jcom之类的开源库实现,本质上都是通过jni调用office的com接口来实现。我们就需要这么一个
小功能,拖这么大个开源库进来实在没有必要。最后决定自己写个动态链接库,通过jni来调用。
先写工具类,
public class pptutils {
public pptutils() {
}
public static native void convertppt ...
- 2008-01-07 15:33
- 浏览 4686
« 上一页 1