Loading...

Archive for October, 2009

    AD: 猛买网,精彩团购 | Jobsdigg | 很棒的男装店 | 网站地图

试用RackspaceCloud

之前写过GoGrid体验,昨天又试用了一下另一家叫做RackspaceCloud的云计算平台,感觉要比GoGrid好使,于是写点儿使用心得。

Rackspace是一家老牌IDC,除了提供dedicated hosting、managed hosting以及web hosting之外还有一些其他业务。大名鼎鼎的VPS提供商SliceHost也属于Rackspace旗下(要比Linode贵点儿,但是使用的人也比较多)。Rackspace的云计算服务本来是一个独立品牌,叫做Mosso,后来可能经营得不好,或者牌子搞得不响亮,于是直接改名叫RackspaceCloud了。

不管是EC2,还是GoGrid或者RackspaceCloud,与Linode这样的VPS都有显著的区别,区别体现在:

  1. 云计算平台的服务可以按使用收费。比如服务器按照使用时间和in/out流量收费,粒度很细。VPS做不到这么精细的粒度,大多是按月收费。在收费上,不同平台的差别也很大。
  2. 云计算平台上的服务器没有“power off”的概念,运行着的服务器,只可以重启或干脆删除。那么,数据如何备份就成了一个问题。上文提到的3个平台,都提供了persistent storage,可以把数据存在那上面,不过在具体的实现上又有区别。
  3. 云计算平台往往还提供了CDN一类的服务,Amazon的AWS提供的更多,如SimpleDB之类的解决方案。而VPS所提供的,只是一台虚拟的独立服务器。当然,大部分时候对云计算的要求,不外乎云服务器和云存储。
  4. 云计算平台可以先使用后交钱,VPS是先交钱后用。

相比GoGrid,RackspaceCloud给我的感觉是,后台管理非常简洁,而且网站的速度也快(GoGrid的后台经常会很慢,而EC2,很多时候复杂得让人看不明白)。下图是RackspaceCloud的管理后台,左边的导航非常简洁。

RackspaceCloud管理后台

可以添加一个Cloud Server,支持很多Linux发行版,如果把滚动条拉到最下面,还能看到最新的Ubuntu 9.10。

add a cloud server

创建一个Cloud Server需要几分钟时间,完成后,会将root的密码发送到邮箱,可以通过ssh登录。

在单个Server的信息页面,也非常简洁。当然,我觉得可以做得更好,比如提供类似Linode的服务器各项指标的图表形式展示

single cloud server

我选择的是最廉价的256M内存的服务器,每小时的费用为$0.015,大约人民币0.1元。我在上面跑一个爬虫程序,并把数据存到Linode服务器的数据库中。以前都是开在我自己的笔记本电脑上,不仅连国外服务器的速度慢,而且晚上机器吵得我睡不好。昨天在RackspaceCloud上开了一夜,早晨起来看,共消费$0.34。花不到3块钱,不仅睡了个好觉,而且爬虫工作的速度也比以前要快。

至于服务器的速度,我在Twitter上请推友帮忙测试了一下,从国内ping都在200多毫秒,没有丢包的情况,算是比较理想了。我懒得在上面搭Web服务器。如果感兴趣,可以从此处看到在全球各地ping此服务器的数据。

总体来说,RackspaceCloud的Cloud Server值得使用,Cloud Files我暂时还没测过。与EC2相比,RackspaceCloud提供的服务器档次比较多,EC2提供的最小的服务器都有1.7G内存。而与GoGrid相比,RackspaceCloud提供的服务器,不仅价格上比较有优势,而且在管理后台,也优于GoGrid。

当然,Amazon的AWS还是很牛气的,不仅有EC2,还有S3、SimpleDB这些玩意,近期还支持了MySQL。RackspaceCloud的产品线还显得单薄,流量费用也比其他两家要高。但对于一般的应用来说,还是够用了。感兴趣的朋友们,可以注册一个试试。

发表之前把我的使用报表截图一张,将近24个小时,费用为$0.63。

使用报表

UPDATE: 在注册时候可以使用REF-YIYUE这个优惠码,据说第一个月的账单会有一定的优惠。

