存档

2010年7月 的存档

nginx负载均衡和lvs负载均衡的比较分析

2010年7月16日 wenhui 4 条评论

来源:http://www.sudone.com/nginx/nginx_vs_lvs.html

一、lvs的优势:
1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和cpu方面基本无消耗。
2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。
3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。
4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。
5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。
另:lvs也不是完全能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以,用lvs也得多多当心为妙。
二、nginx和lvs作对比的结果
1、nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以nginx单凭这点可利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,所以经常要去触碰触碰,由lvs的第2条优点看,触碰多了,人为出问题的几率也就会大。
2、nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。另外注意,lvs需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。
3、nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间了,因为同上所述,lvs对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。
4、nginx也同样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的;nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。
5、nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前lvs中ldirectd也能支持针对服务器内部的情况来监控,但lvs的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。
6、nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大量内存而不能释放,使用多一个nginx做apache代理的话,这些窄带链接会被nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。lvs没有这些功能,也就无法能比较。
7、nginx能支持http和email(email的功能估计比较少人用),lvs所支持的应用在这点上会比nginx更多。在使用上,一般最前端所采取的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。重要的ip地址,最好交由lvs托管,比如数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。nginx可作为lvs节点机器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所逊色于nginx。nginx也可作为中层代理使用,这一层面nginx基本上无对手,唯一可以撼动nginx的就只有lighttpd了,不过lighttpd目前还没有能做到nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和lvs是最完美的方案了。具体的应用还得具体分析,如果是比较小的网站(日PV<1000万),用nginx就完全可以了,如果机器也不少,可以用DNS轮询,lvs所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用lvs。
分类: nginx, 挨踢 标签: ,

设置nginx expires和access_log提升网站访问速度

2010年7月15日 wenhui 没有评论

在一个网站中往往图片,css文件,js文件会占用掉大量的带宽和载入时间.采用nginx做前端服务器可以设置类似的静态文件客户端的缓存时间.比如:

location ~ \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
expires 30d;
access_log off;
}

就可以将类似静态文件的客户端缓存时间设置为30天,意味着客户在30天内重新访问这些文件时只需要在本地缓存中读取,而不用重新从服务器获取.这样页面载入速度就大大提高了.

当然,对于这些静态文件的访问记录计入日志,在一般情况下也是没有意义的,将accss_log设为off,能在一定程度上降低服务器压力.

分类: nginx, 挨踢 标签: ,

Debian Lenny安装nginx+PHP+MySQL傻瓜手记[转]

