为wikipedia捐助

December 28th, 2009

Wikimedia Foundation Logo踩着2009年的尾巴,跑到wikipedia的捐助页面,用信用卡刷了$20。这个想法由来已久,几个月前注意到开始这个捐助项目时,这个总金额750万美元的项目募集了不到三分之一,当时就动了捐助的念头。最近看到时已经到660万美元了,在这个不是太顺利的一年快要走完的时候,我希望完成这个心愿。

说到捐助的原因,其实很直接。维基百科是让我觉得对我帮助最大的几个网站之一。基于非盈利非商业的前提下,维持服务器、机房等费用的来源只有捐助。所以捐助一笔也是我应该做的回报方式。同时,维基百科在促进全世界信息知识的流通和共享方面发挥了不可替代的作用,而促进信息的流动分享,也是我一直以来的理想。

这个链接是维基百科创始人关于捐助的公开信。如果平日因为维基百科而受益,并且有意贡献,或者只是对这个事情感兴趣,请猛击:
http://wikimediafoundation.org/wiki/Appeal2/zh-hant

捐助的支付方面,可以用信用卡 或者 Paypal。国内普通的双币信用卡,支付美元即可(我没有试过支付港币),我用的招行的。

ps. 支付的时候有一个页面可能是因为墙或者碰巧其他什么网络故障,结果页访问不到。于是我再提交了一次,最终捐助了两份$20(这倒不是个杯具)。大家捐助时遇到结果页无法访问的话,可以先等一等信用卡支付成功的短信,我这里大概延迟几分钟收到。

Thrift – 开源多语言RPC框架

September 27th, 2009

RPC (wiki) 在大规模的互联网应用后端技术中非常常见,我们熟悉的搜索引擎、门户、网游服务器等,后端实现中都有涉及。主要原理是基于内网 socket 解决多机多模块之间的数据通讯问题。或者可以简单理解为,将单机的进程间通讯 (IPC) (wiki),扩展到多机通讯,解决可扩展性问题。

Thrift 是由 Facebook 开源的一个 RPC 框架,现在已经挂在 apache.org 下了。主要的几个好处:

  1. 支持非常多语言,包括在 WEB 开发中很常用的 PHP,以及最重要的 C++/Python/Java 等 WEB后端常用语言,当然,还包括很 cool 的 Ruby、Erlang。
  2. 完整的 RPC 框架实现,用脚本生成通讯相关的框架代码,开发者只需要集中精力处理好业务逻辑。比如搭建一个 Hello World Service 只需要几分钟。
  3. 拥有被 Facebook、Last.fm 等不少大规模互联网应用验证过的性能和可用性。

在 PRC 通讯方面,其实已经成熟多年。比如百度内部是自己定制的二进制协议,比如C++下使用较多的 ACE 框架。而 Thrift 在最近两年脱颖而出,也的确和其跨语言、方便的代码生成框架、以及适于目前高速发展的互联网应用而出名。另外许多人拿 Thrift 和 google 推动的 Protocol Buffer 比较,有不少文章可以参考

国内从目前的状况看,Thrift 相关的讨论和应用还不太多,这也是我想写出来推荐的原因。

一方面国内的寡头大型互联网企业多数使用自己的协议,没有动力开源,也没有引入的需求。一方面小型互联网公司虽然不少,但规模较大的还很少,大部分公司的业务量,还不太需要 RPC 这类多模块多机的架构去支撑。

另一方面,Thrift 的确系出名门,它的代码实现的很优秀,逻辑层次清楚,易于定制扩展。框架代码生成方便,节省很多通讯方面的开发和调试时间。

最近和几位同事一起,做了对 Thrift 协议传输方面的性能测试和调优,结果还是不错的,用起来也很方便。后面有机会可以把测试过程,以及遇到的一些问题拿出来分享。

单机启动多个MySQL Server

September 23rd, 2009

有时候我们需要在一台服务器启动多个 MySql Server。有一个方法是使用官方的多server管理工具 mysqld_multi ,适合多server运行时的管理,有专用的配置项方便日常管理维护。或者如果不想用 mysqld_multi,我们看看幕后都做了什么,简单的自己动手配置一下。

这篇来讲讲怎么通过自己配置,启动多个mysqld。

无论是发行版包管理工具安装的,还是自己编译安装的,都会默认读取 my.cnf 文件,位置一般是 /etc/my.cnf 、$MYSQL_HOME/my.cnf 等。发行版包管理工具一般只会安装在固定的位置,不方便同时装两个 mysql server。自己编译的话,也不方便临时再 install 到其他位置和读取另外的 my.cnf 文件。

参考 MySQL 官方手册的内容,使用现有的mysql系列可执行程序,在启动server和client时,指定 --defaults-file 参数,即刻达到效果。

1、编辑一个新的 my.cnf 文件用于新的server