海龟之死

从海外回到浙大的涂序新博士跳楼自杀,浙江大学的讣告堪称奇文。大学里每年都有不少学生跳楼,跳得多了,没人觉得新鲜。但海龟跳楼,仅这四个字,已经足够引人关注。更别说跳楼的涂博士,不是一般的水货海龟。不管浙大如何粉饰,都难以消除这件事的深远影响。请原谅我的不敬,我只是想顺便发发牢骚。

今年我到北京工作不久,一个同事离职,移民去了澳大利亚。在那边一直没找到工作的他,心情却很好。他告诉我那边环境很好,路边随处都有鸽子、海鸥,天很蓝。其时正是国庆假期,北京在国庆期间禁飞鸽子,在天安门地区的苍蝇和老鼠都会被消灭。在广场上唱出“清晨我放飞一群白鸽”的歌手,不知道会不会脸红。

911发生时,我正在上初二,听说美帝被欺负了,心里暗爽。而今,却总为当初的想法羞愧难当。

我们这一代,没有成为垮掉的一代,却成了理想迷失,信仰坍塌的一代;我们生活在一个公仆做主,主人受罪的国家,小时候一直被蒙骗,长大了才猛然发现。

即使有一份不错的工作,我依然觉得很无助。如果能移民到别的国家——挪威瑞典就不指望了,但也不能是阿富汗之类的——就一定要出去,千万不要回来。

何必呢?何苦呢?

淘宝的人气商品,是怎么炒出来的?

在“好多好多”上面看到一些销量很高的商品,点过去之后发现,实际上销量都是虚假构造出来的。比如这双板鞋,在下面的成交历史中,赫然有一笔一下拍下1508件商品的交易。

1508件商品的交易

这不是个案,在好多好多上面有很多商品都是如此。淘宝总说自己在严厉查处虚假交易,能把韩寒的店铺给封掉,却抓不住一个明摆着的虚假交易?

做个卖家不容易,炒作人气的目的显而易见。但别的方式去炒都有风险,唯独用淘宝客来炒人气,淘宝很欢迎。因为淘宝客是按照交易金额的一定比例扣佣金,而佣金的10%最终以技术服务费的名义到了淘宝的腰包。

试问,淘宝已经收了这笔钱,还有什么立场抓这笔虚假交易?淘宝的同学们一定对这个漏洞心知肚明,马云说不让淘宝多赚一分钱,看来,这部分收入一定是计划内的吧。如果不是,多赚了钱要扣KPI的。

我有点担心,这么下去,人气这玩意,会不会在淘宝上通货膨胀了?

厨男的日子

因为体检查出中度脂肪肝,开始考虑管理自己的饮食。于是在新蛋上买了一只电饭煲(现在已经缺货了)以及一个电磁炉。当时电磁炉在搞活动,送美的刀具八件套,觉得比较超值。但拿到以后才发现,只有电磁炉和配套的两口锅,没有赠送的刀。马上打电话到新蛋,客服很爽快地答应为我补发。在此表扬一下新蛋的服务。

newegg_logo

同事们听说我这个光棍要自己做饭,有的送我locklock的饭盒,有的和别人打赌看我能坚持多久。几天下来深刻感觉到,自己做饭有很大的自由。少年时代爱吃豆腐:现在终于得偿夙愿,可以每顿都炒豆腐;爱吃鸡蛋,可以想吃就开火煎一个(当然,蛋黄还是要少吃)。最痛苦的莫过于洗锅洗碗,这个不说也罢。

闲下的时候,想,这tmd才像是过日子。

Better Rails Deployment

我用着一台Linode 720服务器,上面跑着两套Rails应用(1 2),都是用nginx+Thin的方式。除此以外还有几个wordpress搭建的blog,用nginx+fastcgi跑php。观察发现,虽然用Thin跑Rails应用要比Mongrel快些,但Thin还是需要在后端开多个进程。要知道Rails是吃内存的大户,每个thin进程占用了近50M内存。

使用thin的结果就是,机器720M物理内存仅余7M左右,Swap占用了400多M。很多时候有请求过来,观察到系统iowait非常高,是典型内存不够的状况。