2010年7月15日 wenhui 没有评论
新搞了个VPS,打算把Blog以及全套行头迁移过来。
以前的那套图省事,用了CentOS5 Kloxo AllinOne BOX。基本上依靠这个CP搞定了全套,主要是人懒不想折腾而已。这次换了个新的VPS提供商,心血来潮想折腾Debian。所以把过程记录下来,避免以后不折腾了却忘记自己当初怎么搭。
总体思路还是采取懒汉办法,有官方源的从官方源安装,没官方源找第三方社区源,再没有的话自己做deb,无论如何,避免从源代码直接编译。
首先把最简单的MySQL装上,用官方源,一句话搞定:
apt-get install mysql-server
MySQL配置文件稍后再搞,对于小Blog来说MySQL的优化意义不大。
其次是nginx,说实话这东西不熟,不过貌似最近挺流行,Debian Lenny也将其收进官方源了,那就简单apt之
apt-get install nginx
简单netstat看一下发现80已经在监听了,访问http://<IP>发现出现欢迎页“Welcome to nginx!”,接下来就是怎么让PHP在nginx上跑起来。
很没技术含量不是,很不幸后面的也没啥技术含量。一破Blog日IP不过300折腾个什么劲啊,不就是一个玩儿么。
PHP稍微麻烦点,因为Nginx没有像Apache那样的SAPI调用PHP的方式,而是使用FastCGI来调。这里就存在一个对PHP的FastCGI进程如何管理的问题。官方源的php5-cgi本身没有进程管理机制。一个比较好的选择是用spawn-fcgi(源自lighttpd的小东东)来起PHP进程,结果查了一下spawn-fcgi到现在还在sid呆着。还有一个选择是使用php-fpm来做FastCGI进程管理,这东西的灵活性比spawn-fcgi还要高不少,但代价是要往PHP源代码里打Patch才能用,也就意味着–要重新编译整个PHP。
简单权衡了一下,我觉得我还是想用php-fpm,但是又想偷懒不编译源代码,于是就求助于第三方二进制源了。随便搜了一下发现还真有正合适的– http://www.dotdeb.org/,这个社区致力于维护Debian下的LAMP类软件的非官方二进制包,恰好它们近期重做了PHP,使用了PHP5.3.1版本,并集成入了Suhosin安全补丁。最让人舒服的是吧php-fpm做成了一个php5-fpm的安装包,并给其加了SysV类的启动脚本,这样PHP的FastCGI方式即可以有自己单独的conf文件,又有单独的init.d控制脚本,可谓完美。
无废话说干就干。
修改/etc/apt/source.list,加入dotdeb的源设置:
deb http://php53.dotdeb.org stable all
deb-src http://php53.dotdeb.org stable all
然后apt之:
apt-get update
apt-get install php5-cgi php5-fpm
这样PHP就算完事了,简单验证一下,运行如下命令,观察phpinfo()输出是否正常:
php-cgi –i
再保险点看一下PHP的FastCGI进程有没有跑起来,ps aux|grep php,应该能看到有进程为”/usr/bin/php5-fpm –fpm-config /etc/php5/fpm/php5-fpm.conf”在跑。
剩下的事就是搞定nginx的配置文件把站点建好,并让其能调用后台的PHP。这个dotdeb社区源做的php5-fpm好心到都提供了一个nginx的example配置文件,放在/etc/php5/fpm/nginx-site-conf.sample,改改拿来用就好了。
我是将其复制到/etc/nginx/sites-enabled/opslife.com.conf,然后简单修改几个参数,改好的配置文件是这样:
#
# nginx-site-conf.sample:
# Php Site configuration for nginx webserver
#
# 1. set server root /path/to/your/website;
# 2. Rename this file. Copy it to /etc/nginx/sites-available, /etc/nginx/sites-enabled
#    or otherwise ensure that this file is included by the nginx.conf
# 3. Restart nginx webserver, and php-fpm service.
#
server {
root  /home/dawnh/opslife.com;
server_name     opslife.com www.opslife.com d9.opslife.com;
listen          80;
access_log  /var/log/nginx/opslife.com.access.log;
location / {
index  index.html index.htm index.php;
}
#error_page  404  /404.html;
# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /var/www/nginx-default;
}
# pass the *.php scripts to php-fpm listening on tcp port 9000
#
location ~ \.php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_NAME $http_host;
fastcgi_ignore_client_abort on;
}
}
这样站点配置就算是完成了,/etc/init.d/nginx restart重启后,新站点应该就会跑起来了,使用域名opslife.com、www.opslife.com、 d9.opslife.com都应该访问到新建立的站点。
最后再验证一下,扔一个info.php放到/home/dawnh/opslife.com,内容就一句:
<?php phpinfo();?>
由于主域名还没指过来,先用子域名访问测试,直接访问http://d9.opslife.com/info.php,看到返回正确的phpinfo信息。到此最后一步也算顺利完成。
剩下就是把wordpress的东西从老的VPS迁移过来了,依旧是没什么技术含量。有空再记录。
分类: nginx, 挨踢 标签:

为Linux系统手工添加SWAP空间[转]

2010年7月15日 wenhui 没有评论

来源:不详,如有了解,请告知,谢谢

在SWAP空间不够用的情况下,如何手工添加SWAP空间?以下的操作都要在root用户下进行:

首先先建立一个分区,采用dd命令比如

dd if=/dev/zero of=/home/swap bs=1024 count=512000

这样就会创建/home/swap这么一个分区文件。文件的大小是512000个block,一般情况下1个block为1K,所以这里空间是512M。接着再把这个分区变成swap分区。

/sbin/mkswap /home/swap

再接着使用这个swap分区。使其成为有效状态。

/sbin/swapon /home/swap

现在再用free -m命令查看一下内存和swap分区大小,就发现增加了512M的空间了。不过当计算机重启了以后,发现swap还是原来那么大,新的swap没有自动启动,还要手动启动。那我们需要修改/etc/fstab文件,增加如下一行

/home/swap swap swap defaults 0 0

你就会发现你的机器自动启动以后swap空间也增大了。

分类: linux, 系统 标签:

nginx的图片防盗链配置[转]

