(ZT) Apach模块分析

July 3rd, 2009 cashplk No comments

首先,以前的处理模式是这样的:

1 在一个页面中,缓存的Control在页面中表现的是一个<esi>的标签,标签中会有一些属性。

2 Apache中的模块,要把每个返回给浏览器的页面,都拼装出来,然后检查是否具有<esi>标签,如果有,则要去Cache中找,没有,则直接通过。如果有标签,但是没有在Cache中,要重新渲染

这里面有三个操作,我黑色部分标出来的。

对于渲染,Cache不命中都需要渲染,Apache的模块是重新走了一遍JBoss,而在新的方式中,是JVM内部的调用。这个地方我没有数据,但是JVM内部调用的开销肯定是小于Apache再走一次JBoss,我姑且认为两个是一样的。

对于拼装,写过Apache模块的同学会很清楚,在output_filter中,会有两个参数,其中一个是apr_bucket_brigade *pbbIn,如果要拼装一个完整的HTTP Response,是需要通过APR_BRIGADE_FIRST、APR_BUCKET_NEXT来遍历pbbIn。

那么这个地方有两个做法,一个是分配内存,把每个分片都复制在一起,组成完整的HTTP Response,另外一个是对每个分片做遍历,但是要考虑一个页面分在两个片上的情况。

具体的实现我要看了代码才知道,如果是每次分配内存、并Copy的话,那这个地方是会消耗不少内存的,因为对于每个页面都要做这样的操作。(可能的内存消耗)那么为了找<esi>标签,对每个HTTP Response的响应的遍历是不可少的。(对CPU的消耗)

假设,找到了<esi>标签,那么是需要构造新的返回的结果的,是需要构造一个新的apr_bucket_brigade,这个apr_bucket_brigade是由一个或者多个apr_bucket,而这些apr_bucket都是创建出来的。

当然,我没有能拿到Apache ESI Module的代码,这个只是我个人的分析。有些代码是依据我之前接触过的AtPanel打点模块来分析的。

对于XX的问题,我的看法是这样的,首先我们启动的时候的目标就是为了脱离Apache。如果这要说Apache ESI Module有什么可以改进和借鉴的,我个人觉得现在Apache ESI Module能做的应该都做了,如果之前提到的,在查找<esi>标签是先复制为一个完成的buffer,再查找,那是可以改进的(相信不是这么做的),而其他后面的部分,找<esi>标签和构造新的apr_bucket_brigade 进行返回,我个人觉得已经没什么好改进了。

放在Java中处理,有一个优势。我们在处理的当时就知道是改怎么渲染Control,而在Apache的模块,你必须去检查。而对于把Cache的<esi>换成真正的内容,Java是直接拼装的,而Apahce是Copy&修改的,这个也是实现结构上决定的。

Categories: Other Tags: , , ,

用Synergy共享鼠标键盘

July 1st, 2009 cashplk No comments

平时总带自己的笔记本上班,公司又有台机,用起来有2套键盘鼠标,很是不方便。

琢磨着使用软件共享一下键盘鼠标,有空找了下, 找到这个软件, Synergy。可以共享键盘鼠标。 有windows,mac,linux版本的。

以下是windows下的配置,如果需要配置客户端,只需要在第一个选项里面填入服务端IP就可以了:

配置图.JPG

服务端配置如下:

服务端配置图.jpg

Screens需要配置2台机器,Links里面是配置鼠标移动的左右配置。例如:我配置的是ubuntu左边是T(台式机),T(台式机)右边是Ubuntu。

配置了就可以先Test一下,如果无误的话,就可以了。

Categories: new technology Tags: , ,

使用Ruby分析文件&去重

June 24th, 2009 cashplk No comments

需要分析一个18M的文件,其中内容类似如下:

2009-06-20 00:00:07,678 [5409241381(T,105101,**,N,**,18ms)(12345678901234567890,dummy,**,888888,-,1000.00,**,-,005004-**,5409241381,0,null)]

文件以=== All done!!! ===结束。

全部日志加起来有7W多条,由于是时间程序批量请求的,所以其中肯定有很多重复的数据。我需要的只是那个12345678901234567890的20位数字而已。
so,尝试一下Ruby的脚本能力。

  file = File.open(result, 'r') # 读取文件
 
# 使用正则表达式匹配20个数字
regex = /\d{20}/
 
$array = Array.new();
 
  while(line = file.gets)  # 读取文件
    $array.push regex.match(line).to_s
    break if line == '=== All done!!! ==='
  end
  file.close
 
# 去重
$resultFile.puts($array.uniq)
puts 'convert ends!!'
Categories: Ruby Tags: , , ,

Amazon发布kindle阅读器源码

June 18th, 2009 cashplk No comments

netbeans 6.7 问题

June 4th, 2009 cashplk No comments

中文显示正常,但是字体明显变瘦,不容易辨识。
原因是因为使用了openjava。

netbeans安装目录下的 etc/netbeans.conf里面设定默认使用了openjava
更改为就正常了。
# Default location of JDK, can be overridden by using –jdkhome :
netbeans_jdkhome=”/usr/lib/jvm/java-6-sun/jre”

接下来解决乱码问题:

把宋体字拷贝到你的用户目录下,然后执行如下操作:
1、 cd /usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/fonts

2、sudo mkdir fallback

3、sudo mv ~/simsun.ttc /usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/fonts/fallback/

Spring注入bean失败

June 3rd, 2009 cashplk No comments

在spring配置文件中配置了bean,具体如下:

实际的类名是:DefaultXCardUserAO.

JBOSS启动的时候,没有报错。

但是再请求这个方法的时候,xcardUserAO就没有注入进去。找了半天,直接粘贴类名也是可以找到的。

最后还是因为大小写问题。

将DefaultXCardUserAO改为DefaultXcardUserAO就可以了。

Categories: Java Tags: , ,

ROSE类图介绍

June 2nd, 2009 cashplk No comments

ROSE使用:

User Case:
用例图 (Use-case diagram):描述了系统的使用者(角色)和系统的功能模块(用例)之间的关系。
顺序图 (Sequence diagram):描述对象之间的动态交互关系,着重体现对象间消息传递的时间顺序。
协作图 (Collaboration diagram):描述相同合作的对象间的交互关系和链接关系。
活动图 (Activity diagram):用状态机对工作流进行建模的特殊形式,类似于流程图,不过支持并发控制。

Logical:
类图 (Statechart diagram):类图:描述了类和类之间的静态关系。
包图:描述了包和包之间的静态关系。包是一个高内聚、低耦合的类集合。
状态图 (Class diagram):对单个类的对象的生命周期进行建模,描述了对象时间上的动态行为,每个对象被认为是事件驱动的孤立实体。

Component:
组件图 (Component diagram):描述可重用的系统组件以及组件之间的依赖。

Deployment:
配置图 (Deployment View):描述系统资源在运行时的物理分布。

Categories: new technology Tags: ,

About: Ruby China Conf

May 25th, 2009 cashplk 1 comment

ruby conf china 2009的网站:

http://rubyconfchina.org/

演讲者以及对应的文档:

http://rubyconfchina.org/speakers

Categories: Ruby Tags: , ,

cashplk的心路历程 is Digg proof thanks to caching by WP Super Cache!