June 20, 2010
闲谈 Web 图片服务器
"\u003cp\u003e现在很多中小网站(尤其是 Web 2.0 站点) 都允许用户上传图片,如果前期没有很好的规划,那么随着图片文件的增多,无论是管理还是性能上都带来很多问题。就自己的一点理解,抛砖引玉,以期能引出更具价值的信息。\u003c/p\u003e\n\u003ch4 id=\"事关图片的存储\"\u003e事关图片的存储\u003c/h4\u003e\n\u003cp\u003e把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很;如果有能力自己开发单独存储图片的文件系统,那么也不用接着往下看了。\u003c/p\u003e\n\u003cp\u003e如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能力。是 7200 转的还是 15000 转的,实际表现差别就很大。是选择 ReiserFS 还是 Ext3 ,怎么也要测试一下吧? 创建文件系统的时候 Inode 问题也要加以考虑,选择合适大小的 inode size ,在空间和速度上做取舍,同时防患于未然,注意单个文件系统下文件个数别达到极限。\u003c/p\u003e\n\u003ch4 id=\"独立独立的服务器\"\u003e独立,独立的服务器\u003c/h4\u003e\n\u003cp\u003e无论从管理上,还是从性能上看,只要有可能,尽量部署独立的图片服务器。这几乎成为常识了(不过在我做过面向 Web 的项目之前就这个问题也被人笑话过)。具备独立的图片服务器或者服务器集群后,在 Web 服务器 …\u003c/p\u003e"
June 20, 2010
小规模低性能低流量网站设计原则
"\u003cp\u003e到处都是什么大规模啊,高流量啊,高性能之类的网站架构设计,这类文章一是满足人们好奇心,但看过之后也就看过了,实际收益可能并不大;另外一个副作用是容易让人心潮澎湃,没学走先学跑,在很多条件仍不具备的情况下,\u003cstrong\u003e过度设计、过度扩展\u003c/strong\u003e(高德纳大爷也说过,”过早优化是万恶之源”),所以,这里反弹琵琶,讨论一下\u003cstrong\u003e小规模\u003c/strong\u003e、\u003cstrong\u003e低性能\u003c/strong\u003e、\u003cstrong\u003e低流量\u003c/strong\u003e的网站该如何搞法。\u003c/p\u003e\n\u003cp\u003e如果站点起步阶段可能就是一台机器(或是一台虚拟机,比如 \u003ca href=\"http://jobsdigg.com/\"\u003eJobsDigg.com\u003c/a\u003e ),这个时候,去关注什么数据拆分啊,负载均衡啊,都是没影子的事情。很多大站点的经验绝不能照搬,辩证的参考才是硬道理。\u003c/p\u003e\n\u003ch4 id=\"拥抱熟知的技术\"\u003e拥抱熟知的技术\u003c/h4\u003e\n\u003cp\u003e动手构建站点的时候,不要到处去问别人该用什么,什么熟悉用什么,如果用自己不擅长的技术手段来写网站,等你写完,黄花菜可能都凉了。所以,有现成的软件组件可用,就不要自己重新发明轮子。人家说 Python 牛,但自己只懂 PHP ,那就 PHP 好了,如果熟悉 .net ?,那也不错。用烂技术不是丢人的事情,把好技术用烂才丢人。\u003c/p\u003e\n\u003ch4 id=\"架构层次清晰化\"\u003e架构层次清晰化\u003c/h4\u003e\n\u003cp\u003e起步的阶段应该清楚的确定下来架构的层次。如果都搅和在一起,业务一旦扩增开来,如果原有的一堆东西拆不开就是 …\u003c/p\u003e"
June 17, 2010
lighttpd配置DiscuzX伪静态规则详细图文教程
"\u003cp\u003eVPS下lighttpd配置DiscuzX伪静态规则\u003c/p\u003e\n\u003cp\u003e第一步:进入Kloxo VPS控制面板点击域名选项.\n第二步:进入域名选项后,选中你所要配置lighttpd的DiscuzX伪静态规则的域名, 这里所需要配置的域名为找iPad论坛 \u003ca href=\"http://www.cn0393.com\"\u003ewww.cn0393.com\u003c/a\u003e , 点击它,进入站点选项列表.\n第三步:点击lighttpd地址重写规则按纽,进入lighttpd配置界面.\n第四步:把由找ipad论坛提供的lighttpd的DiscuzX伪静态规则文件粘贴进空白框中.\n第五步:然后点击Update按纽,应用并使lighttpd生效.\n 注:lighttpd会自动重启可以不用像IIS那样需要手工重启。\n第六步:进入DiscuzX管理中心,点击–》全局–》优化设置–》URL静态化\n 把箭头所指的勾全选中–》点提交\n最后一步,就是更新一下缓存就OK了,超简单。哥你懂的,就不截图了。自已看效果吧!\u003c/p\u003e"
June 11, 2010
php 静态类和方法
"\u003cp\u003e\u003ccode\u003e\u0026lt;?php\u0026lt;br /\u0026gt; /*\u0026lt;br /\u0026gt; //静态属性 或静态方法不需要所在类被实例化就可以使用\u0026lt;br /\u0026gt; //使用方法:类名::静态方法名(静态属性名)\u0026lt;br /\u0026gt; //例子:static.php\u0026lt;br /\u0026gt; */\u0026lt;br /\u0026gt; class Math\u0026lt;br /\u0026gt; {\u0026lt;br /\u0026gt; public static $PI=3.14; //定义静态属性\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e//public $PI=3.14; //静态方法不能调用非静态的属性\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e`//定义一个静态方法,求两个数中的最大值\u003c/p\u003e\u003c/p\u003e\n\u003cp\u003epublic static function getMax($num1,$num2){ //static 关键字\u003c/p\u003e\n\u003cp\u003ereturn $num1 \u003e $num2 ? $num1 : $num2;\u003cbr /\u003e\n}\u003c/p\u003e\n\u003cp\u003e// 定义一个静态方法,求圆面积\u003c/p\u003e\n\u003cp\u003epublic static function getCircleArea($radius){\u003cbr /\u003e\n//return Math::$PI * $radius * $radius;//也行\u003c/p\u003e\n\u003cp\u003ereturn …\u003c/p\u003e\u003c/p\u003e"
June 11, 2010
PHP生成静态页面类
"\u003cp\u003eclass Shtml\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003evar $Templet;\u003c/p\u003e\n\u003cp\u003evar $DataSource;\u003c/p\u003e\n\u003cp\u003evar $Dir;\u003c/p\u003e\n\u003cp\u003evar $fileName;\u003c/p\u003e\n\u003cp\u003evar $mod;\u003c/p\u003e\n\u003cp\u003evar $handle;\u003c/p\u003e\n\u003cp\u003efunction Shtml($fileName=””)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;fileName=$fileName;\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;mod=”wb”;\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;handle=false;\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;Templet = “”;\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;DataSource = array();\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;Dir = “”;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e/// \u0026lt;描述\u0026gt;\u003c/p\u003e\n\u003cp\u003e/// 绑定数据源,参数为一数组。\u003c/p\u003e\n\u003cp\u003e///\u003c/p\u003e\n\u003cp\u003efunction BindData($arr)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;DataSource = $arr;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e/// \u0026lt;描述\u0026gt;\u003c/p\u003e\n\u003cp\u003e/// 设置文件存放路径。\u003c/p\u003e\n\u003cp\u003e///\u003c/p\u003e\n\u003cp\u003efunction SetDir($dir)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003e$this-\u0026gt;Dir = $dir;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003efunction SetFileName($fileName)\u003c/p\u003e\n\u003cp\u003e{ …\u003c/p\u003e"
June 11, 2010
php设计模式介绍之注册模式
"\u003cp\u003e\u003cstrong\u003e《PHP 设计模式介绍》第五章 注册模式\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我们通常认为避免使用全局变量是一种好的选择,因此,对象经常被作为参数从一段代码传递到另一段。但是传递实例的一个问题就是对象有时候不知道将要 传递给谁——?经过一个函数后才被传递到真正需要这个对象的函数。\u003c/p\u003e\n\u003cp\u003e为了编写,阅读,修改代码的方便,最好能够减少不同对象的数量,并且能够将大量广泛使用的对象统一表示为一个单一,常用的对象。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e问题\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003e你如何通过单一的全局的对象来获取对其它对象的引用?\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e解决方案\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003e“注册模式”就像“对象的电话簿”——储存并且能够取回对对象引用的登记簿。(注:PHP中的“联合数组”也起到了类似“电话簿”的功能。事实上, “注册模式”就是围绕PHP中强大的数组完成的。)“注册模式”的一些特性经常被包含在“单一模式”中(参见第四章),使得“注册模式”成为你整个应用信 息的决定性来源。\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e注释:“注册模式”类主要参考了Martin Fowlerdescribes用java语言实现的Patterns of Enterprise Application Architecture(企业应用程序体系结构模型)。Marcus Baker谢了一篇详细 …\u003c/em\u003e\u003c/p\u003e"
June 7, 2010
FreeBSD下用mrtg监控本机流量、内存、cpu使用率、整网流量
"\u003cp\u003e经常看到说mrtg的,说论坛里面的资料不对,其实不是不对,是有些说的不详细而已,我刚开始作的时候也是费了不少时间的,整理一下,发到这里吧,希望能 为后来的兄弟们省下时间\n前言:我实验的机器是FreeBSD4.10,其他版本的应该也一样,其他unix like系统估计也是可以的,因为我只用过FreeBSD,不敢 肯定。另外我这篇文章的前提是你的机器上已经安装了apache,并能正常使用,如果没有请参考网上其他文 章安装,本文就不再赘述。\u003c/p\u003e\n\u003cp\u003e一:先介绍如何用mrtg来监控本机的流量\n1:安装 snmp\u003c/p\u003e\n\u003cp\u003ecd /usr/ports/net-mgmt/p5-SNMP(好像没有这个目录的,可以用路径:/usr/ports/net-mgmt/net-snmp/”这)\nmake install clean\n当中会叫你填写你的email、操作系统等等,直接回车即可。\u003c/p\u003e\n\u003cp\u003e可以用以下命令启动snmp,/usr/local/etc/rc.d/snmpd.sh start\u003c/p\u003e\n\u003cp\u003e2:安装 mrtg\u003c/p\u003e\n\u003cp\u003ecd /usr/ports/net-mgmt/mrtg\nmake install clean\u003c/p\u003e\n\u003cp\u003e3:配置 index.cfg …\u003c/p\u003e"
June 5, 2010
Web网游服务器分布式架构设计
"\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/06/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%9B%86%E7%BE%A4%E5%88%86%E5%B8%83%E5%BC%8F%E6%9E%B6%E6%9E%84.png\"\u003e\u003cimg src=\"http://blogx.haohtml.com/wp-content/uploads/2010/06/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%9B%86%E7%BE%A4%E5%88%86%E5%B8%83%E5%BC%8F%E6%9E%B6%E6%9E%84.png\" alt=\"服务器集群分布式架构\"\u003e\u003c/a\u003e\u003c/p\u003e"
June 3, 2010
csdn.net的系统架构研究
"\u003cp\u003ecsdn作为国内最大的程序开发社区,影响了足足一代人。它是国内优秀杂志《程序员》的网站,我从前非常喜欢《程序员》这本杂志,里面的文章都非常优秀, 那时只有5元钱的我每个月花10块钱买本这样的杂志,看个三五年,都舍不得丢下。\u003c/p\u003e\n\u003cp\u003e但是今天观察了下csdn站点的架构,发现做的比较简单,看来开发者比较喜欢从程序着手,着重优化代码和数据库,对系统整体架构思考的时间不多。\u003c/p\u003e\n\u003cp\u003e我着重看了几个二级域名:www、news、bbs/community和blog,其中www、news这些静态文件都有通过squid缓存,用的 app_squid架构,然后是dns轮询做分流。\u003c/p\u003e\n\u003cp\u003e在这里顺便讨论下为什么很多大型网站都喜欢用dns轮询来作首页,而不采用lvs或其它负载均衡策略。这是因为负载均衡都是把所有的访问先集中到一个ip 上,因为只有一个ip,所以无意间这个ip的稳定性就关系重大了。ip稳定性会受很多因素影响:n个交换机、线路、机器等等,颇为复杂。而首页很有可能会 用到异地的负载均衡,这么来不用dns,方案就很难设计了。现在的常用浏览器和下载软件,都有对dns的故障处理机制,所以dns也是可以屏蔽掉一些故障 的,虽然 …\u003c/p\u003e"
June 3, 2010
nginx图片服务器的架构方案
"\u003cp\u003e图片服务通常数据容量较大,而且访问也频繁,鉴于此,图片服务就会有两种问题,一是存储问题,二是访问量问题。\u003c/p\u003e\n\u003cp\u003e存储问题就是硬盘容量问题,花钱买硬盘就可以了,看似简单,但着实也是最苦的问题。按目前探索来看,最好的方式是:在任何时刻遇到硬盘空间不够时,买颗硬 盘插上,最多改改配置,就能立刻利用;另外,硬盘要能充分利用,不然图片存储量大再加上备份,很恐怖,最好是每颗硬盘都用上100%的空间。\u003c/p\u003e\n\u003cp\u003e访问量也是个大问题,如果服务不允许防盗链,那么访问量会引起带宽、服务器压力等问题,有钱的话直接扔CDN,没钱或者有更多的钱,就自己做吧。根据垣古 不变的真理“越老的图,访问量也相对较少”这一点,分成两大部分,一边处理最新的图片,一边处理老旧的图片。最新的图片访问量大,但存储量较少;老图片访 问量低,但存储量大。\u003c/p\u003e\n\u003cp\u003e大概分析完了,开始制定方案。\u003c/p\u003e\n\u003cp\u003e一、拟定一个存储目录规则:\u003c/p\u003e\n\u003cp\u003e在现有的/a/b/abcde.jpg这样的hash方式下多加一个日期的目录变成:/200810/16/a/b/abcde.jpg或者/2008 /10/16/a/b/abcde.jpg。按日期制定这个目录规则后,就可以按年月来拆机器了。\u003c/p\u003e\n\u003cp\u003e二、 …\u003c/p\u003e"
June 3, 2010
图片服务器的hash架构
"\u003cp\u003e这是一个最简洁的架构。在这个架构里,负载均衡器都可以省了,用最为廉价的dns来替代,dns的优点就是廉价,不用维护,也不愁性能和稳定,还可以跨机房多用几条带宽作分流。 另外,在图片服务中,可以选择用另一个域名做dns。优点是主站中的任何cookie等header不会带到图片服务中,省了不少上传流量和服务器可能有 的处理时间;缺点是多花了点域名的钱。目前门户都喜欢用这办法,小站用的话,用另一个域名还附带有一个特别的优点:因为部分域名服务商允许添加的二级域名 有限,所以用别的域名可以节约有限的域名资源。dns这一块也可以用泛域名,不过貌似国内的泛域名支持不是特别的稳定,有些网站的泛域名,在linux下 不能解析windows就正常,比较奇怪,我也没法解释。\u003c/p\u003e\n\u003cp\u003e在这个架构里我总共开了36个域名,但是一时没有那么多机器,所以有一些域名指向同一台机器。一般来说,一个刚上线的项目,放一台机也未尝不可,但是链接 (包括域名)一定要固定下来,不然以后调整会非常痛苦。\u003c/p\u003e\n\u003cp\u003e域名的事情还是比较简单的,只要照着填写web表单就完成了,配置四台nginx服务器当然也是非常简单的,因为不需要什么特殊的功能,所以四台机 …\u003c/p\u003e"
June 3, 2010
什么是反向代理,如何利用反向代理提高网站性能
"\u003cp\u003e这几天常看到kangzj在博客里谈论代理, \u003ca href=\"http://www.houkai.com/2009/09/18/micolog-optimization.html\" title=\"Micolog博客主题终极优化篇\"\u003e上篇博文\u003c/a\u003e 也提到过反向代理,有同学对利用绝对路径绕过ghs起到加速作用不是很理解,那就总结一下反向代理的知 识。谈到google ghs时,说绕过ghs反向代理服务器直接使用*.appspot.com起到加速的目的,好像本文标题“利用反向代理提高网站速度”有点矛盾,其实不 然,我们域名下的资源文件绕过一个反向代理服务器,得到的appspot反向代理服务器更直接而且它有负载均衡机制。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1. 什么是正向代理和正向代理服务器?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e正向代理就是通常所说的代理,是某台电脑通过一台服务器来上Internet网的这种 方式,其中这台电脑就叫客户机,这台服务器就叫正向代理服务器也就是通常所说的代理服务器。在这种方式中,你是主动的,网站是被动的,网站那里不能得到你 的真实ip地址。(通俗讲法)\u003c/p\u003e\n\u003cp\u003e正向代理服务器。它只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器(一般在 IE-Internet选项-连接-局域网设置),并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2. 什么是反向代理和反向代理服务器?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e反向代理就是网 …\u003c/p\u003e"
June 3, 2010
反向代理登录?
"\u003cp\u003e**反向代理(Reverse Proxy)**方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务 器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。\u003c/p\u003e\n\u003cp\u003e通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务 器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设 计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不 支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就 表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据, 所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器 …\u003c/p\u003e"
June 3, 2010
分布式文件系统研究11:Google File System (1)
"\u003cp\u003eGoogle File System\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e前言\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e没什么好说的,传说中的文件系统,当代网络超大容量分布式文件系统设计的典范,Google的核心竞争力所在。Google的Search、GMail、 video、blog spaces等等都是用这个技术做的。Google目前的中国区总裁李开复就认为学计算机的学生都应该看看Google File System。\u003c/p\u003e\n\u003cp\u003e很佩服Google的开放精神,将GoogleFS的详细设计写成了Paper: The Google File System, ( \u003ca href=\"http://labs.google.com/papers/GoogleFS-sosp2003.pdf\"\u003ehttp://labs.google.com/papers/GoogleFS-sosp2003.pdf\u003c/a\u003e) 作者是Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung。该论文长达15页,对Google FS介绍得非常详细,从设计时考虑的因素到详细的解决方案,以及测试和实际运行数据,都做了具体的说明,而不像IBM这么遮遮掩掩,从GPFS、 Storage Tank到TotalStorage SAN File System,一直都是小里小气的样子,生怕别人知道它做了啥。 …\u003c/p\u003e"
June 2, 2010
Hadoop分布式文件系统:架构和设计要点(翻译)
"\u003cp\u003eHadoop分布式文件系统:架构 和设计要点\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、前提和设计目标\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e1、硬件错误是常态,而非异常情况,HDFS可能是有成百上千的server组成,任何一个组件都有可能一直失效,因此错误检测和快速、自动的恢复是HDFS的核心架构目标。\u003c/p\u003e\n\u003cp\u003e2、跑在HDFS上的应用与一般的应用不同,它们主要是以流式读为主,做批量处理;比之关注数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。\u003c/p\u003e\n\u003cp\u003e3、HDFS以支持大数据集合为目标,一个存储在上面的典型文件大小一般都在千兆至T字节,一个单一HDFS实例应该能支撑数以千万计的文件。\u003c/p\u003e\n\u003cp\u003e4、HDFS应用对文件要求的是write-one-read-many访问模型。一个文 件经过创建、写,关闭之后就不需要改变。这一假设简化了数据一致性问 题,使高吞吐量的数据访问成为可能。典型的如MapReduce框架,或者一个web crawler应用都很适合这个模型。\u003c/p\u003e\n\u003cp\u003e5、移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在显然更好,HDFS提供给应用这样的接口。\u003c/p\u003e\n\u003cp\u003e6、在 …\u003c/p\u003e"