2010年7月14日 wenhui 没有评论

来源:http://www.sudone.com/nginx/nginx_valid_referers.html
以下配置一般可称为图片防盗链配置,如果是mp3这种文件,我现在是用的cookie防盗链方式。

location /img/ {
alias /data/img/;
valid_referers none blocked server_names *.sudone.com sudone.com ;
if ($invalid_referer) {return 403;}
}

分类: 经营|运维, 网站运营 标签:

节约你的网站带宽[转]

2010年7月14日 wenhui 没有评论

来源:http://article.yeeyan.org/view/laokun/508

过去的三年中,CodingHorror的访问量大大超出了我的预期,我当然不是在抱怨,找到一位读者并且与之展开对话本是写博客的初衷。

但是在网上,流行意味着费用,特别是带宽费用。上周当《为什么程序员不能…写程序?》这篇文章成为超级热门,网站一天的流量飙升到了近9GB:

这足够塞满两条T1专线——接近300KB/S——并且几乎每天如此。为了让网站不至于宕机,我们甚至限制了部分内容的访问。从那以后,我们意识到该做点什么了。如何才能节约网站的带宽占用?

1、使用外部图片托管

图片是头号通缉犯,除非你的网站是纯文字的。即使是这个近乎简陋的网站,图片占用的字节也要比文字多得多,让我们看看我的上一篇文章的字节占用,一篇很典型的文章:

文字:  约4,900字节

图片: 约46,300字节

网站图片: 约4,600字节

文字只占了所有内容字节的10%,为了让带宽占用有所改观,我们必须首先处理占用了90%带宽的图片。

理想地说,我们其实不用在自己的服务器上放一张图片,而将所有图片寄放在外部网站,有许多免费的或近乎免费的图片网站:

Imageshack

Imageshack提供免费无限制的存储空间,但是每张图片每小时的流量不超过100MB,听起来似乎很多,但是算一下:等于1.66MB/分钟,28KB/秒,你的图片越大,意味着你的配额越快用完。但是这个网站非常好用——甚至不用注册,根据他们的说明,任何东西都可以放上去,只要不违法。

Flickr

Flickr对免费用户有容量和带宽限制,但是不限制下载带宽。花25美元升级到专业帐户则取消限制。但是Flickr的使用条款警告“禁止将Flickr用于职业用途和企业”,并且所有外部引用的图片都必须链回Flickr。

Photobucket

Photobucket免费帐户的流量限制为10GB/月(约14MB/小时),花25美元升级到专业帐户则取消带宽限制,我没有在他们的服务条款里面找到任何相关限制。

Amazon S3

Amazon S3服务允许你直接链接文件,空间费用15美分/GB,流量费用20美分/GB,至少有一个网站运行良好。

我很喜欢Imageshack,但因为带宽限制不能负载高访问量;Photobucket使用条款最宽松,但Flickr提供更好更成熟的工具包,不幸的是,我花钱升级到专业帐户后才发现Flickr使用条款上的限制说明,所以只能顺其自然了。补充:因为不少公司防火墙限制了图片网站,看来只有Amazon S3是最好的长期选择。

虽然我最后付出了25美元/年的代价,但物有所值,我仅用2美元/月就将90%的带宽负担转嫁给了外部网站。

从此以后我不必再用URL重写的方式阻止图片盗用,所有人都可以自由使用,用户也可以随心所欲地用阅读器查看我的文章。

对了,不要忘了favicon.ico也是一个图片,它正越来越多的被阅读器和浏览器读取,favicon.ico越小越好,因为它会出人意料地影响你的带宽

2、开启HTTP压缩

搞定了图片,开始处理剩下的内容——文字,这事小菜一碟,启用WEB服务器的HTTP压缩就可以节约三分之二的文字带宽,同样以上一篇文章为例:

原始文字: 63,826字节

压缩后: 21,746字节

不费吹灰之力,我们就节约了66%的文字带宽,包括所有的文字内容:JavaScript,HTML,CSS,在IIS6.0中开启HTTP压缩功能非常简单,Apache也一样。

永远不要提供未经HTTP压缩的内容,这可是唾手可得的免费午餐,如果不确定你的网站是否开启了HTTP压缩,试试这个HTTP压缩测试工具

3、把RSS种子托管出去

