我的原创技术文章,探讨互联网系统架构、编程技术。
分页: 1/8 第一页 1 2 3 4 5 6 7 8 下页 最后页 [ 显示模式: 摘要 | 列表 ]
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.06.17 转载请注明原文链接:http://blog.s135.com/post/415/]

  正为视频、图片存储发愁,一个偶然的机会,获知公司在廊坊机房机架上有一台“300GB*14块硬盘”磁盘整列柜,竟然没人使用。周一申请了一辆公司的车,去廊坊机房将该盘阵拖了回来。

  环境:

  一台“惠普Proliant DL380 G4服务器(2U机架式)”,已安装CentOS 5.3 64位操作系统;
  一台“惠普Modular Smart Array 500G2磁盘阵列柜”,插满14块标称300GB的SCSI硬盘;
  一块“惠普 Smart Array 642阵列卡”,插在“惠普Proliant DL380 G4服务器”;
  一根SCSI连接线,连接“惠普 Smart Array 642阵列卡”和“惠普Modular Smart Array 500G2磁盘阵列柜”。

  点击在新窗口中浏览此图片



  配置步骤:

  1、在“惠普Proliant DL380 G4服务器”PCI插槽中安装一块Smart Array 642阵列卡,用SCSI线连接“惠普MSA 500G2磁盘阵列柜”。

  点击在新窗口中浏览此图片

  2、在以下网址点击右侧“Support”栏目中的“Support matrices”,查看“HP Proliant DL380 G4服务器”支持的“HP SmartStart CD光盘类型”:
  http://www.hp.com/servers/smartstart

  点击在新窗口中浏览此图片

  3、通过以下网址下载 HP SmartStart 8.25 x64 光盘,解压后有一个ISO镜像文件,将它刻录到CD刻录光盘上:
  ftp://ftp.hp.com/pub/softlib2/software1/cd/p1760479716/v51549/smartstart-8.25-0-x64.zip

  4、将SmartStart光盘插入“惠普Proliant DL380 G4服务器”的光驱,选择服务器开机从光盘启动,在光盘引导后的图像界面“Array Configuration Utility”中,会显示所有的磁盘阵列卡,包括“惠普Proliant DL380 G4服务器”自带的阵列卡和“惠普MSA 500G2磁盘阵列柜”的阵列卡。
  (1)、点击选择“MSA 500G2”阵列卡。先选择创建磁盘组(Create Array),14块硬盘全选上;
  (2)、再选择创建逻辑盘(Create Logical Drive)。因为这里插了14块标称300GB的SCSI硬盘(实际容量(300GB / 1.024 / 1.024 / 1.024) * 14 / 1024 ≈ 3.8TB),而“惠普MSA 500G2磁盘阵列柜”的每块逻辑盘最大只能支持2TB的数据容量,所以至少需要创建两块逻辑盘,第一块逻辑盘选择2TB,第二块逻辑盘使用默认值,即剩余大小。每块逻辑盘可选择做RAID 0、RAID 1、RAID 5和RAID 6,缺省配置是RAID 6(可损坏任意两颗硬盘,但性能比RAID 5略低8%~15%)。因为是图形界面,这一部分操作比较简单,就不再详细描述。

  5、使用SmartStart光盘创建完逻辑盘之后,重启“惠普Proliant DL380 G4服务器”。

  6、重启后,输入root帐号密码登入CentOS 5.3 x86_64系统。
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.05.28 转载请注明原文链接:http://blog.s135.com/post/414/]

  “客户端访问”与“服务器端响应”,犹如一场战争。初期,访问量较小,弄几台服务器随便拉起一只队伍,就能抵抗住客户端的进攻。慢慢的,访问量大起来,这时候,就需要讲究排兵布阵、战略战术、多兵种协调作战。于是,开始有了负载均衡服务器、Web服务器、缓存服务器、数据库服务器、存储服务器等多兵种;开始有了系统架构等战略战术。随着新项目和运营需求的越来越多,我们开始了多线作战。慢慢地,我总结了以下一些思考:

  1、“收编绿林队伍”与“自己招兵买马”:

  两者的关系就犹如“使用开源软件、框架”与“自己开发模块、写框架”,如果已有的开源软件、框架、架构能够较好地用于自己的项目,并便于扩展,则优先使用开源软件;如果没有现成的东西,或者已有的开源软件性能不高、扩展性差、学习成本高,则可以取长补短,在项目中打造自己的“队伍”。


  2、适当利用“雇佣军”:

  在多个项目同时进行时,不要认为自己能打赢每一场战斗,而每一场战斗都由自己亲自去打。确实,我相信很多人能够打赢一场场战斗,却只有少数人能够打赢一场战争。前暴雪北方“四大佬”创建的旗舰工作室的倒闭,印证了这样一个事实:一群天才,却没有让一个划时代意义的游戏诞生。旗舰工作室放着捷径不走却事必躬亲,自己做客户端、自己做语聊系统、自己做图像引擎、自己做客服系统,最终自己被自己给拖垮了。

  不要让战线拉得太广,适当利用“雇佣军”,项目中的一些非重要、非核心的组成部分可以购买其他公司的成熟产品与服务,时间、费用、维护成本可能要更低。最近,我工作中的两项服务使用了“雇佣军”:(1)、购买ChinaCache CDN的Flash Media Server点播加速服务,支撑金山游戏视频宣传站点,节省了部署多节点的成本和时间;(2)、购买快网的智能DNS解析服务,来做金山游戏官网动态内容“北京多线、珠海电信、天津网通”三个机房服务器的智能DNS解析服务,节省了收集、整理,将来更新维护IP信息等工作。


  3、打造“高技术兵器”:

  现代战争的特点都拥一个有共同的前提那就是:都不可能离开“高技术兵器”。同样,要想承担高并发访问,而又希望系统架构简单一点、程序开发快捷一点,那么,则需要一款服务器端的“高技术兵器”。Web 2.0网站主要组成部分有内容页和列表页,内容页可以采用key-value形式的Memcached、Squid等开源产品来实现缓存,高并发访问下需要实时更新的列表页缓存,目前还没有合适的开源产品来解决。MySQL等数据库在高并发连接、大数据记录情况下性能低下,实时更新的列表页,成为最主要的瓶颈。我目前正在基于一些开源类库,开发的一款简单关系型数据库,将实现MySQL单表拥有的大部分复杂条件查询功能,并将达到单表千万级以上记录下,Memcached 60%左右的并发查询性能,预计6月6日开发完成进入测试阶段。

  4、精简军队,提高战斗力:

  军队越多,补给、后勤等开支也会越大,同样,服务器越多,维护成本、托管成本、复杂度也越高。所以,服务器不是越多越好,在能够保证容错性、避免单点故障的情况下,如果能用一台高配置服务器来解决的事,不要同两台低配置的服务器来干。

  传统的系统架构只不过围绕负载均衡设备或服务器、Web服务器集群、数据库服务器集群、搜索引擎服务器集群、分布式存储服务器集群、缓存系统服务器集群等等,技术含量并不是特别高,只不过很多人没有生产环境的机会去实践而已。随着内存价格的下降,单台服务器扩充到64G内存的事情不再罕见;Intel将会在下周面向高端服务器领域发布代号为Nehalem-EX的8核XEON处理器。随着硬件性能的不断提高,我预测,将来的系统架构与服务器集群将不再从服务类型上划分,而将按“CPU密集型服务器集群”、“内存密集型服务器集群”、“存储密集型服务器集群”划分。我现在所设计的架构与开发的服务器端程序,也逐渐向后者转移。

  最近,Google的工程师Luiz André Barroso and Urs Hölzle发表了一篇长达120页的论文,提出了一个数据中心就是一台计算机(The Datacenter as a Computer - An Introduction to the Design of Warehouse-Scale Machines )
  [文章作者:张宴 本文版本:v5.4 最后修改:2009.06.26 转载请注明原文链接:http://blog.s135.com/nginx_php_v5/]

  前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第5篇文章。本系列文章作为国内最早详细介绍 Nginx + PHP 安装、配置、使用的资料之一,为推动 Nginx 在国内的发展产生了积极的作用。这是一篇关于Nginx 0.7.x系列版本的文章,安装、配置方式与第4篇文章相差不大,但增加了MySQL安装配置的信息、PHP 5.2.10 的 php-fpm 补丁。Nginx 0.7.x系列版本虽然为开发版,但在很多大型网站的生产环境中已经使用。

  链接:《2007年9月的第1版》、《2007年12月的第2版》、《2008年6月的第3版》、《2008年8月的第4版

  点击在新窗口中浏览此图片

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

  Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括新浪博客新浪播客网易新闻等门户网站频道,六间房56.com等视频分享网站,Discuz!官方论坛水木社区等知名论坛,豆瓣YUPOO相册海内SNS迅雷在线等新兴Web 2.0网站。



  Nginx 的官方中文维基:http://wiki.nginx.org/NginxChs



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

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

  而这台 Nginx 0.7.61 + PHP 5.2.10 (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.7.61 + PHP 5.2.10 (FastCGI) 服务器的PHP程序,仍然速度飞快。下图为Nginx的状态监控页面,显示的活动连接数为28457(关于Nginx的监控页配置,会在本文接下来所给出的Nginx配置文件中写明):

  点击在新窗口中浏览此图片

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

  点击在新窗口中浏览此图片



  下面是用100个并发连接分别去压生产环境中同一负载均衡器VIP下、提供相同服务的两台服务器,一台为Nginx,另一台为Apache,Nginx每秒处理的请求数是Apache的两倍多,Nginx服务器的系统负载、CPU使用率远低于Apache:

  你可以将连接数开到10000~30000,去压Nginx和Apache上的phpinfo.php,这是用浏览器访问Nginx上的phpinfo.php一切正常,而访问Apache服务器的phpinfo.php,则是该页无法显示。4G内存的服务器,即使再优化,Apache也很难在“webbench -c 30000 -t 60 http://xxx.xxx.xxx.xxx/phpinfo.php”的压力情况下正常访问,而调整参数优化后的Nginx可以。

  webbench 下载地址:http://blog.s135.com/post/288/

  注意:webbench 做压力测试时,该软件自身也会消耗CPU和内存资源,为了测试准确,请将 webbench 安装在别的服务器上。

  测试结果:##### Nginx + PHP #####
引用
[root@localhost webbench-1.5]# webbench -c 100 -t 30 http://192.168.1.21/phpinfo.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.1.21/phpinfo.php
100 clients, running 30 sec.

Speed=102450 pages/min, 16490596 bytes/sec.
Requests: 51225 susceed, 0 failed.

top - 14:06:13 up 27 days,  2:25,  2 users,  load average: 14.57, 9.89, 6.51
Tasks: 287 total,   4 running, 283 sleeping,   0 stopped,   0 zombie
Cpu(s): 49.9% us,  6.7% sy,  0.0% ni, 41.4% id,  1.1% wa,  0.1% hi,  0.8% si
Mem:   6230016k total,  2959468k used,  3270548k free,   635992k buffers
Swap:  2031608k total,     3696k used,  2027912k free,  1231444k cached


  测试结果:#####  Apache + PHP #####
引用
[root@localhost webbench-1.5]# webbench -c 100 -t 30 http://192.168.1.27/phpinfo.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.1.27/phpinfo.php
100 clients, running 30 sec.

Speed=42184 pages/min, 31512914 bytes/sec.
Requests: 21092 susceed, 0 failed.

top - 14:06:20 up 27 days,  2:13,  2 users,  load average: 62.15, 26.36, 13.42
Tasks: 318 total,   7 running, 310 sleeping,   0 stopped,   1 zombie
Cpu(s): 80.4% us, 10.6% sy,  0.0% ni,  7.9% id,  0.1% wa,  0.1% hi,  0.9% si
Mem:   6230016k total,  3075948k used,  3154068k free,   379896k buffers
Swap:  2031608k total,    12592k used,  2019016k free,  1117868k cached




  为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。

  处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别:

  假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版宿管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询I/O是最耗时间的操作之一,select和epoll的性能谁的性能更高,同样十分明了。



  安装步骤:
  (系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为CentOS 5.3,另在RedHat AS4上也安装成功)
  除了 Oracle 买了 Sun 这件事之外,还有一件重要的事,就是 Sun 发布了 MySQL 5.4 预览版。根据其 EAStress2004 benchmark 测试,MySQL 5.4 比 MySQL 5.1 快了 59%。有空我下载下来自己做个测试。

  更多内容见:

  《A Quick Look at MySQL 5.4》:http://dev.mysql.com/tech-resources/articles/mysql-54.html

  MySQL 5.4 下载地址:http://dev.mysql.com/downloads/mysql/5.4.html

  [文章作者:张宴 本文版本:v1.0 最后修改:2009.04.21 转载请注明原文链接:http://blog.s135.com/post/411/]

  1、下载Oracle即时客户端程序包 — Basic: 运行 OCI、OCCI 和 JDBC-OCI 应用程序所需的所有文件

  ①、打开以下网址(本文以32位版为例):
  (Linux 32位版)http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
  (Linux 64位版)http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxx86_64soft.html

  ②、下载以下几个文件:
oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm
oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm
oracle-instantclient11.1-sqlplus-11.1.0.7.0-1.i386.rpm


  2、安装Oracle即时客户端程序包
rpm -ivh oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm oracle-instantclient11.1-sqlplus-11.1.0.7.0-1.i386.rpm
echo "/usr/lib/oracle/11.1/client/lib/" > /etc/ld.so.conf.d/oracle_client.conf
/sbin/ldconfig


  3、安装OCI8 PHP扩展(使用PHP自带的OCI8,假设PHP程序安装在/usr/local/webserver/php/)
yum install libaio
wget http://pecl.php.net/get/oci8-1.3.5.tgz
tar zxvf oci8-1.3.5.tgz
cd oci8-1.3.5/
/usr/local/webserver/php/bin/phpize
CFLAGS="-I/usr/include/oracle/11.1/client/"
CXXFLAGS="-I/usr/include/oracle/11.1/client/"
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-oci8=/usr/lib/oracle/11.1/client/
make
make install


  4、修改PHP配置文件(/usr/local/webserver/php/etc/php.ini)
在extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"后增加一行:
extension = "oci8.so"


  5、重启PHP

  6、创建一个phpinfo.php文件(内容如下)并通过Web访问,如果有“oci8”这一项,则表明安装成功。
<?php
phpinfo();
?>

  点击在新窗口中浏览此图片
Tags: , ,

珠海金山软件之行[原创]

[不指定 2009-4-19 23:56 | by 张宴 ]
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.04.19 转载请注明原文链接:http://blog.s135.com/post/410/]

  2009年4月14日(星期二)

  下班后,和同事打的到首都国际机场,乘21:10起飞的中国南方航空CZ3734航班飞往珠海。这也是我第一次坐飞机。

  波音737穿越着宁静的天空,云端望月的景象,罕见而优美。经过的三个小时的飞行,掠过了大半个中国,飞机降落在珠海三灶机场。

  走出飞机,打的前往吉大区的如家快捷酒店,沿途海风扑面,湿气弥漫,与北京的干燥行成鲜明的对比。



  2009年4月15日(星期三)

  上午10点,我们去了珠海金山软件公司,在“万花谷”会议室跟西山居工作室开了个小会,随后参观了三楼的《剑侠世界》研发团队和四楼的《剑侠情缘网络版3》研发团队,向他们请教了100多人协作开发的项目管理经验。

  下午,跟金山网游公司CTO的会议,是我主要关心的议题,以下几项收获也不错:

  1、我所设计的“广州电信机房、天津网通机房、北京电信通多线机房”三个核心IDC的系统架构得以通过,只是做了点小调整,将“广州电信机房”换成了“珠海电信机房”,因为金山享有珠海电信在带宽和线路上的特殊待遇。

  点击在新窗口中浏览此图片


  PS:百度网页搜索前端服务器也分布在三个机房:北京电信机房、北京网通机房、北京长城宽带多线机房。

  全国所有电信用户访问 www.baidu.com 将被解析到以下两个VIP:
  220.181.6.19 (北京市·电信)
  220.181.6.18 (北京市·电信)

  全国所有网通用户访问 www.baidu.com 将被解析到以下两个VIP:
  202.108.22.5 (北京市·网通)
  202.108.22.43 (北京市·网通)

  全国铁通、教育网等其他访问 www.baidu.com 将被解析到以下两个VIP:
  119.75.213.50 (北京市·长城宽带)
  119.75.213.51 (北京市·长城宽带)



  2、获批了20台服务器。搭建我三个IDC的架构平台,硬件资源得以满足,剩下要解决的就是这20台服务器尽快到位的问题了。



  3、允许了将来购买 Adobe 即将推出的 Flash Media Server 4.0 授权,利用 Flash Player 10 和 RTMFP协议(支持P2P)提供 FLV/MP4(H264) 视频流媒体点播服务。

  目前逍遥网《基于开源Flash Server:Red5构建RTMP流媒体播放平台》,采用的是 RTMP 协议,生产环境(剑网3相关视频:http://jx3.xoyo.com/xgxz/video/)平均每个视频播放所消耗的带宽是25KB/秒,100M独享带宽可以支撑500人同时在线观看。将来采用 RTMFP 协议进行 Flash P2P 视频点播服务,将大大地节省带宽。

  RTMFP 是 Real‐Time Media Flow Protocol的缩写,是Adobe推出的一种新的通信协议,这种通信协议可以让 Flash 客户端直接和另外一个Flash 客户端之间进行数据通信,也就是常说的P2P的方式进行通信。

  RTMFP 将会大大地减少音视频直播、点播、多人在线游戏等应用的网络带宽的消耗,减轻服务器的负担。因为很多数据都是客户端之间直接传输了,无须再经过服务器中转了。RTMFP由于使用了UDP网络协议,所以相对之前的TCP协议在数据传输效率上也会大大提高,这种优势在音视频数据传输方面是非常明显的。

  下面的示意图表现了RTMFP和RTMP的不同之处:
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.04.13 转载请注明原文链接:http://blog.s135.com/post/409/]

  上周五,我们基于开源Flash Server:Red5(http://osflash.org/red5)的Flash流媒体服务平台上线,内容涉及视频上传、视频分发、调用接口、Flash播放器等。

  一、Flash RTMP流媒体播放演示(播放时进度条可以自由拖动):

  

  生产环境更多 Flash RTMP 流媒体视频演示:http://jx3.xoyo.com/xgxz/video/



  二、安装步骤简要说明:
  ①、安装JDK
  打开http://java.sun.com/javase/downloads/,下载最新的Java SE Development Kit (JDK),安装在/usr/local/jdk/下。
chmod +x jdk-6u13-linux-i586.bin
./jdk-6u13-linux-i586.bin


  ②、安装Red5
  打开http://osflash.org/red5/070final,下载red5-0.7.0.tar.gz,解压缩后执行./red5.sh,然后访问http://yourdomain:5080/,有演示。



  三、服务器带宽消耗比较:
  ①、客户端 1.5M ADSL 环境,HTTP 方式播放单个视频,服务器所消耗的带宽:
[root@localhost ~]# ./net.sh eth0 1
IN: 3318 Byte/s OUT: 259984 Byte/s
IN: 3486 Byte/s OUT: 249470 Byte/s
IN: 3332 Byte/s OUT: 259984 Byte/s
IN: 3090 Byte/s OUT: 252528 Byte/s
IN: 3000 Byte/s OUT: 252474 Byte/s
IN: 3000 Byte/s OUT: 253976 Byte/s
IN: 2940 Byte/s OUT: 255478 Byte/s
IN: 3004 Byte/s OUT: 252474 Byte/s
IN: 3452 Byte/s OUT: 252528 Byte/s
IN: 3270 Byte/s OUT: 260038 Byte/s
IN: 3586 Byte/s OUT: 252474 Byte/s


  ②、客户端 1.5M ADSL 环境,RTMP 流媒体方式播放单个视频,服务器所消耗的带宽:
[root@localhost ~]# ./net.sh eth0 1
IN: 3900 Byte/s OUT: 27878 Byte/s
IN: 4200 Byte/s OUT: 30868 Byte/s
IN: 4380 Byte/s OUT: 27801 Byte/s
IN: 4080 Byte/s OUT: 29965 Byte/s
IN: 4080 Byte/s OUT: 26450 Byte/s
IN: 3960 Byte/s OUT: 27143 Byte/s
IN: 3000 Byte/s OUT: 10061 Byte/s
IN: 3960 Byte/s OUT: 16166 Byte/s
IN: 3660 Byte/s OUT: 26480 Byte/s
IN: 4020 Byte/s OUT: 23127 Byte/s


  HTTP 方式播放,如果服务器端不限速,客户端的带宽越大,服务器消耗的带宽也越大,但限速又会影响用户体验;
  RTMP 流媒体方式播放,只要客户端达到最低带宽要求,不管客户端的带宽如何,服务器消耗的带宽都一样。

  如果播放10M以内大小的视频,HTTP 能够在较短的时间内下载完视频,能够降低并发观看用户数;
  如果播放10M以上大小的视频,RTMP 要比 HTTP 方式节省不少带宽。

  RTMP 播放时进度条可以自由拖动,虽然Lighttpd和Nginx目前也可以使用somevideo.flv?start=xxx的方式从指定位置下载视频,但还是不如 RTMP 灵活。
Tags: , ,
  以下是 Google 检索系统的架构师、Google Mapreduce 的发明者 Jeff Dean 在 WSDM 2009 上的主题演讲:《Challenges in Building Large-Scale Information Retrieval Systems》。在这个主题演讲中,Jeff Dean 讲述了 Google 在10年中,Google 检索系统的演变和发展。

  英文原文:http://research.google.com/people/jeff/WSDM09-keynote.pdf
  演讲视频:http://videolectures.net/wsdm09_dean_cblirs/

  中文译文(由银杏泰克有限公司郝培强翻译):
Tags:
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.03.31 转载请注明原文链接:http://blog.s135.com/post/406/]

yum install openldap openldap-devel nss_ldap openldap-clients openldap-servers

cd php-5.2.8/
./configure 省略参数 --with-ldap --with-ldap-sasl
make ZEND_EXTRA_LIBS='-liconv'
make install
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.03.22 转载请注明原文链接:http://blog.s135.com/fetion_api/]

  飞信是由中国移动通信集团公司推出的一款集商务应用和娱乐功能为一体的,基于手机应用以及与Internet深度互通的即时通讯产品,可免费给好友发送短信。

  1、下载中国移动飞信PC客户端软件(http://www.fetion.com.cn/downloads/pc.aspx),并注册开通飞信。注册成为飞信用户,下载飞信PC客户端、使用PC客户端基本功能,不收取费用。
  2、通过PC客户端,邀请并添加免费短信接收方的手机号码(仅限中国移动)到您的飞信好友,该手机号需要通过通过PC客户端、或回复短信接受您的邀请;
  3、通过 http://sms.api.bz/ 提供的 API 接口,即可免费给飞信好友或给你自己的手机发短信。利用本API接口可进行日程提醒、服务器监控、报警、故障通知或短信自动控制等功能。



  飞信免费发短信API接口在线演示页面:

  http://sms.api.bz/

  https://sms.api.bz/ (新增HTTPS加密接口,采用 EssentialSSL CA 颁发的可信任SSL证书)



  飞信免费发短信API接口调用方式(通过HTTP访问以下网址、支持GET和POST):
http://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&password=您的移动飞信登录密码&sendto=接收短信的飞信好友手机号(也可以是你自己的手机号)&message=短信内容

  注:短信内容最大长度为180个汉字,超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。



  2009年5月28日新增:飞信免费发短信API接口调用方式(通过HTTPS加密隧道访问以下网址、支持GET和POST,进一步保证您的密码安全):
https://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&password=您的移动飞信登录密码&sendto=接收短信的飞信好友手机号(也可以是你自己的手机号)&message=短信内容

  注:短信内容最大长度为180个汉字,超过180个汉字不发送。返回的信息为UTF-8编码的中文文本信息。

  点击在新窗口中浏览此图片



  例1:在Linux命令行下通过curl命令给自己的手机号(假设为13800138000)发送短信(HTTP GET 方式)
curl "http://sms.api.bz/fetion.php?username=13800138000&password=123456&sendto=13800138000&message=短信内容"


  例2:在PHP5中通过file_get_contents函数发送短信(HTTP GET 方式)
  [文章+部分代码 作者:张宴 本文版本:v1.0 最后修改:2009.03.09 转载请注明原文链接:http://blog.s135.com/ajaxcdr/]

  最近的一个项目中,需要通过 JavaScript 提交表单数据到另一个域名下的PHP接口(因为数据较大,需要HTTP POST方式提交),并获取PHP接口的返回值,在页面无刷新、无跳转的情况下,更新div标签内的内容。

  浏览器出于安全考虑,是不允许JavaScript代码进行跨域操作。JavaScript 和 AJAX 跨域访问分为两大类,一是本域和子域的交互,二是本域和其他域的交互。

  一、本域和子域的交互:www.s135.com 和 blog.s135.com
  二、本域和其他域的交互:blog.s135.com 和 api.bz

  本域和子域的交互,可以通过iframe设置两个域名document.domain = "s135.com",实现统一s135.com域下的跨域访问。

  本域和其他域的交互,可以通过iframe、代理、JS创建动态脚本等几种方法来实现,这里有篇文章对几种方法作了简要的介绍

  iframe、JS创建动态脚本这两种方法,需要开发者能控制两个域,两端都要编写相应的代码,非常麻烦。在本域服务器上用PHP写个代理中转程序,让本域PHP程序去读取远程其他域的数据再返回给自己,是常用的方法。但是,在本域“前端是CDN或Squid缓存服务器,后端才是PHP应用程序服务器”的系统架构下,穿透CDN或Squid去访问不能被缓存的PHP代理中转程序,效率是很低的。



  国外有人尝试用 Flash 做 JavaScript 和 AJAX 跨域访问中转,无疑是一个好方法。JavaScript 将数据提交给本域下的 Flash,通过 Flash 中转去访问其他域的接口,条件只需要其他域的根目录下有一个crossdomain.xml文件,文件中设置允许所有域名或允许本域访问即可。很多网站的API域名都提供了crossdomain.xml文件。

  例如:
  1、新浪博客的crossdomain.xml文件(http://blog.sina.com.cn/crossdomain.xml)设置了允许所有域名访问;
  2、饭否API的crossdomain.xml文件(http://api.fanfou.com/crossdomain.xml)设置了允许所有域名访问;
  3、校内网API的crossdomain.xml文件(http://api.xiaonei.com/crossdomain.xml)设置了允许所有域名访问;
  4、优酷网的crossdomain.xml文件(http://www.youku.com/crossdomain.xml)设置了允许所有域名访问;
  5、土豆网的crossdomain.xml文件(http://www.tudou.com/crossdomain.xml)设置了允许所有域名访问;

  6、逍遥视频的crossdomain.xml文件(http://v.xoyo.com/crossdomain.xml)设置了只允许*.xoyo.com域名访问;
  7、网易的crossdomain.xml文件(http://www.163.com/crossdomain.xml)设置了只允许tech.163.com、sports.163.com等几个域名访问。



  本人在“Cross-domain AJAX using Flash”的基础上,增加了对表单进行智能处理的功能,封装了一个JavaScript包:AJAXCDR。通过 AJAXCDR,即可轻松地解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求,支持IE、Firefox、谷歌Chrome等多种浏览器。

  AJAXCDR 拥有两个文件:ajaxcdr.js 和 ajaxcdr.swf,AJAXCDR 拥有一个 JavaScript 函数 AjaxCrossDomainRequest() 和一个全局变量 AjaxCrossDomainResponse。

  一、AJAXCDR 下载:

网易的开源软件镜像站点

[不指定 2009-2-23 23:54 | by 张宴 ]
  网易开通了一个开源软件的镜像站点,网址为:

  http://mirrors.163.com/

  提供的镜像有:

  1、Linux及BSD发行版镜像:FreeBSD、OpenBSD、RedHat、archlinux、centos、debian、fedora、gentoo、trixbox、ubuntu等。

  2、开源软件镜像:eclipse可扩展开发平台、防火墙、openfiler网络存储管理工具。

  该镜像目前只有一台杭州电信的服务器,网通用户访问可能会比较慢。



  如果您安装 CentOS 5.2 系统的服务器位于电信机房,您可以修改/etc/yum.repos.d/CentOS-Base.repo文件,将它的yum源更改成网易的镜像,代替国外的镜像,以便获取更快的下载速度。

  您可以按照以下步骤从 blog.s135.com 下载修改后的 CentOS-Base.repo 文件到您的服务器。

cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
wget http://blog.s135.com/soft/linux/centos/5.2/CentOS-Base.repo



  附:修改后的 CentOS-Base.repo 文件内容如下:
Tags: , , ,
  [文章/程序 作者:张宴 本文版本:v1.2 最后修改:2009.04.27 转载请注明原文链接:http://blog.s135.com/phpcws_v100/]

  名称:PHPCWS(PHP中文分词扩展)
  协议:New BSD License
  作者:张宴
  网址:http://code.google.com/p/phpcws/
  SVN:http://code.google.com/p/phpcws/source/browse/#svn/trunk/phpcws

  一、PHPCWS 简介

  1、什么是 PHPCWS ?
  PHPCWS 是一款开源的PHP中文分词扩展,目前仅支持Linux/Unix系统。

  PHPCWS 先使用“ICTCLAS 3.0 共享版中文分词算法”的API进行初次分词处理,再使用自行编写的“逆向最大匹配算法”对分词和进行词语合并处理,并增加标点符号过滤功能,得出分词结果。

  ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)是中国科学院计算技术研究所在多年研究工作积累的基础上,基于多层隐马模型研制出的汉语词法分析系统,主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。ICTCLAS经过五年精心打造,内核升级6次,目前已经升级到了ICTCLAS3.0,分词精度98.45%,各种词典数据压缩后不到3M。ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名,是当前世界上最好的汉语词法分析器。

  ICTCLAS 3.0 商业版是收费的,而免费提供的 ICTCLAS 3.0 共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。所以本人对ICTCLAS分词后的结果,再采用逆向最大匹配算法,根据自己补充的一个9万条词语的自定义词库(与ICTCLAS词库中的词语不重复),对ICTCLAS分词结果进行合并处理,输出最终分词结果。

  由于 ICTCLAS 3.0 共享版只支持GBK编码,因此,如果是UTF-8编码的字符串,可以先用PHP的iconv函数转换成GBK编码,再用phpcws_split函数进行分词处理,最后转换回UTF-8编码。

  2、PHPCWS 中文分词在线演示

  演示网址:http://blog.s135.com/demo/phpcws/

  3、PHPCWS 分词速度及用途

  初次使用时,Apache 或 php-cgi(FastCGI) 进程,需要加载一次词库到内存中,需要0.0X秒。58字节的一句话——“2009年2月13日,我编写了一款PHP中文分词扩展:PHPCWS 1.0.0。”,分词速度只需0.0003秒。

  PHPCWS 属于《亿级数据的高并发通用搜索引擎架构设计》的一部分,用作“搜索查询接口”的关键字分词处理。在此架构中,Sphinx索引引擎对于CJK(中日韩)语言支持一元切分,假设【反恐行动是国产主视角射击网络游戏】这段文字,Sphinx会将其切成【反 恐 行 动 是 国 产 主 视 角 射 击 网 络 游 戏】,然后对每个字建立反向索引。如果用这句话中包含的字组成一个不存在的词语,例如【恐动】,也会被搜索到,所以搜索时,需要加引号,例如搜索【"反恐行动"】,就能完全匹配连在一起的四个字,不连续的【"恐动"】就不会被搜索到。但是,这样还有一个问题,搜索【"反恐行动游戏"】或【"国产网络游戏"】就会搜索不到。所以,我在搜索层写了个PHP中文分词扩展,搜索“反恐行动游戏”、“国产网络游戏”,会被PHPCWS中文分词函数分别切分为“反恐行动 游戏”、“国产 网络游戏”,这时候,用PHP函数给以空格分隔的词语加上引号,去搜索【"反恐行动" "游戏"】或【"国产" "网络游戏"】,就能搜索到这条记录了。由于PHPCWS位于搜索层,中文分词词库发生增、删、改,只需平滑重启一次Web服务器或php-cgi进程即可,无需重建搜索索引。

  根据上述情况,对于那些采用二元交叉切分的搜索引擎,PHPCWS用在前端搜索层对用户输入的搜索关键字、短语进行分词处理,同样适合。PHPCWS开发的目的正在于此,对于短句、小文本中文分词切分,速度非常之快。

  4、自定义词库

  自定义词库名称为userdict.tch,格式为 Tokyo Cabinet DBM 的 Abstract key-value 内存哈希数据库(key为GBK编码的词语名词,value为词频。目前词频均填1,暂时用不上)。自定义词库的修改在安装步骤中会详细介绍。



  二、PHPCWS 1.0.0 安装步骤
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.01.21 转载请注明原文链接:http://blog.s135.com/post/394/]

  key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。如果辅以Real-Time Search Engine(实时搜索引擎)进行复杂条件检索、全文检索,就可以替代并发性能较低的MySQL等关系型数据库,达到高并发、高性能,节省几十倍服务器数量的目的。以MemcacheDB、Tokyo Tyrant为代表的key-value分布式存储,在上万并发连接下,轻松地完成高速查询。而MySQL,在几百个并发连接下,就基本上崩溃了。

  虽然key-value分布式存储具有极高的性能,但是只能做类似于MySQL的SELECT * FROM table WHERE id = 123;简单主键查询。

  “搜索索引引擎+key-value分布式存储”能够实现高并发的复杂条件查询、全文检索与数据显示。但是,由于索引更新需要时间,目前还不能实现完全意义上的Real-Time Search(实时搜索),只能称之为Near Real-Time Search(准实时搜索)。“搜索索引引擎+key-value分布式存储”除了做全文检索外,还可以在允许的索引延迟范围内,取代MySQL进行复杂条件查询。

  我的文章《亿级数据的高并发通用搜索引擎架构设计》的程序编码已经完成,第一轮测试昨天已经结束,能够在高并发情况下实现1分钟内索引更新,属于“Near Real-Time Search Engine(准实时搜索引擎)+key-value分布式存储”应用。其中,索引引擎采用Sphinx,存储采用key-value分布式数据库Tokyo Tyrant

  以下是常见的key-value分布式存储系统:

  

  其中,以下几款值得关注:

  1、Hypertable:它是搜索引擎公司Zvents根据Google的9位研究人员在2006年发表的一篇论文《Bigtable:结构化数据的分布存储系统》开发的一款开源分布式数据储存系统。Hypertable是按照1000节点比例设计,以 C++撰写,可架在 HDFS 和 KFS 上。尽管还在初期阶段,但已有不错的效能:写入 28M 列的资料,各节点写入速率可达7MB/s,读取速率可达 1M cells/s。Hypertable目前一直没有太多高负载和大存储的应用实例,但是最近,Hypertable项目得到了百度的赞助支持,相信其会有更好的发展。

  点击在新窗口中浏览此图片



  2、Tokyo Tyrant:它是日本最大的SNS社交网站mixi.jp开发的 Tokyo Cabinet key-value数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。Tokyo Tyrant 具有故障转移、日志文件体积小、大数据量下表现出色等优势,详见:http://blog.s135.com/post/362.htm

  Tokyo Cabinet 2009年1月18日发布的新版本(Version 1.4.0)已经实现 Table Database,将key-value数据库又扩展了一步,有了MySQL等关系型数据库的表和字段的概念,相信不久的将来,Tokyo Tyrant 也将支持这一功能。值得期待。

  点击在新窗口中浏览此图片
  [文章作者:张宴 本文版本:v1.0 最后修改:2009.01.19 转载请注明原文链接:http://blog.s135.com/post/393/]

  magent是一款开源的Memcached代理服务器软件,其项目网址为:

  http://code.google.com/p/memagent/

  一、安装步骤:
  1、编译安装libevent:
wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../


  2、编译安装Memcached:
wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --with-libevent=/usr
make && make install
cd ../


  3、编译安装magent:
mkdir magent
cd magent/
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
tar zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp magent /usr/bin/magent
cd ../




  二、使用实例:
memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213

  1、分别在11211、11212、11213端口启动3个Memcached进程,在12000端口开启magent代理程序;
  2、11211、11212端口为主Memcached,11213端口为备份Memcached;
  3、连接上12000的magent,set key1和set key2,根据哈希算法,key1被写入11212和11213端口的Memcached,key2被写入11212和11213端口的Memcached;
  4、当11211、11212端口的Memcached死掉,连接到12000端口的magent取数据,数据会从11213端口的Memcached取出;
  5、当11211、11212端口的Memcached重启复活,连接到12000端口,magent会从11211或11212端口的Memcached取数据,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数据(此问题尚待改进)。
分页: 1/8 第一页 1 2 3 4 5 6 7 8 下页 最后页 [ 显示模式: 摘要 | 列表 ]