Tokyo Tyrant

 

[文章作者:张宴 本文版本:v1.4 最后修改:2010.06.11 转载请注明原文链接: http://blog.s135.com/read.php/362/]

   Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。

  



   Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。

  Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。这一点,跟新浪的 Memcachedb性质一样。

   相比Memcachedb而言,Tokyo Tyrant具有以下优势:

  1、故障转移:Tokyo Tyrant支持双机互为主辅模式,主辅库均可读写,而Memcachedb目前支持类似MySQL主辅库同步的方式实现读写分离,支持“主服务器可读写、辅助服务器只读”模式。

  

  这里使用 $memcache->addServer 而不是 $memcache->connect 去连接 Tokyo Tyrant 服务器,是因为当 Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的,PHP、C 和 python 的客户端都是如此的算法。Memcache 客户端的 addserver 具有故障转移机制,当 addserver 了2台 Memcached 服务器,而其中1台宕机了,那么 current_server_num 会由原先的2变成1。

  引用 memcached 官方网站和 PHP 手册中的两段话:
引用
http://www.danga.com/memcached/
If a host goes down, the API re-maps that dead host's requests onto the servers that are available.

http://cn.php.net/manual/zh/function.Memcache-addServer.php
Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover.




  2、日志文件体积小:Tokyo Tyrant用于主辅同步的日志文件比较小,大约是数据库文件的1.3倍,而Memcachedb的同步日志文件非常大,如果不定期清理,很容易将磁盘写满。



  3、超大数据量下表现出色:
阅读全文
Tags: linux , php , cache , memcached , memcachedb , dbcached , qdbm , tokyotyrant , ttserver , tokyocabinet
技术大类 » Cache与存储 | 评论(96) | 引用(0) | 阅读(90355)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

解决Nginx  + PHP(FastCGI)遇到的502 Bad Gateway错误[原创]

[ 2008-7-30 07:09 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.0 最后修改:2008.07.30 转载请注明原文链接: http://blog.s135.com/read.php/361/]

  昨日,有朋友问我,他将Web服务器换成Nginx 0.6.31  + PHP 4.4.7(FastCGI)后,有时候访问会出现“502 Bad Gateway”错误,如何解决。

  我让按照以下两个步骤去解决,最后在第2步中将FastCGI的timeout时间增加为300,问题解决:

  PS:比较羡慕迅雷的Web服务器,16G内存。



  1、查看当前的PHP FastCGI进程数是否够用:
netstat -anpo | grep "php-cgi" | wc -l

  如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。



  2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:
......
http
{
......
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
......
}
......

Tags: linux , php , nginx , fastcgi , http
技术大类 » Web服务器 | 评论(100) | 引用(0) | 阅读(98928)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计[原创]

[ 2008-7-27 22:29 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.0 最后修改:2008.07.27 转载请注明原文链接: http://blog.s135.com/post/360/]

  前言:本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构。本文只列出前几章的内容节选,不提供全文内容。

  在DELL PowerEdge 6850服务器(四颗64 位Inter Xeon MP 7110N处理器 / 8GB内存)、RedHat AS4 Linux操作系统、MySQL 5.1.26、MyISAM存储引擎、key_buffer=1024M环境下实测,单表1000万条记录的数据量(这张MySQL表拥有int、datetime、varchar、text等类型的10多个字段,只有主键,无其它索引),用主键(PRIMARY KEY)作为WHERE条件进行SQL查询,速度非常之快,只耗费0.01秒。

  出自俄罗斯的开源全文搜索引擎软件 Sphinx,单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

  基于以上几点,我设计出了这套搜索引擎架构。在生产环境运行了一周,效果非常不错。有时间我会专为配合Sphinx搜索引擎,开发一个逻辑简单、速度快、占用内存低、非表锁的MySQL存储引擎插件,用来代替MyISAM引擎,以解决MyISAM存储引擎在频繁更新操作时的锁表延迟问题。另外,分布式搜索技术上已无任何问题。



   一、搜索引擎架构设计:
   1、搜索引擎架构图:
  

   2、搜索引擎架构设计思路:
   (1)、调用方式最简化:
  尽量方便前端Web工程师,只需要一条简单的SQL语句“SELECT ... FROM myisam_table JOIN sphinx_table ON (sphinx_table.sphinx_id=myisam_table.id) WHERE query='...';”即可实现高效搜索。

   (2)、创建索引、查询速度快:
  ①、Sphinx Search 是由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。
   Sphinx的特征:
  •Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)
  •高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
  •高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
  •支持分布式检索
  •支持基于短语和基于统计的复合结果排序机制
  •支持任意数量的文件字段(数值属性或全文检索属性)
  •支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)
  •支持作为Mysql的存储引擎

  ②、通过国外《High Performance MySQL》专家组的测试可以看出,根据主键进行查询的类似“SELECT ... FROM ... WHERE id = ...”的SQL语句(其中id为PRIMARY KEY),每秒钟能够处理10000次以上的查询,而普通的SELECT查询每秒只能处理几十次到几百次:
  

  ③、Sphinx不负责文本字段的存储。假设将数据库的id、date、title、body字段,用sphinx建立搜索索引。根据关键字、时间、类别、范围等信息查询一下sphinx,sphinx只会将查询结果的ID号等非文本信息告诉我们。要显示title、body等信息,还需要根据此ID号去查询MySQL数据库,或者从Memcachedb等其他的存储中取得。安装SphinxSE作为MySQL的存储引擎,将MySQL与Sphinx结合起来,是一种便捷的方法。
  创建一张Sphinx类型表,将MyISAM表的主键ID和Sphinx表的ID作一个JOIN联合查询。这样,对于MyISAM表来所,只相当于一个WHERE id=...的主键查询,WHERE后的条件都交给Sphinx去处理,可以充分发挥两者的优势,实现高速搜索查询。

   (3)、按服务类型进行分离:
  为了保证数据的一致性,我在配置Sphinx读取索引源的MySQL数据库时,进行了锁表。Sphinx读取索引源的过程会耗费一定时间,由于MyISAM存储引擎的读锁和写锁是互斥的,为了避免写操作被长时间阻塞,导致数据库同步落后跟不上,我将提供“搜索查询服务”的和提供“索引源服务”的MySQL数据库进行了分开。监听3306端口的MySQL提供“搜索查询服务”,监听3406端口的MySQL提供“索引源服务”。

   (4)、“主索引+增量索引”更新方式:
  一般网站的特征:信息发布较为频繁;刚发布完的信息被编辑、修改的可能性大;两天以前的老帖变动性较小。
  基于这个特征,我设计了Sphinx主索引和增量索引。对于前天17:00之前的记录建立主索引,每天凌晨自动重建一次主索引;对于前天17:00之后到当前最新的记录,间隔3分钟自动重建一次增量索引。

   (5)、“Ext3文件系统+tmpfs内存文件系统”相结合:
  为了避免每3分钟重建增量索引导致磁盘IO较重,从而引起系统负载上升,我将主索引文件创建在磁盘,增量索引文件创建在tmpfs内存文件系统“/dev/shm/”内。“/dev/shm/”内的文件全部驻留在内存中,读写速度非常快。但是,重启服务器会导致“/dev/shm/”内的文件丢失,针对这个问题,我会在服务器开机时自动创建“/dev/shm/”内目录结构和Sphinx增量索引。

   (6)、中文分词词库:
  我根据“自整理的中文分词库”+“搜狗拼音输入法细胞词库”+“LibMMSeg高频字库”+... 综合整理成一份中文分词词库,出于某些考虑暂不提供。你可以使用LibMMSeg自带的中文分词词库。
阅读全文
Tags: linux , php , mysql , sphinx , search , fulltext , sql , 全文索引 , 全文检索 , 全文搜索 , 搜索引擎 , bash , sh
技术大类 » 搜索引擎技术 | 评论(126) | 引用(0) | 阅读(121519)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

快捷启动、停止、重启、杀死指定端口MySQL进程的脚本[原创]

[ 2008-7-24 08:37 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.0 最后修改:2008.07.24 转载请注明原文链接: http://blog.s135.com/post/359/]

  写了一个shell脚本,可以在同一台Linux服务器的不同端口,运行多个MySQL服务的情况下,快捷启动、停止、重启、杀死指定端口的MySQL进程。

vi /usr/local/bin/mysql.sh

  输入以下内容(因各服务器的MySQL配置不同,可能需要修改的部分已用红色标注):
#!/bin/sh

mysql_port=$2
mysql_username=" root"
mysql_password=" 123456"

function_start_mysql()
{
    printf "Starting MySQL...\n"
    /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file= /mysql/${mysql_port}/my.cnf 2>&1 > /dev/null &
}

function_stop_mysql()
{
    printf "Stoping MySQL...\n"
     /usr/local/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -h localhost -P ${mysql_port} shutdown
}

function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    function_start_mysql
}

function_kill_mysql()
{
    kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
    kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}

if [ "$1" = "start" ]; then
    function_start_mysql
elif [ "$1" = "stop" ]; then
    function_stop_mysql
elif [ "$1" = "restart" ]; then
    function_restart_mysql
elif [ "$1" = "kill" ]; then
    function_kill_mysql
else
    printf "Usage: mysql.sh {start|stop|restart|kill}\n"
fi


  赋予脚本可执行权限:
chmod +x /usr/local/bin/mysql.sh


  脚本执行方法:
mysql.sh start 3306
mysql.sh stop 3306
mysql.sh restart 3306
mysql.sh kill 3306

Tags: linux , mysql , shell , bash , sh
技术大类 » 数据库技术 | 评论(109) | 引用(0) | 阅读(28301)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

sourceforge.net被GFW挡住后的访问方法

[ 2008-7-23 08:32 | by 张宴 ]
  1、通过镜像站
   http://mirror.optus.net/sourceforge/
   http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/

  2、通过Google代理(虽然是针对手机上网的,但是PC上的浏览器也可以访问)
   http://www.google.com/gwt/n
   http://www.google.com/gwt/n?u=http%3A%2F%2Fsourceforge.net

  3、找国外代理服务器

  4、名称以F开头的某软件(不便公布)
电脑杂谈 | 评论(34) | 引用(0) | 阅读(15766)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

MySQL Memcache_engine的安装与使用[原创]

[ 2008-7-20 13:58 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.1 最后修改:2008.09.09 转载请注明原文链接: http://blog.s135.com/post/357/]

  鉴于国内外还没有人撰写如何安装Memcache_engine的文章,于是,我根据自己的编译安装步骤,写下此文。

  Memcache_engine是一个MySQL 5.1数据库的存储引擎,它能够让用户通过标准的SQL语句(SELECT/UPDATE/INSERTE/DELETE)访问Memcached(还支持新浪的 Memcachedb、 dbcached)中存放的数据。

   限制:
  1、Memcache表必须有主键。
  2、只能使用主键去查询,即只能使用SELECT ... FROM ... WHERE id = ... 方式去查询。
  3、不支持自增ID。

   安装与使用:
  1、编译安装memcache_engine的步骤:
cd /tmp
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.26-rc.tar.gz/from/http://mirror.x10.com/mirror/mysql/
tar zxvf mysql-5.1.26-rc.tar.gz
#安装、配置MySQL的步骤省略,注意不要以静态方式编译安装。

wget http://download.tangent.org/libmemcached-0.23.tar.gz
tar zxvf libmemcached-0.23.tar.gz
cd libmemcached-0.23/
./configure --prefix=/usr/local/memcache_engine
make
make install
cd ../

wget http://xmlsoft.org/sources/libxml2-2.6.32.tar.gz
tar zxvf libxml2-2.6.32.tar.gz
cd libxml2-2.6.32/
./configure --prefix=/usr/local/memcache_engine
make
make install
cd ../

wget http://download.tangent.org/libxmlrow-0.2.tar.gz
tar zxvf libxmlrow-0.2.tar.gz
cd libxmlrow-0.2/
export PKG_CONFIG_PATH=/usr/local/memcache_engine/lib/pkgconfig/
./configure --prefix=/usr/local/memcache_engine
make
make install
cd ../

wget http://download.tangent.org/memcache_engine-0.7.tar.gz
tar zxvf memcache_engine-0.7.tar.gz
cd memcache_engine-0.7/
sed -i "s#uint16_t#uint32_t#g" ./src/ha_memcache.cc
export PKG_CONFIG_PATH=/usr/local/memcache_engine/lib/pkgconfig/
./configure --prefix=/usr/local/memcache_engine --with-mysql= /tmp/mysql-5.1.26-rc
make
make install
cd ../

   注意:红色标记部分为MySQL 5.1.22以上版本的源码路径。
阅读全文
Tags: linux , mysql , cache , memcached , memcache , memcachedb , dbcached , memcache engine
技术大类 » Cache与存储 | 评论(39) | 引用(0) | 阅读(30099)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

MySQL中文全文索引插件 mysqlcft 1.0.0 安装使用文档[原创]

[ 2008-7-1 22:57 | by 张宴 ]
  [文章+程序 作者:张宴 本文版本:v1.0 最后修改:2008.07.01 转载请注明原文链接: http://blog.s135.com/post/356/]

  MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不仅效率差,而且以通配符%和_开头作查询时,使用不到索引,需要全表扫描,对数据库的压力也很大。MySQL针对这一问题提供了一种全文索引解决方案,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索。但是,至今为止,MySQL对中文全文索引无法正确支持。

  中文与西方文字如英文的一个重要区别在于,西方文字以单词为单位,单词与单词之间以空格分隔。而中文以字为单位,词由一个或多个字组成,词与词之间没有空格分隔。当试图在一个含有中文字符的字段中使用全文搜索时,不会得到正确的结果,原因在于中文中没有像英文空格那样对词定界,不能以空格作为分割,对中文词语进行索引。

  引用《 MySQL 5.1参考手册》中的一段话:
引用
12.7. 全文搜索功能( http://dev.mysql.com/doc/refman/5.1/zh/functions.html)
● MySQL支持全文索引和搜索功能。MySQL中的全文索引类型FULLTEXT的索引。FULLTEXT 索引仅可用于 MyISAM 表;他们可以从CHAR、 VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或 CREATE INDEX被添加。对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引, 其速度比把资料输入现有FULLTEXT索引的速度更为快。

● FULLTEXT分析程序会通过寻找某些分隔符来确定单词的起始位置和结束位置,例如' ' (间隔符号)、 , (逗号)以及 . (句号 )。假如单词没有被分隔符分开,(例如在中文里 ), 则 FULLTEXT 分析程序不能确定一个词的起始位置和结束位置。为了能够在这样的语言中向FULLTEXT 索引添加单词或其它编入索引的术语,你必须对它们进行预处理,使其被一些诸如"之类的任意分隔符分隔开。

● 诸如汉语和日语这样的表意语言没有自定界符。因此, FULLTEXT分析程序不能确定在这些或其它的这类语言中词的起始和结束的位置。


  国内已有的MySQL中文全文索引解决方案有两个:一是海量科技的 MySQL5.0.37--LinuxX86-Chinese+,二是hightman开发的 mysql-5.1.11-ft-hightman,两者都是基于中文分词技术,对中文语句进行拆分。但是,两者都有弊端,一是不支持64位操作系统;二是对修改了MySQL源码,只支持某一MySQL版本,不便于跟进新版本;三是词库不能做到很大很全,对于专业性质较强的数据库内容(例如搜索“颐和园路东口”、“清华东路西口”等公交站点,“莱镇香格里”、“碧海云天”等楼盘名称),基于中文分词的全文索引经常搜索不出来任何内容,即使添加分词词库,也不会很全面。

  由于精准全文查询的需要,我借鉴了二元交叉切分算法的思想,用自创的“三字节交叉切分算法”,写出了这款“MySQL中文全文索引插件──mysqlcft 1.0.0”。由于开发时间仓促,难免存在未发现的问题,这将后续的版本中不断完善。对于百万条记录的MySQL表进行全文检索,mysqlcft已经够用。



   Mysqlcft 网址:http://code.google.com/p/mysqlcft/

   Mysqlcft 作者:张宴



   一、MySQL中文全文索引插件mysqlcft的特点:
  1、优点:
  ①、精准度很高:采用自创的“三字节交叉切分算法”,对中文语句进行分割,无中文分词词库,搜索精准度远比中文分词算法高,能达到LIKE '%...%"的准确率。
  ②、查询速度快:查询速度比LIKE '%...%"搜索快3~50倍,文章末尾有测试结果;
  ③、标准插件式:以MySQL 5.1全文索引的标准插件形式开发,不修改MySQL源代码,不影响MySQL的其他功能,可快速跟进MySQL新版本;
  ④、支持版本多:支持所有的MySQL 5.1 Release Candidate版本,即MySQL 5.1.22 RC~最新的MySQL 5.1.25 RC;
  ⑤、支持字符集:支持包括GBK、GB2312、UTF-8、Latin1、BIG5在内的MySQL字符集(其他字符集没有测试过);
  ⑥、系统兼容好:具有i386和x86_64两个版本,支持32位(i386)和64位(x86_64)CPU及Linux系统;
  ⑦、适合分布式:非常适合MySQL Slave分布式系统架构,无词库维护成本,不存在词库同步问题。

  2、缺点:
  ①、mysqlcft中文全文索引只适用于MyISAM表,因为MySQL只支持对MyISAM表建立FULLTEXT索引;
  ②、MySQL不能静态编译安装,否则无法安装mysqlcft插件;
  ③、基于“三字节交叉切分算法”的索引文件会比海量、ft-hightman等基于“中文分词算法”的索引文件稍大,但不是大很多。根据我的测试,mysqlcft全文索引的.MYI索引文件是.MYD数据文件的2~5倍。



   二、mysqlcft的核心思想──“三字节交叉切分算法”

  

  注:本文以0~7数字序号代表“英文”、“数字”和“半个汉字”,以便说明。
  1、按三字节对中文语句进行切分,建立全文索引:
  例如:“全文索引”或“1台x光机”四个字会被交叉分拆为6份,建立反向索引:
  012  123  234  345  456  567

  2、按三字节对搜索的关键字进行切分,在全文索引中找出对应信息:
  例①:搜索关键字“文索”,用数字序号表示就是“2~5”,那么它将被切分成:
  234  345
  这样,就与全文索引对上了。

  例②:搜索关键字“x光机”,用数字序号表示就是“3~7”,那么它将被切分成:
  345  456  567
  这样,也与全文索引对上了。

  例③:搜索关键字“1台 光机”,用数字序号表示就是“0~2”和“4~7”,那么它将被切分成:
  012  456  567
  这样,多关键字搜索也与全文索引对上了。
阅读全文
技术大类 » 搜索引擎技术 | 评论(89) | 引用(0) | 阅读(54719)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

视频:托雷斯绝杀一击,西班牙1-0德国,问鼎2008欧洲杯冠军

[ 2008-6-30 08:16 | by 张宴 ]
  北京时间6月30日凌晨,2008欧洲杯决赛打响,德国战车对阵西班牙斗牛士,第33分钟,哈维直塞,托雷斯首开纪录。以下是托雷斯进球视频。
Flash Player文件
点击打开/折叠播放器
Tags: 欧洲杯 , 决赛 , 2008 , 冠军 , 德国 , 西班牙
生活琐事 | 评论(17) | 引用(0) | 阅读(7810)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

Linux服务器系统监控框架与MSN、E-mail、手机短信报警的实现[原创]

[ 2008-6-25 08:10 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.0 最后修改:2008.06.25 转载请注明原文链接: http://blog.s135.com/read.php/354.htm]

  最近,在我原有的“Linux服务器系统监控程序”基础上,完善了HTTP、TCP、MySQL主动监控与MSN、E-mail、手机短信报警。监控程序以shell和PHP程序编写,以下为主要框架与部分代码:

  一、系统监控接口程序(interface.php)具有的报警方式
  1、MSN实时报警
  ①、监控程序每次检测到故障存在、或者故障恢复,都会发送短消息到管理员的MSN。
  
阅读全文
Tags: linux , tcp , http , shell , php
技术大类 » 其他Unix技术 | 评论(54) | 引用(1) | 阅读(70667)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

2008开源在中国

[ 2008-6-24 08:29 | by 张宴 ]
  虽然没有订阅过全年的《程序员》杂志,但是,买到的这本以“2008开源在中国”为主题的2008年06期《程序员》,还是值得一看的。

   专题布局:
  (1)2008开源在中国
  (2)说不尽的开源——记“开源在中国2008”研讨会
  (3)摸着石头过河——记开源社区huihu.org
  (4)莫等闲,抬望云和月
  (5)从一封信说起——记姜太文博士和他的 XOOPS项目
  (6)比开源更自由的存在—— 哲思自由软件社区专访
  (7) 解密淘宝网的开源架构
  (8)自由软件和新浪网
  (9)项庄舞剑,意在沛公?——评国际软件巨头的开源策略
  (10)大企业如何助力开源
  (11)让漫天繁星在指尖随心闪耀——专访开源专家马越
  (12)开源商业模式介绍
  (13)与开源共成长
  (14)ZK创始人叶明宪的开源进行时
  (15)开源者说——一个开源项目贡献者的自白
  (16)开源离我们有多远——中国开源现状调查
  (17)开源授权协议(License)初探
  (18)一个程序员谈开源  

  架构专栏:
  (1)Web架构师的能力
  Web架构师要在技术和业务之间找到平衡,选择最低成本的技术来实现业务需求,还要适当地为业务发展保留适当的平台空间。  

  (2)炫目的敏捷架构师
  随着敏捷软件开发的理念和方法论逐渐被越来越多的人接受,敏捷架构师在团队中的地位也越来越重要,本文讲述一个敏捷架构师应该具备的一些基本素质。  

  (3)写给Web2.0站长,不仅仅是泼冷水
  看到国外Web2.0站点的火热发展,国内众多Web创业者两眼发红,抄得兴起。然而没有扎实的技术积累和人才储备,要想持续发展几乎是不可能的事情。  

  (4)豆瓣的架构  
  经常有人说web2.0融资困难,商业模式不清楚,可能这是真的。但从技术上看,互联网技术不可能一成不变,本期选登的这两篇文章,可以让我们看到这方面的发展。  
电脑杂谈 | 评论(32) | 引用(0) | 阅读(10781)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

使用Nginx作为Web服务器的国内网站[原创]

[ 2008-6-19 08:30 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.1 最后修改:2008.06.19 转载请注明原文链接: http://blog.s135.com/post/352/]

  Nginx 超越Apache的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中有新浪、网易、腾讯等门户网站,六间房、酷6等视频分享网站,Discuz!、水木社区等知名论坛,豆瓣、YUPOO等新兴Web 2.0网站。

  Nginx 在国内的应用正在不断发展壮大!

   一、使用 Nginx 运行 PHP(FastCGI) 程序的网站:

  1、六间房视频( http://www.6.cn/):nginx/0.6.14 + PHP
[root@new-host ~]# curl --head http://6.cn/reg.php
HTTP/1.0 200 OK
Server: nginx/0.6.14
Date: Wed, 18 Jun 2008 00:58:20 GMT
Content-Type: text/html
Vary: Accept-Encoding
X-Cache: MISS from YZ-W-146
X-Cache-Lookup: MISS from YZ-W-146:80
Via: 1.0 YZ-W-146 (squid/3.0.STABLE1.dev)
Connection: close


  2、Discuz!官方论坛( http://www.discuz.net/):nginx/0.7.2 + PHP/5.2.6
[root@new-host ~]# curl --head http://www.discuz.net/index.php
HTTP/1.1 200 OK
Server: nginx/0.7.2
Date: Wed, 18 Jun 2008 00:57:16 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.6
Set-Cookie: dznet_sid=Ek9XYc; expires=Wed, 25-Jun-2008 00:57:16 GMT; path=/; domain=.discuz.net


  3、互联星空播客[新浪服务器]( http://you.video.vnet.cn/):nginx/0.5.33 + PHP/5.2.5
[root@new-host ~]# curl --head http://you.video.vnet.cn/pg/user/userHead.js.php
HTTP/1.1 200 OK
Server: nginx/0.5.33
Content-Type: text/html; charset=gb2312
X-Powered-By: PHP/5.2.5
Expires: Sun, 13 Jul 2008 05:43:16 GMT
Last-Modified: Fri, 13 Jun 2008 05:43:16GMT
Content-Encoding: gzip
Content-Length: 22403
Date: Wed, 18 Jun 2008 01:09:33 GMT
X-Varnish: 1426517043 1413292132
Age: 415577
Via: 1.1 varnish
Connection: keep-alive

阅读全文
Tags: linux , php , nginx
技术大类 » Web服务器 | 评论(42) | 引用(0) | 阅读(35439)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

Nginx 0.6.31 + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第3版)[原创]

[ 2008-6-9 23:08 | by 张宴 ]
   本文已有最新版本:

   请点击《Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)》




  [文章作者:张宴 本文版本:v3.2 最后修改: 2008.07.16 转载请注明原文链接: http://blog.s135.com/read.php/351.htm]

  前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第3篇文章,也是Nginx 0.6系列版本成为稳定版后的第一篇文章,安装、配置方式与以往略有不同,并增加了一些在生产环境运行中不断修改、调整,总结出的配置上的优化。

  链接:《 2007年9月的第1版》、《 2007年12月的第2版》

  

   Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。

  Nginx 的中文维基: http://wiki.codemongers.com/NginxChs



  在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果, Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍

  根据我的经验,4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。

  而这台 Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。

  在3万并发连接下,访问Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 服务器的PHP程序,仍然速度飞快。下图为Nginx的状态监控页面,显示的活动连接数为28457(关于Nginx的监控页配置,会在本文接下来所给出的Nginx配置文件中写明):

  

  我生产环境下的两台Nginx + PHP5(FastCGI)服务器,跑多个一般复杂的纯PHP动态程序,单台Nginx + PHP5(FastCGI)服务器跑PHP动态程序的处理能力已经超过“ 700次请求/秒”,相当于每天可以承受6000万(700*60*60*24=60480000)的访问量( 更多信息见此),而服务器的系统负载也不算高:

  



  安装步骤:
  (系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为CentOS 5.1,另在RedHat AS4上也安装成功)
阅读全文
Tags: linux , php , mysql , nginx , apache , centos , epoll , fastcgi , xcache , httpd
技术大类 » Web服务器 | 评论(116) | 引用(0) | 阅读(86987)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

北京太阳村的爱心之旅

[ 2008-6-3 23:52 | by 张宴 ]
  上个星期天(2008年6月1日),国际儿童节。我和老婆以及朋友,去北京顺义区赵全营镇板桥的 太阳村,看望了那里的孩子,为他们送去食物和衣物,并认领了 爱心枣树,贡献上自己的一份爱心。这个儿童节,你们不会孤单!

  公交乘车路线:在“东直门外大街(东直门地铁站B出口以东)”乘 916空调车(慢车)至“牛栏山道口”下车, 换乘947在“板桥”站下车,往回走100米到十字路口(途中看到一个写有太阳村的门不是正门,走不通,请继续往回直到十字路口),沿着南北方向马路向北走50米。

   太阳村背景:

  童年本来应该是快乐的,但并不是每个孩子都能拥有快乐的童年。太阳村里就住着这样一群特殊的孩子,他们的父母有的在服刑,有的已经伏法。由于父母犯罪,这些孩子得不到像烈士子女那样的尊重和照顾,也得不到一般孤儿的救助,成为社会上一个特殊的群体。这些孩子曾遭受过身边人百般的歧视和污辱,有的流浪街头,以行乞、偷窃为生;有的挣扎在生死边缘,无依无靠。

  原陕西省监狱管理局一级警督张淑琴女士,在长期的监狱采访与犯罪人员接触过程中,让她发现并开始思索一个问题:假如是英雄或烈士留下的孩子,人们会把敬佩和感激之情转移到英烈子女身上;但对于罪犯的孩子有些人则会把痛恨及厌恶延伸到这些孩子身上,使他们沦为一个不幸的特殊群体。而这些孩子如果得不到妥善安置的话,很大程度上又会影响到父母在狱中的表现。为了让罪犯能安心服刑。张淑琴决定帮助那些因父母入狱而无人照看的孩子。

  从1996年5月起,张淑琴在社会各界的大力支持下,自筹资金,相继在陕西省、河南省新乡市、北京市顺义区、陕西省陇县创建了4所专门救助服刑人员未成年子女的儿童村。在过去的十年中,太阳村救助了近800名特殊的孩子。

   6.1拍下的照片:

  太阳村正门
  
阅读全文
生活琐事 | 评论(24) | 引用(0) | 阅读(13288)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能[原创]

[ 2008-5-31 09:53 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.1 最后修改:2008.06.02 转载请注明出自: http://blog.s135.com]

  TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“ google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发情况下的性能,降低系统负载。

  TCMalloc的实现原理和测试报告请见一篇文章:《 TCMalloc:线程缓存的Malloc》

   为MySQL添加TCMalloc库的安装步骤(Linux环境):

  1、64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
tar zxvf libunwind-0.99-alpha.tar.gz
cd libunwind-0.99-alpha/
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC install


  2、安装google-perftools:
wget http://google-perftools.googlecode.com/files/google-perftools-0.97.tar.gz
tar zxvf google-perftools-0.97.tar.gz
cd google-perftools-0.97/
./configure
make && make install

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig


  3、修改MySQL启动脚本(根据你的MySQL安装位置而定):
vi /usr/local/mysql/bin/mysqld_safe

  在# executing mysqld_safe的下一行,加上:
引用
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

  保存后退出,然后重启MySQL服务器。


  4、使用lsof命令查看tcmalloc是否起效:
/usr/sbin/lsof -n | grep tcmalloc

  如果发现以下信息,说明tcmalloc已经起效:
   mysqld    10847   mysql  mem       REG        8,5  1203756   20484960 /usr/local/lib/libtcmalloc.so.0.0.0  



  注:2008年6月2日,修正了libunwind在x86_64位操作系统下的编译错误,TCMalloc无法加载等问题。

  涉及修改内容:
  1、libunwind的编译参数改为:
  CFLAGS=-fPIC ./configure
  make CFLAGS=-fPIC
  make CFLAGS=-fPIC install

  2、增加:
  echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
  /sbin/ldconfig

  3、修改MySQL加载TCMalloc的语句:
  export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

  感谢网友router。

Tags: linux , mysql , google , tcmalloc
技术大类 » 数据库技术 | 评论(45) | 引用(0) | 阅读(41722)
引用地址:
注意: 该地址仅在今日23:59:59之前有效

利用NetScaler和自行编写的健康检查脚本,完美解决多台MySQL Slave数据库的负载均衡[原创]

[ 2008-5-29 23:21 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.1 最后修改:2008.07.17 转载请注明出自: http://blog.s135.com]

  Citrix NetScaler是一款不错的4-7层硬件负载均衡交换机,市场占有率仅次于F5 BIG-IP,位居第二。NetScaler 8.0是 美国思杰系统有限公司(Citrix Systems, Inc)正式推出的最新版本NetScaler产品系列。

  从我的实际测试来看,NetScaler 8.0在七层负载均衡方面,性能和功能都要比F5 BIG-IP强。

  NetScaler 8.0的负载均衡监控中,可以对MySQL数据库进行健康检查,而F5 BIG-IP目前只支持对Oracle和Microsoft SQL Server数据库的健康检查。

  

  但是,NetScaler 8.0自带的MySQL健康检查脚本(nsmysql.pl)并不完善,它只能检查一条SQL语句执行是否出错,并不能检查MySQL主从结构中的MySQL Slave数据库同步是否正常、表有无损坏、同步延迟是否过大、是否出现错误、非sleeping状态的连程数是否过高等情况。于是,我根据自己的需要,为NetScaler 8.0写了一个MySQL Slave数据库负载均衡健康检查脚本(nsmysql-slave.pl),实现了上述需求。

  有了“nsmysql-slave.pl”做健康检查,利用NetScaler的VIP(虚拟IP),就可以完美实现多台MySQL Slave数据库的负载均衡了。当一台MySQL Slave数据库出现不同步、表损坏、同步延迟过大(本脚本中默认设置的落后MySQL主库600秒视为延迟,可根据具体应用修改)、活动连程数太高(本脚本中默认设置的是大于200视为连程数太高,可根据具体应用修改)等情况,“nsmysql-slave.pl”就会自动将其检查出来,并告知NetScaler,NetScaler会将该数据库标识为宕机,从而不将用户的查询请求传送到这台发生故障的数据库上。故障一旦修复,“nsmysql-slave.pl”会自动告知NetScaler,该数据库已经可以使用。

  “nsmysql-slave.pl”源代码如下:

你可能感兴趣的:(Tokyo Tyrant)