许多网站提供RSS种子方便用户订阅,用户不必访问网站,RSS阅读器会帮用户定时获取网站的内容更新。用户可以更自由地阅读你的文章,离线也行。很不错,不是吗?

是很不错,除非你意识到RSS种子吞噬了你多少带宽。事实很惊人!Scott Hanselman告诉我他的一半带宽被RSS种子占去,Rick Klau说他的60%的页面浏览来自RSS种子。整个RSS体系决定于RSS阅读器是否合理,糟糕的阅读器会每隔一小时下载你未经压缩的RSS种子,即使没有更新。想象一下全世界数以千计糟糕的阅读器,实际上它们到处都是。

所以我有意要把这个大包袱外包出去,于是FeedBurner出现在我的视线中。虽然我很乐于把图片放到别的网站,但把RSS种子这样重要的东西交给别人,我仍然不太放心。Scott Hanselman不久前开始使用FeedBurner,所以我发了封邮件给他问问他的想法。他非常热情地给我打电话打消我的顾虑,甚至给我他的FeedBurner帐号试用。

我已经在今天下午3点将RSS种子放到了FeedBurner上,我依据ISAPI重写原则将原来的Feed URL重新定向到了新的地址

惊喜的是带宽占用马上就有了改观,服务器每秒和每分的流量都少了许多。FeedBurner的状态页显示我的RSS种子每一秒就有一次下载,如此算来,即使经过压缩,RSS的数据量也有31KB/S。

除了节约带宽,FeedBurner还有很多别的好处。

4、优化JavaScript和CSS,减小尺寸

最后要做的就是减小文字内容的尺寸了,特别是每个页面都会包含的共用内容,CSS和JavaScript是首先需要优化的,也可以同样的方法优化HTML。

推荐一个方便的在线CSS压缩工具,它提供三个级别的CSS压缩,我用它压缩了这个页面的主CSS文件,结果如下:

原始CSS尺寸: 2,299字节

去掉无用空格后: 1,758字节

HTTP压缩后: 615字节

我们也同样可以用在线JavaScript压缩工具优化JavaScript,其基于Douglas Crockford的JSMin。在压缩之前,我重新看了一遍JS并重构了代码,使用更短的变量,删去冗余的代码:

原始JS尺寸: 1,232字节

重构之后: 747字节

去掉无用空格后: 558字节

HTTP压缩后: 320字节

可以将去除空格的办法同样用于HTML,但并不推荐。我试了一下,尺寸只是减少了10%,因此影响了可读性就不值得了。

事实上,去除空格和换行的工作都是压缩工具会帮我们做的,我们只是稍微动动手优化一下效率:

原始尺寸       压缩后

未优化的CSS      2,299字节       671字节

优化后的CSS      1,758字节       615字节

如果启用HTTP压缩,优化之后CSS只是小了10%。折衷方案是将格式打乱的代码复制到编辑工具,比如Visual Studio 2005,它会自动重新编排代码格式。

虽然这只是微小的优化,但却减小了每个页面的尺寸,我觉得还是值得的。其实我们还有更多的办法去榨干每一个多余的字节,但并不必要,因此略去了。

大功告成,非常高兴地看到带宽的使用情况有了明显改善,页面载入也从没有像现在这样顺畅。但是以上的建议并不一定就是灵丹妙药,如果访问量来得太集中,即使是最小化的,压缩过的文字内容也能瞬间堵塞一根300KB/S的专线。但我仍然希望这些措施能让我的网站应对下一次的Digg风暴,而不至于像上次那样狼狈。

分类: 经营|运维, 网站运营 标签:

门户巨头相继杀入 团购大战迎来收割者

2010年7月14日 wenhui 没有评论

“他们果然来了。”一位团购业观察人士日前向记者这样感叹。10天前,他就预测近期门户网站会进入这块膏腴之地,“只是没想到他们来得这 么快”。
由于新浪、腾讯等门户网站和千橡等社区巨头进入,原本就已有上千家网站的团购市场,这下真要见血了。未来,这场“千网大战”会否重演2005 年、2006年的博客故事,答案几乎是肯定的。

也许最让中小团购网站们伤心的是,从这一刻,不管是哪位大佬能最终执团购牛耳,他们中多数出局已是定数。

巨头入局

7月9日,腾讯商城上线团购频道,并启用了独立域名,成为门户界的率先杀入者。搜狐的爱家团和新浪的团购网站紧随其后,在7月12日同天上线,至此四大门户中做团购者已占其三。