sudo cp /etc/my.cnf /etc/my.2.cnf
sudo vim /etc/my.2.cnf

修改配置,防止和原有配置冲突。主要需要修改的有:

  • 端口(port)、socket 文件路径 (socket)、数据文件路径 (datadir);
  • 如果用到 InnoDB(一般都会用到),则要修改 InnoDB 数据文件路径 (innodb_data_home_dir)、InnoDB 日志文件路径 (innodb_log_group_home_dir);
  • 如果用到replication时,还要修改server的唯一id (server-id)、下载到master的binlog的存放路径 (relay-log)等。其他配置修改,则根据具体情况自行调整。

这里注意 datadir 和 InnoDB 的几个dir,根据情况新建目录,并给 mysql 用户读写权限,否则无法启动正常。另外特别注意,需要确保这些路径不和 product 环境下对应配置的路径有冲突,除非你的确希望这样做,这可能会损坏对应路径下的数据文件。

2、初始化DB

sudo /usr/bin/mysql_install_db --defaults-file=/etc/my.2.cnf
sudo cd $datadir
sudo chown mysql:mysql . -R

这里 $datadir 是新配置的 my.cnf 的 datadir 项所配置的路径。注意需要对文件权限变更为 mysql,否则启动server时会出现文件无权限等错误。

3、启动 mysqld

/usr/bin/mysqld_safe --defaults-file=/etc/my.2.cnf &

查看 $datadir/$host.err 观察是否启动成功。

4、启动 client

/usr/bin/mysql --defaults-file=/etc/my.2.cnf -hlocalhost -uroot

这些命令为了方便使用,可以写到shell脚本里。上述步骤只叙述了标题相关内容,在权限、性能等无关方面没有特别说明。另外注意 --defaults-filedefaults 有个 s,之前我自己写漏了,整个参数被忽律掉,总报错。:-)

linode的VPS主机

September 5th, 2009

这个blog是架在 VPS(wiki)主机商 linode.com那里的。

VPS基于虚拟机,相当于提供了完整的root ssh访问权限,和操作一台普通的Linux服务器没有区别,适合和我一样愿意折腾的同学们。

当初购买价格是360MB内存,$19.99/month。和朋友一起买的,一个人买有点贵。初步使用感觉主要还是内存有些不够用,尤其是平时用主流Web Server习惯了,很少考虑内存问题。但实际观察了一下,一个apache进程启动后占5MB,一旦有一次访问,加载了mod_php之后就跳到二三十MB。apache自己prefork几个进程,就吃掉一大块内存。至于硬盘和流量,暂时还不是瓶颈。

目前有口碑的两家VPS主机商是 linode.comslicehost.com,当时买的时候比较了一下,slicehost单价更贵,于是选了linode。

读《MySQL性能调优与架构设计》

September 5th, 2009

《MySQL性能调优与架构设计》(豆瓣链接)(卓越链接)是阿里巴巴的DBA 简朝阳的书。

前段时间读了一下,综合来说还不错,少有的几次读的很畅快的书之一了。作者对MySQL的各部分知识掌握扎实全面,有不少内容是需要深入了解MySQL运行机制后才有的结论。

书分基础、优化、架构三部分。

基础篇
各种介绍,属于初步了解MySQL的程序员和DBA入门需要掌握的基础知识。

性能优化篇
展开讲了MySQL常遇到的各种锁机制、Server参数调优、存储引擎调优、Query优化等等。对MySQL性能调优相关内容有兴趣的话,读起来会比较有兴趣。这里涉及的知识是有一两年经验的LAMP程序员和DBA应当了解的相对高级一些的技巧和内部实现原理。

架构设计篇
展开讲了Replication复制原理、Cluster、大型系统的DB切分方案、监控。其中Cluster因为之前一直生产环境下可行性不高,我不太熟悉。Replication部分是比较基本需要了解的。数据切分虽然篇幅比较长,但介绍的比较泛,可能因为面向DBA有关,在与应用程序的结合上表述不多,实际应用时还有许多细节需要考虑。监控方面值得参考,结合附录Server status和variables参数含义一起理解,是目前不多的对监控介绍比较全面的资料。

此外,有一个小遗憾是第一版笔误和文字错误较多,以及部分内容因为篇幅所限略显不够严谨,虽然这些都不影响这是一本对MySQL爱好者不错的书。好消息是第一次印刷因为卖的好,基本上已经卖完了。作者在blog上更新了勘误表,部分勘误已经交付第二次印刷,新买到的应该会好不少。

这是一个技术blog

September 5th, 2009

从06年工作之后,就基本暂停了技术blog的写作,更多的是忙于工作上的事。写这个blog是希望积累知识,也是督促自己整理。

主题范围主要是LAMP平台下的各种后端技术(性能、架构、存储等)。