Skip to content

{ Category Archives } 工作日志

Lucene 重建索引流程设计(草稿)

一. php client 端: 1. update 与 rebuild 分开 2. update 准实时:insert,update,delete 实时调用更新索引接口(带 primery key 的update 和 delete) 3. rebuild 使用命令行或者 cron 运行,不能使用 web 页面(有运行时间限制),但可以在后台管理系统中作触发(如何防止重复触发?) 二. Java IndexServer:(接受 client 发过来的数据,输出为临时 xml 文件) 1. 日常 update 的 xml 临时文件可以考虑保存在内存文件系统中(保留最近n天的文件debug使用) 2. 更多的处理过程 log (debug 使用,日常监控使用) 3. rebuild 的 xml 临时文件一定要保存在内存文件系统中 4. xml 文件按年或月分目录 5. rebuild 的过程中,update 数据需要为新索引保留一份,等 [...]

Beta 沙龙:手机之家新系统介绍及架构分享

周日(2009年3月29日)在 奇遇花园咖啡馆 举办的 Beta 技术沙龙上,本期分享主题 手机之家 新系统介绍及架构 分享者:徐超前(http://www.longker.org/) ppt 查看及下载:http://docs.google.com/Presentation?id=dgct7gqk_8098gpr4wz6k PS. 我是 DAL 2.0 开发者之一,如果在这个方面有什么问题,欢迎讨论。我的联系方式在 http://tangfl.yo2.cn/about

gzip 与 deflate 续

新公司上班,公司在双井地铁站附近的九龙花园居民区里,住则住在百子湾家园,一个只有一条路通向外面的封闭地方。每天上下班由小蔡接送,除了车子不密封,早晚稍微有点冷以外,一切都还好。 继续为 nginx 增加 deflate 压缩支持。公司居然用的是 nginx 0.7.33 的最新开发版本,虽然不时的有 502 bad gateway 出现,但老高不以为然。打开0.7.33 代码一看,比 0.6 版本的整洁了许多,gzip 添加头,尾的动作都被封装到了单独的函数中了,再也不是一个大函数从头写到尾了,有进步。 起初是想为 deflate 压缩单独写一个与 gzip 平行的模块,拿原先 gzip 模块的 c 文件(src/http/modules/ngx_http_gzip_filter_module.c)一通 “搜索”-“替换”,编译通过了,但新模块死活没有被调用。想想也是,http 请求头的处理不在这个 c 文件里面,只改这个文件,当然不会有效果了。 接下来就把原来的 gzip c 文件一通猛改,添加头的函数直接 return,添加尾的函数也去掉具体添加的动作,最后再把 Content-Encoding 改过来,一测试,呵呵,还真的省下来 18 个字节! 但这样以来 gzip 就不支持了。更严重的是,如果(虽然可能性比较小),一个客户端只支持 gzip,不支持 deflate,那么它就无法解析请求的结果。在查看 src/http/ngx_http_core_module.c 里的 ngx_http_gzip_ok 函数的时候,终于发现了对于客户端提交的 header 里面的 accept encoding 的判断处理: ngx_strcasestrn(r->headers_in.accept_encoding->value.data, “gzip”, [...]

gzip 与 deflate

新东家还没有报道,就安排先做一个小任务:把 nginx 的 gzip 换成 deflate ,问为什么,老大说能省 18 个字节。 在baidu上搜了好久,搜到的中文基本上都是讲 apache 的 gzip(apache 1.3) 和 deflate(apache 2.x)的配置的,仅有的几个跟 nginx 相关的,也逃不出配置文件的范畴。至于原理,算法等等,只有去 Google 英文资料了。 换了关键词,直接搜 zlib ,终于找到一些有用的东西,在 http://www.cppblog.com/jinq0123/archive/2007/07/09/HttpCompressConv.html 处看到这样一段话: deflate与gzip解压的代码几乎相同,应该可以合成一块代码。 区别仅有: deflate使用inflateInit(),而gzip使用inflateInit2()进行初始化,比 inflateInit()多一个参数: -MAX_WBITS,表示处理raw deflate数据。因为gzip数据中的zlib压缩数据块没有zlib header的两个字节。使用inflateInit2时要求zlib库忽略zlib header。在zlib手册中要求windowBits为8..15,但是实际上其它范围的数据有特殊作用,见zlib.h中的注释,如负数表示raw deflate。 Apache的deflate变种可能也没有zlib header,需要添加假头后处理。即MS的错误deflate (raw deflate).zlib头第1字节一般是0×78, 第2字节与第一字节合起来的双字节应能被31整除,详见rfc1950。例如Firefox的zlib假头为0×7801,python zlib.compress()结果头部为0x789c。 再去检查 zlib.h 中的注释说明,在 zlib-1.2.3/zlib.h Line 500 的地方发现这样一段话: The windowBits parameter is the base two [...]

密码保护:摇摆的生活

无法提供任何摘要。这是一篇受保护的文章。

关于web服务器的测试

测试名单上包括: 一,webservers: Apache/1.3.41 Apache/2.0.63 nginx-0.6.32 cherokee-0.9.4 lighttpd-1.4.19 二,PHP 加速器 APC-3.0.19 eaccelerator-0.9.5.3 xcache-1.2.0 三,server 配置,比如说 PHP 静态,动态编译,Apache 静态,动态编译,mod_fcgid, mod_fastcgi 四,测试用例 小 html:echo.html 大 html:phpinfo.html 小 php:echo.php time.php 大 php:smarty.php 重 php:phpinfo.php 五,测试点 webserver 每秒处理的请求数,Request Per Second,rps,前提是对于每个请求, webserver的响应时间不能够超过容忍时间(5-8s) 同时并发连接数,指的是不出错的情况下能同时处理的连接数 数据吞吐量,单位时间内能够传输的字节数 各种webserver与PHP加速器搭配的稳定性 六,测试方法 autobench-2.1.2,httperf-0.8.1 ApacheBench, Version 2.0.41-dev 对每个测试用例,尝试并发 10,50,100,500,1000,5000 每次 100,000 个请求 每个并发重复测试 4 次,取rps平均数 七,测试环境:Linux Tencent 2.6.16.54-0.2.3-TENCENT-STATE-OC [...]

腾讯十周年

十周腾讯,十年在线。  想想我的第一个QQ号码,还是高二(2002年)的时候申请的。那时候,班里流行刷夜,也就是在网吧通宵上网。虽然从高一开始写程序,但我对上网,尤其是在网吧上网并不怎么热衷。到了网吧,也就是这点点,那点点。还记得有一阵子打游戏,挑了一个最简单的《飞鹰行动》,总是鼠标键盘一通乱按,结果还是进了屋就出不来。至于那时候别人帮忙申请的QQ号码,早就忘到爪哇国去了。 高考结束后,忽然想起要跟同学们保持联系了,于是到处问人要QQ——那个时候,很多“牛人”会在网吧的机器上种木马,然后偷来一大堆的好QQ号——小蔡给了我一个,于是,一直用到现在。 大学继续编程,继续写代码,继续做比赛。每天挂这QQ,虽然很多时候不聊天,不说话,甚至不怎么回答别人的话。开着QQ,成了一种习惯,一种心情,一如开着手机,只为等待某一个特定的铃声响起。 从木子版到珊瑚虫版,最后到TM,从来不点击QQ上的广告,从来不买QQ的产品,从来不为QQ花一分钱,但,一直使用它。 进了腾讯以后,同事曾笑我说,如果大家都想你这样,那腾讯就没法给你发工资了。 第一个邮箱是TOM的,却拒绝了TOM的一再offer;从来不用新浪的产品,第一份工作却去了新浪;经常嘲笑那些用QQ空间的老同学,跳槽却偏偏到了QQ空间。世间的事情都难以预料,没有什么不可能——阿迪达斯这么说,李宁这么说,奥巴马也这么说。

深圳纪事

24号晚上8点36分,T107开出北京西站。25号晚上8点22分,停靠深圳罗湖车站。 在高中同学的帮助下,从地铁转公交,终于找到了落脚的南航富豪城酒店。第一感觉是,深圳的交通费真贵:地铁5块,公交上车2块,有的还2块5 。 26号周日,抽空去了一趟东莞塘厦——爸爸妈妈,哥哥嫂嫂,还有小浩洋都在那里,难得一次团圆。 27号到飞亚达大厦腾讯报道。不巧的是,部门秘书mm和主管gg都休假了,折腾到28号,才把大部分的手续办完:电脑能上网,OA能进,RTX能进,Token卡能用。 一楼是招行,二楼是餐厅,楼上还有一个甲骨文,和一堆不知名的小公司。 楼下公交车站是大冲站,往东是白石洲和世界之窗,往西是科技园,以及深圳大学。 酒店没有洗衣机,一堆衣服都还没有洗。 从深秋,回到盛夏。

sysctl.conf 参考配置及说明

################### 所有rfc相关的选项都是默认启用的 ################### net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 ############################# 通过源路由,攻击者可以尝试到达内部IP地址 –包括RFC1918中的地址,所以 不接受源路由信息包可以防止你的内部网络被探测。 ################################# net.inet.tcp.drop_synfin=1 ################################### 安全参数,编译内核的时候加了options TCP_DROP_SYNFIN才可以用,可以阻止某些OS探测。 ################################## kern.maxvnodes=8446 ########################### vnode 是对文件或目录的一种内部表达。 因此, 增加可以被操作系统利用的 vnode 数量将降低磁盘的 I/O。 一般而言, 这是由操作系统自行完成的,也不需要加以修改。但在某些时候磁盘 I/O 会成为瓶颈, 而系统的 vnode 不足, 则这一配置应被增加。此时需要考虑是非活跃和空闲内存的数量。 要查看当前在用的 vnode 数量: # sysctl vfs.numvnodes vfs.numvnodes: 91349 要查看最大可用的 vnode 数量: # sysctl kern.maxvnodes kern.maxvnodes: 100000 如果当前的 vnode 用量接近最大值,则将 kern.maxvnodes 值增大 1,000 可能是个好主意。 [...]

64位下C程序的可移植性(64-bit Portability)

代码在64位和32位的系统中,原则上应该都比较友好,尤其对于输出、比较、结构对齐(structure alignment)来说: 1) printf()指定的一些类型在32位和64位系统上可移植性不是很好,C99标准定义了一些可移植的格式。不幸的是,MSVC 7.1并非全部支持,而且标准中也有所遗漏。所以有时我们就不得不自己定义丑陋的版本(使用标准风格要包含文件inttypes.h): // printf macros for size_t, in the style of inttypes.h #ifdef _LP64 #define __PRIS_PREFIX “z” #else #define __PRIS_PREFIX #endif // Use these macros after a % in a printf format string // to get correct 32/64 bit behavior, like this: // size_t size = records.size(); // printf(“%”PRIuS”\n”, size); #define PRIdS [...]