目前来看,巨头网站们都复制的是美国团购网站Groupon的模式——每天一款产品,再加上大大的购买按钮。新浪团上线首单是北京地区的游泳券,团友可以用48元购得原价220元的游泳券,折扣为2.2折。

尽管门户网进入团购动作迅速,但它们初期仍表现出了试水问道的意思——新浪、腾讯均选择先在一地推动业务,前者在北京,后者在深圳,而腾讯团购站则注明上海等地区业务即将开放。

尽管不算高调,但门户网站的介入仍引发了团购业界的高度关注。业内普遍的担忧是,继当年的博客之后,团购成为了“门户标配”,是否会再度引发行业大洗牌。

不过,团购网站对门户入侵似乎并不甚恐惧。

美团网CEO王兴此前曾创办过饭否网,最先在国内推动微博业务,新浪随后推动微博并成就了规模。而现在,王兴转战团购,新浪也随后跟上。这次,王兴颇有信心。

王兴表示,他们的团购业务麻雀虽小,五脏俱全,涉及产品设计、软件开发、商务合作、市场推广、财务、客服等方方面面,门户网站要调动这么多跨部门的资源,效率未必会很高。门户网站的优势是流量大,能很快实现从零到一的起步,但是和美团这样的专业网站相比,接下来的竞争还是在比谁的服务体验好。

“在美团这种模式下,合作商家的接待能力是有限的,并不是人越多越好。如果百度首页挂个团购,那就是浪费,哪个商家也接待不过来。QQ那么巨大的流量,做什么都可以,团购对他们来讲根本就不是核心业务,只是众多QQ会员增值服务中的一项,不见得会投入很多资源,”王兴对《每日经济新闻》评价说。

FtuanCEO林宁也对《每日经济新闻》表示,“谁说团购中,(网站)带来1万人就比1千人好呢?”他认为,门户网线上资讯服务的整合能力很强,但团购要求线上下的整合能力,“这一点上大家的起跑线差距不大。”

千橡互动集团副总裁、糯米网负责人沈博阳则对记者表示,“团购网创办时间前后差不了几个月,不可能产生什么壁垒。”

除门户网外,团购市场的吸引力使得原本就具备较强生活服务信息“落地”能力的分类信息网站也加入进来。此前,58同城网上线了团购网站,而赶集网选择做团购信息导航。

有意思的是,就在上月,赶集网CEO杨浩涌还宣称至少6个月内不会介入这个市场。昨日杨浩涌表示,“尽管刚刚宣称暂不介入,但没几天,产品技术部的员工就找到我,说团购是一件非常有前景的事,很多消费者对此很有兴趣”。于是杨浩涌让他们放手去做,“他们动作很快,一个星期就把团购导航做起来了。”

市场洗牌

“从3月4日美团北京站上线算起,过去的这4个月可以算是国内团购2.0的预选赛,”王兴说。FtuanCEO林宁认为,未来两三个月又将出现一道分水岭。

目前,团购网站已经展开了大浪淘沙的淘汰战,大量小型团购网站死去,而独立发展的团购网站则面临巨大的挑战。

死去的小团购网站中最为典型的是1288。这家只有创办者一个员工的网站甚至连支付手段都不齐备,因运营不利而倒闭。

另一个事实是,在美团网首先在国内复制Groupon后,短短数月内,国内涌出了数百家甚至上千家大大小小的团购网站。

其兴也勃焉,其亡也忽焉。大批中小网站源源不断地出现又死去,源于Groupon模式极简单的操作模式。这种模式复制非常容易,投资门槛也非常低,甚至只需花上数千至两三万元买个开源程序,招一两个员工就可以开张了。但在高竞争压力下,过于简单的配套,遭淘汰也在情理之中。

沈博阳对《每日经济新闻》表示,一家架构完备的团购网站“并不是简单的一张皮”,而有着复杂的后台系统,至少包括编辑系统、帮助商家验券及做用户分析的商家系统以及广告发布系统,“仅这个系统至少需要100万元的投资”。林宁甚至称,在现在竞争激烈的态势下,一家能够生存发展的上规模的团购网站投入门槛在1000万元以上。

在大量小团购网站死去的同时,业内并购也开始兴起。6月,团购网站中已发生了两起颇具规模的并购案,分别是拉手网并下团乐乐,酷团网并下优团网。