第一次优化,用上REE

twitter上看到robbinfan写了使用REE的一些细节,才发现很多大的Rails应用(如twitter)都把运行环境迁到了REE上。于是打算装一个尝试一下。在Ubuntu上可以直接用deb包安装(看起来这个版本很新啊,090928):

wget http://rubyforge.org/frs/download.php/64478/ruby-enterprise_1.8.7-20090928_amd64.deb

dpkg -i ruby-enterprise_1.8.7-20090928_amd64.deb

装好之后,系统中会有两套Ruby。如果以前用apt-get安装了Ruby,则旧的Ruby会在 /usr/bin/ruby ;新的Ruby在/usr/local/bin/ruby。如何区分二者呢?可以用 -v 查看一下Ruby的版本号:

root@beijing:~# /usr/local/bin/ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux], MBARI 0×6770, Ruby Enterprise Edition 20090928

root@beijing:~# ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux], MBARI 0×6770, Ruby Enterprise Edition 20090928

可以看到,此时系统默认的Ruby已经是新版了。但还不能直接使用新的Ruby来启动Thin进程,还需要安装一系列Rails项目所依赖的gems。

之后,在/var/lib/gems/1.8/bin/thin 中,把第一行的 #!/usr/bin/ruby1.8 改为 #!/usr/local/bin/ruby ,即可使用REE的Ruby启动Thin进程。

采用REE启动Thin之后,每个Thin进程占用的内存降低到35M,比原来的50M节约了将近30%。

第二次优化,使用Passenger

自从Passenger for nginx推出,就一直想试试,但之前几次都没成功。后来搜索了一下解决方法,发现需要将 config/enviroment.rb 的所有者改成www-data。修改之后果然就能跑起来了。

安装Passenger的过程非常简单:

gem install passenger

passenger-install-nginx-module

之后只要按照提示不停回车即可。最终会把nginx安装在/opt/nginx(这个地址也可以在安装过程中修改)。此时需要把原来配置文件cp过去,然后把用Thin做后端服务的部分注释掉,换成 “passenger_enabled on; “。一切都已经完成,启动新的nginx时,Rails应用就由Passenger来接管了。

Passenger的优点在于可以按需分配进程,这一点就把Thin和Mongrel这种预先启动一大堆进程的给比下去了。当然,表面上看动态分配进程的开销更大;但根据评测来看,影响并不大,而且使用了REE的Passenger要比其他方式都快很多。评测没有对nginx+Passenger+REE给出数据,我想怎么也不会比apache差吧。

从我的VPS的角度,采用REE+Passenger后,系统平均的负载从0.5以上降到0.1以下,空闲物理内存多数时候在100多M甚至200多M,比之前7M有了大幅改善;Swap仅使用了不到200M,也很少出现比较高的iowait。

总地来说,REE和Passenger都值得尝试,也能带来切实的效果。两个最好一起用上,因为本来就是同一家(Phusion)的东西。

nginx的Status Code 499是什么错误

Web服务器在用着nginx,在日志中偶尔会看到有499这个错误。开始没想明白到底是什么意思,在Twitter上提问也没有得到答案。日志如下:

61.135.249.220 – - [02/Oct/2009:10:28:21 +0000] “GET /subject/93390/ HTTP/1.1″ 499 0 “-” “Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )”

61.135.249.216 – - [02/Oct/2009:10:30:08 +0000] “GET /subject/476083/ HTTP/1.1″ 499 0 “-” “Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )”

rfc2616中,400~500间的错误码仅定义到了417,所以499应该是nginx自己定义的。后来想到读读nginx代码,疑问立解。

在nginx源码中grep一下499(现在看源码习惯用grep大法),得到如下结果:

nginx-special-response

找到src/http/ngx_http_special_response.c 这个文件,里面定义了不少http错误码以及相应的返回。注意到有下面这样的注释:

nginx-special-codes

可以看到,499对应的是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。要解决此问题,就需要在程序上面做些优化了。

除了499,nginx还定义了495/496/497/498 这几个Status Codes,相应的意义也在上面的注释中可以看到。开源的东西,可以随时翻看源码,这一点很棒。