Ubuntu上KVM虚拟化的部署
这个KVM跟控制台切换器之类的东西一点关系没有,KVM全称Kernel-based Virtual Machine,是基于Linux核心的虚拟机。之前曾经写过基于XEN的虚拟化,最终linux世界还是没有选择XEN。KVM被正式导入Linux是在2007年的2.6.20核心上,以替代XEN,不过相对XEN来说,KVM要求CPU硬件上支持虚拟化技术,即Intel-vt或者AMD-v的支持。这对于2008年之后的机器来说几乎是标配的。对于这一个时期的CPU都一个劲的堆核心,内存也空前的便宜,硬盘也逐步到了320G起板的水平,可以大胆的玩虚拟机了!
再此之前,还是先确认系统的CPU是否支持虚拟化:
#egrep ‘(vmx|svm)’ /proc/cpuinfo
应该有返回,如果没有返回,且确认您的CPU支持虚拟化的话,建议去看看BIOS设置,大多数的主板都支持关闭此技术的。
MongoDB的分发模式和部署
MongoDB是近期一直在研究的No-SQL,作为No-SQL来说,Mongo做的反而更像传统的关系型数据库,可以利用弱关系进行查询。作为网站应用来说,毫不客气地说,如果你的查询复杂程度到了MongoDB无法支持的程度,只能说明你的数据结构设计的有问题。
作为No-sql的强项,MongoDB的数据分发/同步机制相对比MySQL灵活的多,支持传统上的主从同步和趋向于高性能的ShareSet,而且对于程序端来说改动相对较小,代价几乎可以不计。现在就从这两种分发机制方式说起。
Ctypes实现“C重构”
现阶段很多网站都是基于非编译的语言,例如Php,Python语言完成。这样做的效果是开发效率很高,同时开发人员也很容易就位。当网站访问量达到一个数量级之后,就会遇到传说中的C10K问题,借助解释型语言的性能劣势,整个网站会到达一种“无处修改,无处优化,无处升级”的怪圈。这时候往往就会需要采用更加底层的C去重构部分或整个项目,“C重构”由此而来。当然,技术的进化也很迅速,FaceBook开源了hiphop这个PHP2C的工具,可以部分自动化的实现“C重构”。
一直把Python当成胶水语言来用,这次就接着这个话题,说个Python C重构的例子:
从Redis的数据丢失说起
碰到一个悲催的事情:一台Redis服务器,4核,16G内存且没有任何硬件上的问题。持续高压运行了大约3个月,保存了大约14G的数据,设置了比较完备的Save参数。而就是这台主机,在一次重起之后,丢失了大量的数据,14G的数据最终只恢复了几百兆而已。
正常情况下,像Redis这样定期回写磁盘的内存数据库,丢失几个数据也是在情理之中,可超过80%数据丢失率实在太离谱。排除了误操作的可能性之后,开始寻找原因。
Redis的主从复制
作为MySQL对于Web应用的优化之一,主从复制(Master-slaver)是普遍被接受的,Redis作为当下一个no-sql的解决方案,很自然的将这个特性引入。同时将“操作便捷”作为一大目标,Redis的主从复制更为简单,甚至不需要额外的操作,完全可以在两台热机之间进行。
Mysql Innodb的两种表空间方式
要说表空间,Mysql的表空间管理远远说不上完善。换句话说,事实上Mysql根本没有真正意义上的表空间管理。Mysql的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间。只要在my.cnf里面增加innodb_file_per_table=1就可以从共享表空间切换到独立表空间。当然对于已经存在的表,则需要执行alter table MY_TABLE engine=innodb命令迁移数据。
用Nginx和Redis搭建琐碎文件下载站
对于网站来说,琐碎文件是一个很鸡肋的问题。太多过小文件的管理总有这样那样的问题,特别是当文件数量到达临界时,甚至作一条ls或者rm都无法正常反应。而且正常情况下琐碎文件都会主动缓存,花费太多资源去实现意义也不大。
之前曾经通过nginx的memcache扩展,配合TokyoTyrant Server(每次都觉得很别嘴)这个即支持memcache协议,又可以持久化的Key-Value实现过琐碎文件的管理,但限于Memcache无法逾越的1M鸿沟,只能保存些小文件。
PHP的普青、文青和2B青
之前看过一篇东西,大致上说:之所以PHP这么流行,主要是因为PHP太“下贱”。门槛太低,什么样的写法都有。这些年接触下来,也颇有共鸣。正巧赶上最近网上很流行“普青、文青、2B青”的恶搞,抱着“回字到底有几种写法”的态度,对同样的问题进行各种风格的编码,为了更多的体现算法,我剔除了注释。只为搏大家一笑,希望大家也不要拓展开来了。
题目:1只羊第二年后开始繁殖,每年一胎,每胎一只,直到第5年死亡,列出前十年的羊的数量。
非阻塞的Python web框架tornado
公司项目中需要使用长链接方式的获取后端数据库——主要是Redis的实时数据。
由于项目本身是PHP的初次看到这个项目,首先想到的是Apache + mod_php的方式,配合php的ob_start()方式直接调用,就如同我之前的一篇东西所说的那样。可问题不这么简单:
- 系统是nginx + php-fpm方式,php-fpm“hold不住”过多的Http请求,而nginx需要调整响应时间。
- 用户数量很多,Apache的消耗很大。本身功能点很小,实现成本不合算。 Read the rest of this entry »
Linux的CPU调速器
都说Android手机的耗电和发热是与生俱来的,作为一个Android用户,我也深受其苦。于是刷了一个非官方的固件——Cyanogenmod。既然说是非官固件,总有特别的地方,在省电和性能的均衡方面,CM特地的设置了一个“调速器”的选项。Android本身就是一个Linux的内核,调速器的设置本身就是Linux内核中继承而来的。

近期评论