林宁称,“最近我接到了不少地方小团购网站的电话,提卖给我们的意向”,团购业即将进入一个资金PK的时期,Ftuan近期也将会公布很大的投融资动作,“目前我们还在投入阶段,每城每月销售额约为100万~150万,年内打算再进入10~15个城市。”

引资机会

值得注意的是,6月两起并购案中出现了泰山天使投资、金沙江创投和浙商创投等风投的身影。由此可见,资本开始对团购网表现出了更明朗的态度。在此之前,金沙江已经投了美团和拉手网。经纬中国创始人张颖也表示,经纬中国“看了很多,目前还在观察中”。

投资界人士认为,经历半年发展之后,半数中小团购网站已死,未来能存活的仅有数家。金沙江创投创始人朱啸虎表示,现在看来目前十名之外的团购网站已经没有机会了。

不过,团购业内也有观点认为,规模大小、覆盖范围以及资金投入未必能够决定一切,如果能够服务好本地商家,就有生存发展的机会。

“以后的局面将可能是少数几家大型团购网站完成全国覆盖,同时部分本地化做强的中小团购网站立足一城一地发展生存”,沈博阳对《每日经济新闻》表示。

在启明创投合伙人童士豪看来,能够提供优良产品服务并与客户良好沟通的团购网站将被看好;此外,他还提及赶集网、大众点评网和58同城网在这一领域有先发的竞争力优势的网站,他对这类企业颇感兴趣。

另一类被看好的则是 “SNS+团购”的模式。清科集团分析师张亚东认为,糯米网的案例反映了团购网站必须具备的一种优势,那就是网络社区。依靠SNS的用户优势,可以充分发挥组团传播效率优势。

沈博阳告诉记者,千橡启动糯米网项目看重的是具有社交化属性的人群在电子商务中凸显的传播效应,目前组建起了产品、技术、销售等20多人的团队。“我们目前还没有硬性导入人人网的SNS用户资源,但这一效应已经开始展现出来了。譬如6月23日团购,原价176元的耀莱国际影城套餐只需40元,相当于2.3折,参与购买的人数高达152151位。

媒介价值

Groupon出现的逻辑是匹配消费者和商家的供需信息,也是为商家消费多余的库存。实际上,传统B2C电子商务在实体商品销售方面已相当成熟,规模巨大,在这种情况下团购网站更适合非标准化、非实物性质的本地化服务商品。

这就决定了团购网站们轻量化的特性——抛却烦躁的实物商品物流配送,追求本地化生活信息服务,产品多数有着现场消费的属性。而且与传统B2C电子商务所追求的实际交易成果不同,Groupon及复制其模式的诸多团购网站的实质更接近一种媒介。

“本地服务业商家是此前最被忽视的群体,而团购对他们而言是最好的推广方式之一,能够24小时在首页曝光是他们梦寐以求的”,沈博阳说,基于实物的团购网站早已有之,如做建材团购起家的篱笆网之类,但这并不是Groupon模式所追求的日常性生活消费,而糯米网上99.9%的商品都是本地服务。林宁则认为,Groupon式的团购网站很大程度上并不像互联网产物,而更像是一种海报。

王兴说得更为明了:“对商家来说,美团是一种前期零投入(不需要先付钱给美团)、完全按效果付费的推广方式,比一般的广告性价比高很多,“这种新的推广方式算不算广告,那只能算是文字游戏了。”

接受记者采访的团购业者多认为,团购是在追求简约化的精品推介,是在信息爆炸的背景下为消费者做选择的减法。“这是做精品消费指南,五花八门大而全的事还是交给淘宝去做吧”,王兴说。

“我们拒掉了90%来提意向的商户”,林宁告诉记者,“问题出在不适合,如很多实物类的商家,每天只有一款产品的推荐资源,我们现在排期已经排到了两个月后了。”

在他看来,目前团购行业的区分度不高,诸多消费者只追逐极限折扣,行业现在需要解决的问题是如何让客户再来,这就需要针对人群、产品的差异化选择,“找到真正有价值、有需求的产品,并掌握人群消费的细分”。而这一切,已经是媒介化的产品制作思路了。

合作新路

除了本地服务型产品,团购网站也在尝试新的合作模式,如与B2C网站合作。

