
我最近几个月来一直在一家公司使用ruby on rails。我因为喜欢所以才使用它,这几个月来,感觉到了一些开发的乐趣,很好,所以我会继续保持这种状态,继续跟进ruby on rails。这些年来,使用asp,c++,linux,oracle,mysql,vc,java,学来学去,总是不上趟,最近也算顿悟出一些道理,就是学不学的好,有很大的原因是自已的学习方法的问题。人一辈子都在学,如果不会学习并且还没有自知之明加以改进,那真是一场莫大的笑话。别以为你身边没有发生过,说不定我说的也有你一份。人真的会学习了,那真的就变成人了。继续努力吧,为自己加油。
终于可以访问了,写点字,歇歇气,继续写点东西
八月 21st, 2009 · No Comments
→ No CommentsTags: 我的杂念
Facebook存储图片方案细读分享
六月 25th, 2009 · No Comments
原文:
http://www.facebook.com/note.php?note_id=76191543919
基于原文的精彩之处,我想写一下思路方便以后参考。
为什么要使用全部的架构,是因为发现了io瓶颈。要解决它,facebook Engineering Team提出hayStack架构方案,
从底层到上层一一悉数,
Haystack Photo Infrastructure
* HTTP server
* Photo Store
* Haystack Object Store
* Filesystem
* Storage
1.Storage
就是硬件配置,直接这里:
* 2 x quad-core CPUs
* 16GB – 32GB memory
* hardware raid controller with 256MB – 512MB of NVRAM cache
* 12+ 1TB SATA drives
并且硬盘配置成raid 6。
2.Filesystem
讲了两种类型文件系统的区别,Block based filesystems和Extent based filesystems。建议使用Extent based文件系统。它们最终选型为XFS。
3.Haystack Object Store
自构建了两个object:一个file object,一个file index。这里的意思是使用index来直接索引文件,减少读写环节流程。
如何实现需要你自已构建,借鉴只能从思想上开始。
4.Photo Store
app server.简单就可以.
对于每个图片都需要唯一给一个64 bit key,使用Open Souce 的Google sparse hash data structure实现。所有图片的index都放在一个文件里,在Store app启动后读到内存里。
5.HTTP server
evhttp server provided with the open source libevent library.就是使用多线程的http server
要掌握这些并实现它,需要对操作系统最少是linux的文件系统要能更深入了解。
技巧性不强,技术性太强。一般小猫就不要使用了。
→ No CommentsTags: 未分类
优化图片要小心注意一点
六月 13th, 2009 · No Comments

新到工作环境,同事告诉我他自个业余时间制作的网站:俩个人,使用google Page Speed查看了一个优化建议,发现自已的图片优化都很差,google 的Page Speed又给站点里的上传的小图片又优化了将尽80%,太恐怖了。好奇之余,了解到Page Speed是开源的,马上下载了代码看了一下。
代码里发现,实际上对jpg的处理,就是libjpeg里的原生优化函数作了处理,没有作更额外的操作。新同事使用的是rails+原生的imageMagick,按我以往的经验,在缩放和无损耗压缩方面好像没什么新的tips啊。
马上google一番。有以下结果:
1、imageMagick总会有损耗,只是肉眼看不出来罢了。
2、在图片处理速度上,老外作了评测,发现imageMagick还没有jpegtran快。并且jpegtran是无误压缩。
3、对于是否使用progressive compressor有争议,但实现它的目的就是在最短的时间内让用户浏览图片全貌。
4、对于imageMagick如何弥补这些,注意使用如下参数:
convert -interlacing PLANE image.gif image.gif
refs:
http://code.google.com/intl/zh-CN/speed/page-speed/docs/payload.html#CompressImages
→ No CommentsTags: 未分类
Blogging的痛就是被墙挡
五月 20th, 2009 · No Comments
作Blogger已经有六七年了,从最开始的不知所云到现在的Blog熟手,我相信这是所有在国内网络环境下成长的过程。最近几年我最痛的硬伤就是有个无形的“墙”。但这个“墙”总是那么不值得一提,用点proxy就能爬过去,反而让我更不快乐.我更希望当一个快乐的trueMan.That’s all.
→ No CommentsTags: 我的杂念
Mysql的最佳实践-选择最优的Mysql版本
十二月 4th, 2008 · No Comments

这段时间的经验总结
1、选择精简有效的版本是我们首先需要解决的。这里已经有专家作了当前最全面的评测,一句话:如果你准备构建Mysql,请选择5.0.x版本。下载源直接从Mysql.com下载即可,当然还有更好的选择这个版本。
2、Mysql表设计原则,肯定大家各有一套。经过这些年的磨砺,今天我也就两个经典疑问说说
第一个问题是:表里要不要设计id字段?
答:大部分表里都需要加一个这样字段,类似id序号,主键,类型为BIGINT(20)。这里指代的大部分表是指表内数据最少大于127行。
第二个问题是:有时在设计字段时,会有一个状态值字段,一般习惯使用int值来代替。说不定你感觉挺好,这里我要说说了,快点清醒!使用字符串并且要用形容词来描述。现在不缺这点消耗
3.使用标准工具mysqltuner看优化结果
wget http://mysqltuner.com/mysqltuner.pl
chmod +x mysqltuner.pl
# ./mysqltuner.pl
Enter your administrative username and password
Output you can see as follows
参考:
http://www.percona.com/mysql/5.0.67-b7/source/
http://www.mysqlperformanceblog.com/2008/12/03/mysql-50-51-and-innodb-plugin-cpu-efficiency/
→ No CommentsTags: MysqlDBA
javamail发送邮件,sendmail报错解决办法
十一月 11th, 2008 · No Comments
首先,我假设环境是linux redhat as4,sendmail是直接安装rpm的。
javamail认证设置发不出去,郁闷如下:
Nov 11 16:59:31 localhost sendmail[11876]: mAB8xUOA011876: [123.127.x.x] did not issue MAIL/EXPN/VRFY/ETRN during connect
ion to MTA
Nov 11 16:59:47 localhost sendmail[11877]: mAB8xlAV011877: [123.127.x.x] did not issue MAIL/EXPN/VRFY/ETRN during connect
ion to MTA
Nov 11 16:59:59 localhost sendmail[11878]: mAB8xxcK011878: [123.127.x.x] did not issue MAIL/EXPN/VRFY/ETRN during connect
ion to MTA
Nov 11 17:01:34 localhost sendmail[11881]: mAB91YX0011881: [123.127.x.x] did not issue MAIL/EXPN/VRFY/ETRN during connect
ion to MTA
Nov 11 17:05:06 localhost sendmail[11924]: mAB9562X011924: [123.127.x.x] did not issue MAIL/EXPN/VRFY/ETRN during connect
ion to MTA
=====解决办法:
cd /etc/mail/
1.修改/etc/mail/local-hosts-name文件
增加本地域和主机的FQDN,记住只是本地主机的FQDN和域名FQDN,不要添加其他域的,否则向外域发送邮件的时候会出现user unknown的错误:
2.更改/etc/mail/sendmail.mc文件,修改下列地方:
DaemonPortsOptions=Port=smtp,Addr=127.0.0.1, Name=MTA 更改为:
DaemonPortsOptions=Port=smtp,Addr=yourip或者0.0.0.0, Name=MTA
3.修改/etc/mail/sendmail.mc中的字段,取消“TRUST_AUTH_MECH”一行和下一行“define”处的注释。(于sendmail.mc文件的第48、49)
4.然后m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
5.开启认证chkconfig –level 35 saslauthd on
6.restart sendmail打完收工
→ No CommentsTags: Java · Tips
Mysql优化经验关注点-innodb_thread_concurrency
十一月 9th, 2008 · No Comments
在出现多核后,Mysql的这个参数发生了变化,就目前来说如果是2核的情况下,直接就设置为0.当然这里有高手说了,不要太教条,一定要测试,经验和数据是最最重要的。非常幸运,这个参数可以在线配置数量。如果是最化当然要看Show INNODB Status的参数变化(关于Show Status参数还需要经常复习,作为调优的基准使用)。
另外,对于如果在线配置这个参数,经过查看也找到了:
mysql> set global innodb_thread_concurrency = 0;
=======华丽的分割线==================
假设你有一个mysql数据库机器,现在你登陆后执行show Processlist,看到有很多sleep参数,
mysql> show processlist;
+—–+——-+—————–+——+———+——-+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—–+——-+—————–+——+———+——-+——-+——————+
| 644 | dbmgr | localhost:39943 | iwap | Sleep | 7 | | NULL |
| 698 | root | localhost:59783 | ibbs | Sleep | 12260 | | NULL |
| 699 | dbmgr | localhost:59785 | iwap | Sleep | 12256 | | NULL |
| 702 | root | localhost | NULL | Query | 0 | NULL | show processlist |
但日常查询又没有问题,是不是就不关心它了。注意,当你看到sleep时,你一定要注意,已经有非常重要的错误出现了,快点去干活吧。
如果干,当然需要用工具,首先这里假设你使用的环境是Linux环境,
# netstat -ntp |grep :59785
tcp 0 0 127.0.0.1:3306 127.0.0.1:59785 ESTABLISHED 5339/mysqld
tcp 0 0 ::ffff:127.0.0.1:59785 ::ffff:127.0.0.1:3306 ESTABLISHED 15171/java
这个程序的pid,就可以trace了
# strace -p 15171
Process 15171 attached - interrupt to quit
futex(0xb7fdfbf8, FUTEX_WAIT, 15172, NULL
我靠,终于让我找到原因了。这里是java的syncronized在linux kernel在2.6.12之前有bug,所以如果想解决它,尽快更新kernel到最新版。教训啊,学习啊。希望大家能分享到这些。
参考:
1.Drilling down to the source of the problem
2.Debugging sleeping connections with MySQL
→ No CommentsTags: High Performance Tech · MysqlDBA
快速了解mysql数据库结构的方法-tips
十月 10th, 2008 · No Comments
这个方法其实不是什么秘密或者tricks。但相信还是会有人需要知道。
首先,由这里看到一个方法:mySQL workbench的使用
第一步:
mysqldump -d –no-add-drop-tables
然后在mySQL workbench菜单中
Clicked File->Import->Reverse Engineer MySQL Script
这样你会得到这个库的表结构信息。
第二步:
选择:
Model->Create Diagram from your Catalog Objects
oK,这回你可以看到效果了。
→ No CommentsTags: MysqlDBA · Tips
awstats如何配置,想玩转它就看这里!
九月 18th, 2008 · No Comments
我想awstats这一日志统计工具,应该很多站长都玩过。这里有车东的awstats文档可参考配置。我的习惯是下最新的用,之前没有用过,所以在测试环境多配置了几次后,对一些不明白的地方有了一些认识。经验嘛,分享之。不足之处,还请各位大仙斧正。
1、安装没有什么技巧,当然车东提供的一个配置方式可以拿来用用,:-)
这里默认配置目录为:/etc/awstats
你先把awstats-6.9/wwwroot/cgi-bin/awstats.model.conf复制到/etc/awstats下,重命名为common.conf,随后的操作参考车东文档即可。
2、日志的格式,这是新手遇到问题最多的地方,或者说我自个吧。老是提示什么格式不对。或者出现只收录bad record记录。咱最终的目标是收到new record,才算搞定这些。
别急,这里我再提供一份完整的参考,并且保证有效。
我拿流行的nginx日志来配置:
nginx.conf里:
log_format main ‘$remote_addr - [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" $http_x_forwarded_for’;
其实就是默认值。然后在awstats.你的域名.conf里配置如下:
LogFormat = "%host - %time1 %methodurl %code %bytesd %refererquot %uaquot"
注意:默认awstats是以空格为分隔,所以错误发生的原因只有两条:要么少空格,要么字段顺序不对。睁大眼睛看看。其中$http_x_forwarded_for在awstats没有对应值,这里我提出来,需要细研究才知此标识有没有用处。有人把$http_x_forwarded_for去掉了,也没有问题,照样可以生成日志。
参考url:
http://www.chedong.com/tech/awstats.html
http://www.dbanotes.net/techmemo/nginx_awstats_fastcgi_for_perl.html
http://www.php-oa.com/category/awstats%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90
→ No CommentsTags: Tips
高性能环境下对HA,Cluster,Load Balance的理解(Final)
八月 26th, 2008 · No Comments
其实这些技术术语已经在我的口上挂了N(N>5)年,但我还是不太明白这其中的细节。昨日晚上感觉很热,无法入睡。这脑子也在不断的研磨着这些术语的理解,想着今天上班后,使用维基来验证一些最基本的计算机概念。
今天细看了之后,还是有些收获。Cluster分为HA Cluster,LB Cluster。在我实践中,LB Cluster的技术用的比例高,HA的成本是需要考虑的。有些朋友可能会实现成HA Cluster基础之上,把这个Node看成一台Server,然后在此基础之上再作LB。 我现在要去部署应用,等有时候再延续这篇BLOG.. 继续写:
不管是HA,还是LB形式的Cluster,维护成本是极大的成本。所以Grid Computing是必然之路。换个术语“云计算”我估计也是这个范畴里的东西。因为涉及的技术我没有了解过,也没有体验过,不发表意见。
换一个,我提供一个对Cluster的理解,在架构Cluster的时候,应该关注应用层的复印,对于数据库(比如数据库)使用Cluster获得的收益是很小的,在现有的关系型数据库模型下,单Instance的数据库仍然是王道模式。想获得数据的性能提升,通过数据分片,拆表,分割等技术,已经可以有足够的机会获得所在环境中的数据高性能。
而在考虑应用性能时,通过冗余复制实现数据吞吐量的LB是比较理想的,原始的,又是行之有效的方法。毕竟现在的硬件已经很便宜了。这里又引出另一个话题:那就是作为工程师,是不是应该滥用硬件来解决软件性能问题。因是题外话,点到为止。
另外,现在还有另一种技术,就是Cache,分布式的Cache技术类如Memchache等,已经开始在互联网中广泛应用,因为还没有详细理解,所以也不发表意见。
总结:在尽可能的情况下使用Cluster,注意拒绝滥用硬件的陋习。在优化软件结构之后,再去考虑高性能。Over!
