昨晚稍微改动了一下,wordpress的twitter tools插件代码,使它能在调用最新twitter信息的时候能够根据需要决定是否取出最新的几条信息,默认值是最新的一条,并且在最外面套上了ul标签,每条消息用li标签套住。这样方便做对在页面css中对插件输出作出适当的控制。输出的具体格式如下 <ul> <li> 我怎么这么晚还没睡? <a href="http://twitter.com/muxi/statuses/1615269841">11 hrs ago</a> </li> <li> 终于开始写论文了,神啦,我这么懒!! <a href="http://twitter.com/muxi/statuses/1615229846">11 hrs ago</a> </li> <li> css => cross site scripting <a href="http://twitter.com/muxi/statuses/1311036569">2009-03-11</a> </li> </ul> 调用方法如下: <?php aktt_latest_tweet($number); ?> $number这个参数是可选的,默认是取出最新一条twitter信息,根据需要输入你需要的数字,比如我用的是3 使用这个插件需要注意的是不能同cos-html-cache这个插件一同使用,因为江东的这个插件要只有在文章更新的时候才会重新生成新的HTML页面,假如你跟我一样,选择将twitter信息放在首页,那么只能取消这个插件了。 等我有时间的时候会自己写个高定制度的HTML页面缓存插件 最所以在这里发布修改过的 twitter tools 插件,主要是因为这个插件使用的是GPL协议,也考虑到会有朋友需要更新几条信息。虽然twitter tools 有内置的sidebar的函数,似乎并好用,标签冗余比较多。 修改版twitter tools 下载:Box.net
Monthly Archives:: 四月 2009
Improving Running Components at Twitter
Improving Running Components at Twitter View more presentations from Evan .
奋斗!为谁?
每天屁颠屁颠的干着琐碎的事 每天和同志们吵着闹着 我们为一个到底谁创造了命名空间(namespace)而争吵不休 我们为了Python为什么推倒重来而面红耳赤 我们为了吃8块的外卖还是10块的而犹豫不决 我们拿着螺丝刀拆了好几个硬盘,盘片最后成了镜子 我错过,没人责备过我 我们都错过,另外一个人替他补上 8个人,是兄弟还是团队? 我们一起喝酒喝到凌晨 我们在最拮据的时候相互援助 我们因为社会原因而逝去的同事而抱头痛哭 我们因拓展而更深的了解彼此 我们相信每个人都是自己的老师 我相信他们都是我的老师 每天我都在开心着、开心着、开心着 每天我都有收获着、收获着、收获着 坚持着,是因为放不下,真的放不下 “薪酬不是第一位,这里给你一次创业的机会” 我信了,于是我坚持了 某一天,有人在QQ上说:再过几天你就9个月了, 而我们在一起加起来还没2个月。 我相信这个世界,我依然相信这个世界。
妈妈,生日快乐
刚刚过去的一天,是我母亲的生日,她识字不多。 我, 一个当年背着板车拉着西瓜到处叫卖的被人戏称为“黑子”的家伙,这个板车上也曾经卖过甘蔗 一个当年一蛇皮袋一蛇皮袋将三千多斤稻谷从脱粒场扛到家里的家伙,每个来回就有两公里,那我不知道抗了多少个来回,那天晚上,我真的咳出血,很多很多 抗这些稻谷的过程中别人拿着罐头从我面前走过,问我要不要吃,我母亲说,不用了,我们家有西瓜,比这个东西好。那个人走后,我母亲对我说,听着,你的一切在你手上,别人的东西,再好也不要。那个夏天我虚岁16岁。 在别人鄙视的言语中上了最好的高中,然后在嘘声中成绩降到了谷底,再在嫉妒的目光中走进大学,在注视的眼神 中走到社会。 老横在他的博客中说:“因为没几个人相信,你的梦想 ,所有的事,都是你实现了,别人才接受而已” 这些年的经历证明了,老横是对的,真的很对,很对 生日快乐,妈妈,我不会让你失望的。
关于PHP最佳实践方法的两个PPT
Best Practices of PHP Development View more presentations from Matthew Weier o’phinney. Everyday Best Practices of PHP Development View more presentations from Matthew Weier o’phinney.
ChinaUnix网络优化论坛上海站总结
在绕了N个圈之后我终于找到了会场,看看时间12点48分,按照规定牛人要13点30开始演讲,到了这个时间,我发现只有51.com 的finalbsd同志到场了,主持会议的草上飞(唐川)说嘉宾正在路上,牛人的时间自然贵点,晚点到场也是应该的,于是我安慰了一下自己,牛人于14点左右差不多陆续来了。 FinalBSD同志的“群服务器负载均衡的开源解决方案”讲的很好,个人理解如下: 1、目前最好的负载均衡的硬件设备是F5和Netscaler,两者基本上属于同质品,所以两者是直接竞争者,不过后者可以将TCP的三次握手全部自己搞定,F5是转发到后端,因此Netscaler具有更高的抗DDOS特性。两者拥有太多的相似点,其中之一就是价格,中小互联网企业根本舍不得买,比如BlogBus。 2、F5、Netscaler都能工作在OSI模型的4~7层中。 3、开源软件解决负载均衡中,HaProxy和LVS相对比较优秀,LVS只能工作在4层中,HaProxy能工作在4~7层,并且提供web的状态查询,LVS可以基于命令行进行管理,HaProxy只能通过配置文件实现,HaProxy配置信息子节点可以继承,也可以重新定义,HaProxy能够实现高层应用,也意味着损失一些性能,当然加入实现同样的功能,和LVS差别不大,HaProxy可以很容易实现备份均衡器配置,加入一组负载均衡的机器倒掉之后,HaProxy会自动切换到备份的一组机器上,并且session等信息可以平滑过渡,好处是用户不需要重新登录、购物车不会因切换而被清空等 4、HaProxy实现了负载均衡的ALC控制,减轻后端的集群压力,但是我怀疑这台负载均衡机器的性能是否足够的好,不然会造成单点故障,当然,可以配置多台负载均衡机器 5、HaProxy比LVS更容易实现CDN加速,具体原因没听明白。 接着淘宝来的同志介绍了XEN实现的虚拟化技术,演讲者的名字我也忘了,改日补上。 1、虚拟化主要是指一分多或者多合一,之所以记住这句话,是我的概念中总是以为虚拟化是一分多,可能日常基础的例子都是这样。虚拟主机,VPS等等。 2、虚拟化能够实现快速拷贝环境,配置好一个环境可以复制任意多份运行,前提是物理机器足够的多和强大。 3、虚拟化软件中,Vmware和XEN效率最高,前者是商业软件,后者是免费开源产品。 4、虚拟化并没有在生产环境中得到大规模的应用,目前都是试验性质的,淘宝几乎所有的测试环境都构建于虚拟环境,但生产环境没有例子。 5、虚拟化可以共享存储,真实系统可以读取到虚拟主机中的任意文件,只要设置正确。 第三个是来自这次活动赞助商梭子鱼的经理的演讲,主要是推销梭子鱼的负载均衡设备,号称只有F5三分之一的价格,通过他滔滔不绝的演讲,让我了解(或者叫猜测)到梭子鱼网络均衡设备便宜的原因,实际上梭子鱼就是一个软件集成的厂商,将几个开源软件修改修改,然后丢进一台开起来很山寨的server中,就可以买到F5三分之一的价格,假如这个也叫便宜的话,我觉得F5应该再提价5倍。 第四位依然是51.com的工程师,讲Mysql的灾备体系。 1、灾备体系就是灾难备份体系,也就是在特别紧急情况下的数据恢复问题,比如911事件后,美国摩根斯坦利第二天就能正常运作,这就得意于他们的灾难备份和恢复体系。 2、灾难备份不仅要同地区备份,还要异地备份,最好能定期存入永久存储介质中。 3、备份中需要注意的几个问题是:备份一致性,备份存储,备份对正在运行的业务影响,备份策略等 4、假如11:00发出备份指令,12:00备份完成,如何保证备份时间中的数据一致性问题,主要解决方案如下 a、 使用从库(slave)进行备份,11:00时对从库加锁,然后进行备份,这样做的缺点是,需要增加架设从库的硬件成本,假如有300台主库(master),那么就需要300个从库,当然,可以通过一台机器启动多个从库来减少一部分成本,假如从库压力不大的话。切记要在从库备份前先flush table,不然很多数据还在内存中,无法被备份。 b、直接使用Mysqldump来备份,优点是不会增加太多成本,缺点是一旦启用dump那么数据库将加锁,业务就会被停止,尽管可能停止很短时间 c、使用snapshot(快照)进行备份,此种备份只适合使用InnoDB的存储引擎,因为在备份开始和结束这短时间中,数据库的所有改动操作全部保存在undo log中,备份完成后通过undo log的前滚来保证备份的一致性。 5、在99.9%的情况下Mysql的安全性是可以得到保证的,还有0.1%情况下是不可靠的,比如你正在执行一个删除操作,然后立刻按住CTRL + C中断删除,你会发现一个神奇的事情,你的数据被删了,bin log中却没有任何记录,也就是说,没法恢复了。 6、淘宝现在的所有后台操作只用十几个oracle就搞定了,可见oracle的性能。 7、oracle和Mysql的搭配能显出更高的效率,比如oracle只写,而用Mysql做同步的只读数据。 我感兴趣的内容总结如上,还有其他的演讲者内容就忽略了,抱歉~~ 演讲的PPT估计过几天ChinaUnix会挂出来,隔几日再奉上。
利用CodeIgniter缓存进行攻击
CI自带的缓存系统确实很方便,但她存在一个很大的弊端,看缓存系统的源码: CI把md5(index.php+uri_string)作为缓存文件名(没完全copy,详见libraries/output.php) 这个uri_string允许URI串夹杂垃圾信息,比如: http://ci-site.com/index.php/index/index/1 http://ci-site.com/index.php/index/index/1/2 http://ci-site.com/index.php/index/index/1/2/3 上面三个请求,CI将生成3个不同的缓存文件 问题来了,假如攻击者写一个并发访问脚本: 每秒并发访问100次(任何adsl用户都有足够带宽发起攻击) 循环访问 index.php/index/index/1 至 index.php/index/index/10000000 那么服务器将生成一千万个首页垃圾缓存,在同一个目录里面! 假如你的网站首页html有10kb(一般来讲,10kb作为首页不算大) 这个缓存目录的尺寸将达到:10kb x 10,000,000 = 100GB 完成攻击所需时间:大约27小时 更重要的是CodeIgniter本身并没有提供更详细的缓存检测机制和缓存容量限制机制,加入你没有对cache目录进行磁盘配额限制的话,那么一轮并发高的缓存攻击将有可能将硬盘塞满,之后网站就会变得异常缓慢。而且更要命的是CodeIgniter本身没有缓存清除机制,只能干等着缓存过期或者手动清除,CodeIgniter最大的优势在于它的性能和学习曲线。 总觉得CodeIgniter本身就是一个半成品,没有缓存清除机制也就算了,还没有模块化缓存(即只缓存页面某个或者某几个部分)的的机制,CodeIgniter这么优秀的Framework在缓存方面算是做得很失败了,不过得益于它优秀的扩展性能,仍然有很多解决方法,况且任何Framework都不是完美的。 解决CodeIgniter大体上有四种方法 1)关闭缓存,我觉得这基本上算不得一种解决方法,因为这牺牲了网站的性能 2)架设缓存服务器,对于一般的中小型网站来说这也比较奢侈,且不说squid或者vanish的学习曲线有点长,也没与服务器设备。 3)增加严格的检测机制,这是一个非常可行的方案,比如对URI每个传入参数的类型进行严格的验证,在一个页面显示前进行详细的处理,比如ID为10000的记录数据库中根本不存在,那么使用show_404()方法输出404页面,这个页面并不会被缓存,假如没有增加这个验证,程序输出的页面将会被缓存,只是页面的某个区域的内容为空而已。比如显示文章的区域是空,侧边栏和头部都是从模板中继承过来了,仍然被缓存了。 4)使用其他cache类替代CodeIgniter的缓存类,比如APC
用GNUPlot来分析vmstat结果
vmstat查看当前系统运行状态时,不能看出一段时间的趋势,我们常用的流量监控软件Cacti做的非常的棒,事实上也可以通过修改Cacti的脚本监控系统的大部分状态信息,如果你不经常用,只是想分析某段时间的vmstat,或许老外写的这个叫vmplot的脚本比较适合你,如果你没有X11的环境,会有一个这样的提示:set term png small ,因为终端不支持png显示。你有很大的可能会出现如下错误: gnuplot: unable to open display ” gnuplot: X11 aborted. 这是因为默认会使用X11环境来显示生成的png图片,事实上终端上是肯定做不到的,我就是这样错误的。如果你使用的是tcsh那么请执行下面语句: setenv GNUTERM dumb 如果你使用的是bash,那么执行: export GNUTERM=dumb 关于为什么要执行这样的语句,请看这个帖子肯定比我解释的清楚 当然,说这么多,前提是你已经安装了GNUPlot,然后参考手册输出设备上调整你的显示模式,如果你比较讨厌像蝌蚪一样的英文,这里还有中文版本的手册,你可以根据里面的第六章的设备输出来调整显示状态。在执行这个脚本之前,当然要生成一个数据源,类似这样的: vmstat 1 200 >vmstat.out 1表示间隔时间,200表示总次数,也就是每个1秒取一次样,一共两百次,然后输出的vmstat.out文件中,这个文件名是在脚本中指定的,如果你输出的名字不是这个,你需要修改一下脚本里面的名字。如果你不想改任何东西,那么也可下载我修改过的脚本,虽然显示丑了点,终端环境也就凑合着用吧 附上效果图一张(只是分析一个参数的截图,实际上有7个类似的图):
Recent Comments