今年3月份,乐淘网成为第一家与团购网站合作的B2C企业。当时在美团网举行的一次团购活动中,成交量为591单。而6月份,乐淘联手返利网举行的团购与美团活动相仿,一天就成功交易了1327单。

“基本完全相同的一个活动,我们6月份的交易量是3月份的2倍还多,可见网民已渐渐接受了这种新的购物方式”,乐淘市场总监崔璨对《每日经济新闻》表示,与美团的合作中,美团向消费者提供80元的券,只需在乐淘上买150元以上的鞋子即可使用,“这就意味着我们的新客成本仅为80元,而我们通常的水平为200元左右,团购网站的效果确实超出了我们之前的想象。”

乐淘网CEO毕胜对记者表示,团购网善于推广,而B2C企业具备前者没有的配送优势,这一合作模式对于B2C企业推广和消费者获取利益均有好处。

同时,媒介价值的凸显也催生了团购产业链上的另一种业态——团购导航站点。这类网站如捏团网、团购之家、团一起等,并不从事实际的团购组织活动,而是在页面上汇集各家团购网站的产品信息以便用户检索。

团购之家CEO王雯吉表示,目前该网站已经覆盖了100多个城市的团购信息,眼下正力图接入SNS网站以获得更大的推广空间,据其称他们已与康盛畅想合作。

同为分类信息网站,与58同城网自己做团购不同,赶集网也选择了做团购导航。对此,杨浩涌解释称,目前团购市场尚不明朗,而导航更注重本地服务信息流,是赶集网的强项。“目前我们还不考虑营收,在跟一些团购网站谈账号互通等合作事宜”。

林宁也告诉记者,腾讯正在和Ftuan谈合作。有业内评论认为,相比直接做团购网站,腾讯基于QQ客户端的庞大用户基数和信息整合能力,做导航可能更有优势。

风投注资国内团购网站的部分案例

5月26日,团购网站24券宣布继2009年9月获得硅谷投资人第一轮天使投资后,再获数百万元人民币的天使投资。同样是5月,由中山大学几名大三学生创办的5151团购网获得了超过2000万元的风险投资。

6月9日,团购网站酷团网宣布获得万嘉创投首轮800万元人民币投资。此前,酷团网已获得浙商创投1000万元人民币投资。

6月17日,国内团购网站拉手网再获500万美元融资。这个上线不到3个月的拉手网此前曾获得泰山天使基金、欧洲团购网站DailyDeal创始人以及金沙江投资500万美元A轮融资。

6月18日,刚刚上线的团购新贵阿丫团经过近一个月的试运营,获得了山西财团1.1亿元的高额投资,成为行业内赢得单笔投资最大的团购网站。

6月23日,国内团购网站F团CEO林宁透露,该网站已获得来自三井创投等企业的C轮融资,融资细节并未披露,但林宁称“是目前为止规模最大的团购网站融资”。

《每日经济新闻》

分类: TMT, 资本 标签:

nginx upstream的5种配置方式[转]

2010年7月13日 wenhui 没有评论

来源:未知,如有了解,请告知,谢谢

nginx的upstream目前支持5种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
tips:
upstream bakend{#定义负载均衡设备的Ip及设备 状态
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
分类: nginx, 挨踢 标签: , , ,

ActionScript与JavaScript交互[转]

2010年7月13日 wenhui 没有评论

来自:http://blog.pfan.cn/fengfei/23026.html

AsJsCall.html文件代码:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>AsJsCall</title>
<style type=”text/css”>
ul{list-style:none; border:dotted; width:350px;};
li{padding:5px};
</style>
<script type=”text/javascript”>
/********* Start AS Call JS Function ***********************/
// 获得在Flash中输入的姓名和性别,并返回显示出来
function getNameSexFromAS( strName, strSex )
{
document.getElementById(“txtNameFromAS”).value = strName;
document.getElementById(“txtSexFromAS”).value  = strSex;
}
/********* End AS Call JS Function ***********************/
/********* Start JS Call AS Function ***********************/
// 获得HTML页面中嵌入的Flash文件
function thisMovie( movieName )
{
// 判断是否为IE浏览器
var isIE = navigator.appName.indexOf(“Microsoft”) != -1;
return (isIE)?window[movieName]:document[movieName];
}
function callASFunction( strName, strSex )
{
// 调用AS中的getNameSexFromJS方法
thisMovie( “extint” ).getNameSexFromJS( strName, strSex );
// 用这句也可以
// document.getElementById(“extint”).getNameSexFromJS( strName, strSex );
}
/********* End JS Call AS Function ***********************/
</script>
</head>
<body>
<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0″
id=”extint”
width=”300″
height=”250″
title=”AsJsCall”>
<param name=”movie” value=”AsJsCall.swf” />
<param name=”quality” value=”high” />
<embed src=”AsJsCall.swf” quality=”high” pluginspage=”http://www.macromedia.com/go/getflashplayer” type=”application/x-shockwave-flash” width=”300″ height=”250″></embed>
</object>
<ul>
<li>请输入你的姓名ToAS:&nbsp;&nbsp;<input type=”text” id=”txtName” /></li>
<li>请输入你的性别ToAS:&nbsp;&nbsp;<input type=”text” id=”txtSex” /></li>
<li><input type=”button” id=”btnGetFromAS” value=”调用AS方法” onclick=”javascript:callASFunction( document.getElementById(‘txtName’).value, document.getElementById(‘txtSex’).value )”/></li>
</ul>
<ul>
<li>显示AS中输入的姓名和性别:</li>
<li>&nbsp;&nbsp;<input type=”text” id=”txtNameFromAS”  /></li>
<li>&nbsp;&nbsp;<input type=”text” id=”txtSexFromAS”  /></li>
</ul>
</body>
</html>
AsJsCall.fla: Flash文件代码:
import flash.external.*;
/********* Start AS Call JS Function ***********************/
// 添加click监听事件
btnCallJSFun.addEventListener( “click”, doClick );
// 用户单击btnCallJSFun引发click事件,并执行事件处理函数
function doClick( eventObj:Object ):Void{
//调用JS的getNameSexFromAS方法,后面txtNameToJS.text, txtSexToJS.text为传替的参数
ExternalInterface.call( “getNameSexFromAS”, txtNameToJS.text, txtSexToJS.text );
};
/********* End AS Call JS Function ***********************/
/********* Start JS Call AS Function ***********************/
function getNameSexFromJS( strName:String, strSex:String ):Void
{
txtName.text = strName;
txtSex.text  = strSex;
}
// 注册该getNameSexFromJS方法为JS可以调用的方法
// “getNameSexFromJS”为别名,可以随意写
ExternalInterface.addCallback( “getNameSexFromJS”, this, getNameSexFromJS )
/********* End JS Call AS Function ***********************/
分类: 脚本 标签:

Ext核心代码分析之Function.createDelegate[转]

2010年7月13日 wenhui 没有评论

来自:http://www.javaeye.com/topic/147596

前一段一直在用Ext,可是在扩展的时候总是遇到问题,索性看Ext的源码,但是发现有很多createDelegate这个方法、一直不解,最近经高人点播,了解一二。
所属类:Function
createDelegate( [Object obj], [Array args], [Boolean/Number appendArgs] ) :这个函数的目的是创建委托。
功能:什么都不多说了。看例子

Ext.onReady(function(){
Ext.QuickTips.init()
var myclass=new Object();
//myclass并没有alert方法,我们也不打算为它写一个alert方法
//我们希望它和window.alert有一样的行为,所以我们委托window来做
myclass.alert=window.alert.createDelegate(window);
//我们还希望他有个更漂亮的show方法和Ext.MessageBox的show功能一样
//所以我们又得委托给Ext.MessageBox来做这事了
myclass.show=Ext.MessageBox.show.createDelegate(Ext.MessageBox);
//我们的myclass也有alert和show方法了
myclass.alert(‘alert1′);
myclass.show({title:’title’,msg:’message’});
});

Ext.onReady(function(){  Ext.QuickTips.init()  var myclass=new Object();  //myclass并没有alert方法,我们也不打算为它写一个alert方法  //我们希望它和window.alert有一样的行为,所以我们委托window来做  myclass.alert=window.alert.createDelegate(window);  //我们还希望他有个更漂亮的show方法和Ext.MessageBox的show功能一样  //所以我们又得委托给Ext.MessageBox来做这事了  myclass.show=Ext.MessageBox.show.createDelegate(Ext.MessageBox);  //我们的myclass也有alert和show方法了  myclass.alert(‘alert1′);  myclass.show({title:’title’,msg:’message’});  });

原来就这么简单。

分类: Extjs, 脚本 标签: