Aug 27

上一篇的sinatra应用部署在了heroku上。经过几天的试用有几点体会

1. Heroku是架构在Amazon EC2上的,具有不错的扩展性,只要你有钱,拖拉一下鼠标就能实现scaling了。这一点着实很方便。当然代价是价格会比EC2高,毕竟人家提供了增值服务嘛。具体高多少很难比较,连heroku的老板都说对应关系很复杂。基本上要是网站做大了,用heroku就不合算了。

2. 不烧包的就用heroku的free配置,只有一个dyno的,5M存储空间,可以支持绑定自己的域名。

3. 近期遭遇了几次request time out,因此查了一下heroku doc,dyno基本上把它看成一个线程吧,换句话说,这个一个dyno的free版只能支持并发度为1的压力。因此并发连接多的化,你会经常看到time out的。计算容量也是比较寒酸,用ab -n 10 url测一下,10个请求4个fail掉了orz. 看来免费的午餐也不好用啊。大家用来做原型demo就好了,验证好了自己找地方去deploy也挺好。

update:不知道是这次测试当时受海底光缆受损的影响还是其他原因导致结果很差,后来新的测试比较正常,后面我贴了一个新的benchmarking的测试结果。free的计划还是可以承受一些负载压力的。特此给heroku正名

4. heroku提供了deploy代码的好方案,但在DB方面限于技术原因,还比较薄弱,mysql什么的还是用不起来。

5. google map API是跟域名相关的,如果没有自己的域名的话,部署到xxxx.heroku.com这种子域名下面是不能用的,想必早有人在heroku下面申请了key, 后来者都会遇到冲突。花钱买自己域名吧

6. Heroku的想法不错,这也难怪他们会积攒了数万用户,也得到了300万美元的投资。云计算,不再是一个概念了,已经有若干成熟的方案面向消费者了。这一点要向先行者amazon致敬

7,最后一点就是heroku的支持做的不怎么样,文档也很不完整。遇到问题还是要自己摸索解决。

add-on: AB benchmarking result:做了两个测试,一个是简单到极致的逻辑,另一个相反,是复杂到极致的逻辑,看看两个边界状况的对比和共性应该更能说明问题:case1表现不错(里面就两行code当然不错了,呵呵),case2太复杂了,failed了88个(一共100个请求,FT).

case1: light code:
localhost:sinatra tony$ ab -n 100 -c 10 http://ip2loc.dazhe.me/counter/
This is ApacheBench, Version 2.3 < $Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking ip2loc.dazhe.me (be patient)…..done

Server Software: nginx/0.6.38
Server Hostname: ip2loc.dazhe.me
Server Port: 80

Document Path: /counter/
Document Length: 15 bytes

Concurrency Level: 10
Time taken for tests: 7.828 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 26200 bytes
HTML transferred: 1500 bytes
Requests per second: 12.77 [#/sec] (mean)
Time per request: 782.820 [ms] (mean)
Time per request: 78.282 [ms] (mean, across all concurrent requests)
Transfer rate: 3.27 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 309 389 192.2 317 1233
Processing: 316 378 272.2 337 3050
Waiting: 314 377 272.3 335 3050
Total: 627 767 332.5 661 3370

Percentage of the requests served within a certain time (ms)
50% 661
66% 677
75% 705
80% 815
90% 1017
95% 1543
98% 1570
99% 3370
100% 3370 (longest request)

case2: heavy code:
localhost:sinatra tony$ ab -n 100 -c 10 http://ip2loc.dazhe.me/
This is ApacheBench, Version 2.3 < $Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking ip2loc.dazhe.me (be patient)…..done

Server Software: nginx/0.6.38
Server Hostname: ip2loc.dazhe.me
Server Port: 80

Document Path: /
Document Length: 696 bytes

Concurrency Level: 10
Time taken for tests: 24.932 seconds
Complete requests: 100
Failed requests: 88
(Connect: 0, Receive: 0, Length: 88, Exceptions: 0)
Write errors: 0
Non-2xx responses: 88
Total transferred: 36676 bytes
HTML transferred: 10992 bytes
Requests per second: 4.01 [#/sec] (mean)
Time per request: 2493.243 [ms] (mean)
Time per request: 249.324 [ms] (mean, across all concurrent requests)
Transfer rate: 1.44 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 310 328 28.1 316 410
Processing: 614 2067 790.9 1961 3904
Waiting: 613 2066 790.9 1960 3903
Total: 977 2395 788.1 2370 4214

Percentage of the requests served within a certain time (ms)
50% 2370
66% 2645
75% 2888
80% 3086
90% 3569
95% 4036
98% 4177
99% 4214
100% 4214 (longest request)


Aug 25

写了个简单的google map应用,用的是简单清爽的Sinatra做DSL, Google Map API, 作用就是把访问者的ip地址解析到地理位置然后在google map上标出来。部署在Heroku上。整个程序只有62行ruby代码。地址在这里:ip2loc.dazhe.me

同样,这段代码可以不经修改的跑在Google AppEngine上,有时间的时候我再做这件事吧。下面是个抓图,有兴趣的朋友帮我验证一下效果。具体地址可能有些偏差,因为用的是国外的ip查询库,在国内的部分可能差别较大,比我我自己的ip就被标在了北海。
snap


Aug 19

我的硬盘里已经有不少VM了,吃掉了大部分硬盘空间。包括

z/OS V1R9, DB2 V9, CICS, COBOL, SMP/E, WAS, TIVOLI, MQ等等产品的DemoPKG,跑在Hercules上 用来做Mainframe技术学习,验证和方案联调。这个有惊人的52G大

z/VM 5.3同样跑在Hercules上,用来做IT虚拟化方案, zLinux当然是少不了了,这个也有5G。而且因为做Virtualization的关系,他的增长是最简单和高效的。可以轻轻松松的因为clone linux系统而成数十倍的增长。用z/VM clone比VMWare要强大的多。

WindowsXP, DB2 V9, Oracle 11G, IBM DWE(Infosphere), Cognos8 BI Server, Informatica PowerCenter 8.6 Server + Client 用来做数据仓库DW和商务智能BI。 这个有20G,跑在VMWare上

SuSE Linux + DB2 + Cognos8 这个用来验证Linux/Unix下DW/BI系统的搭建,产品安装和客户化,性能调优验证.这个有8G,跑在VMWare上

WindowsXP + DB2 V9 + Oracle 11G + SAS V9.2 + SPSS Clementine V11 用来做数据分析和挖掘Data Mining. 这个有15G,跑在VMWare上

除此之外,还有MacOS Leopard + Textmate + MacPort + Gem + Ruby + MySQL + Memcached来做Web敏捷开发--这个不是VM,直接跑在Macbook 466上--不过该机上有一个WinXP通过Bootcamp跑在另一分区,OSX+Win双启动

回顾一下,发现没用过的OS已经不多了,呵呵


Mar 24

4天时间厦门+武夷山,行程紧,也不是为了照相去的,就是到此一游照。幸亏没有带三脚架,背着Primus AW+一机两镜衣服水壶已经让我爬山的时候累得不行了–尽管天游峰只有海拔400多米。具体行程dzxr已经写了好几篇。我就看图说话了。
武夷山:
九曲溪
九曲溪
武夷山大王峰
武夷山大王峰
仙女峰
仙女峰
九曲溪
还是九曲溪

在厦大校园偶遇流星雨剧组正在拍摄,上美女:
流星雨剧照
流星雨剧照-女一号和男一号
流星雨剧照2
流星雨剧照-我猜是女二号

厦门大学不愧最美大学的称号,我要是在这上学怕是没心思学习了
Furong Lake`芙蓉湖-总让人联想起frjj
芙蓉湖-总让人联想起frjj
芙蓉湖

久违的校园,熟悉的青春气息,感叹着年华易逝:
过去的时光
生机
无题

而久闻大名的鼓浪屿,却因为太多游人而变得无比喧闹,感觉很糟糕
鼓浪屿民居
鼓浪屿民居

只有那片海,才能给人无比的畅快
嬉戏


Nov 13

鸟枪换炮,终于用上了Textmate (号称最贵的编辑器,因为很多人是为了这个39EUD的软件而买了1xxxUSD的Macbook Pro)。之前写过的这篇“我的RoR工作环境”成为过去式了。

在Leopard下面内置了对ruby on rails的支持。不过还是要加上xcode和macport才完美。我是按照这篇文章的说明配置的,简单好用,推荐给大家。

初次使用textmate肯定会有摸不着头脑的感觉,强烈建议用ctrl+H呼出help跟随Ruby on Rails的例子走一边。只用不到20分钟的时候,基本上可以完成textmate的入门。


Sep 22

如果你看过了上一篇关于用Amazon EC2作为Ruby on Rails的server的文章的话,这里还有一些补充。

EC2onrails是包含一个AMI和gem的RoR Deployment解决方案。现成的系统和gem让你的deploy非常简单。不过,AMI里面的Apache是你想用的么?各项配置是否正如你所愿?如果不是的话,我们有没有别的选择呢?

答案是肯定的。还有不少方法可以帮助你快速的deploy ROR application:

首先说heroku.com 专门针对ror的一揽子解决方案,你可以在线上创建rails app,在线编辑,部署。因为Heroku本来就是跑在Amazon EC2上的。所以你的Rails app自然也跑在上边了。不过heroku是个商业网站,虽然现在beta阶段我们可以上去随便编辑和部署(简单的,多服务器的肯定不会让你免费来),以后的收费可不好说,另外要使用额外的资源,清提交申请并乖乖奉上银子。建议初学者学习rails的时候玩玩。可以省下setup生产环境的时间。

rightscale.com也是大名鼎鼎(有用的功能也收钱),不过上去试用了一番,实在用不惯,直接放弃研究了。清各位看官自行探索

说说免费的拉,Elastic Rails是一个plugin (plugin 有plugin的好处)。因为有下面的视频短篇,我就不多说了。我最喜欢screencast了。简单明了:
http://s3.amazonaws.com/rc_files/elastic-rails.html
需要指出的是它的网站一直上不去,不知道是不是墙的问题

Capazon 与上面类似:
http://soylentfoo.jnewland.com/articles/2007/04/30/capazon-0-2-released-capistrano-2-0-compatible

Rubber:
http://github.com/wr0ngway/rubber/wikis/faq

具体用哪一种方案请各取所需


Sep 16

Amazon EC2不是什么新东西了,不过从cheewu那里得知他的垂直搜索引擎是用EC2的。偶也有兴趣试用一下,反正钱也不多,呵呵

 

EC2其实是虚拟化的一台机器,物理上来讲书也不知道你自己的实例在群里的那个部分运行着。不过这并不重要,重要的是只要你想,就可以随时在Amazon的computer farm上开出一块自己的”自留地”,计算能力可以选择的,也支持多个实例组成cluster.

 

Virtualization已经是当今的潮流,估计不用普及了,现在用电脑的,最少也用过VMware吧。呵呵。使用EC2只要简单的几个条件:    

 

  1. 在amazon AWS上注册一个id
  2. 把EC2 服务加到你的AWS id服务中来(点一个按钮即可,但是很多人不知道,一些教程里面也没写,少了这个步骤,会导致ssl授权通不过的问题,切记)
  3. 一个可供网上支付的信用卡,VISA,Mastercard,AE什么的都可以

 

ok,添好这些,就可以使用EC2的服务了。别着急,您至少先看看收费标准吧EC2 price

 

都没问题了我们就可以在本地setup EC2的使用环境了。具体可以看这里EC2 Getting Start,我就不罗嗦了。

 

觉得命令行麻烦的话,推荐一个Firefox插件Elasticfox,大大简化的EC2的操作。反正我是不喜欢用ec2那些奇怪的命令。呵呵。命令行控们可以看这篇How To: Getting Started with Amazon EC2

 

有个虚拟的机器,用什么OS呢?Amazon上面已经有很多现成的AMI了,把他理解成定制好的系统,可以直接启动。你只要在启动EC2 instance的时候指定某个AMI的ID就可以了。对于Ruby on Rails来说,我推荐EC2onRail的AMI,有32bit和64bit两个版本:

 

  • ami-c9bc58a0 (32-bit)
  • ami-cbbc58a2 (64-bit)

几乎你会用到的东西在AMI里面都是ready的:

 

Features of the EC2 image:

 

如果你自己还需要别的东西的话,尽可以自己安装(Ubuntu的apt-get或者手动),然后把Image传到S3上就成为自己定制的AMI了。具体过程不难,请参考这个小短文HOWTO Build EC2 image

 

EC2 instance ready了还没完,你自己的本地开发环境也要作一些事情

 

  1. sudo gem install ec2rails
  2. copy capify,deploy 脚本到你的app目录下(用过capistrano的人都知道)
  3. run capistrano task吧。集体还是看ec2rails的说明

 

 

ok,建一个自己的instance尽情享受root的快感去吧


Aug 5

用那个主机host你的应用?

前文题到了ssh tunnel方式提供自己的server到local开发环境的连接以方便开发和调试。不过这个方法需要服务器上的ssh配置支持client端指定端口。相信大部分人用的虚拟主机都不会支持的--大家都共享一个ip.要是每个人都指定端口难免冲突或者乱套。除非虚拟主机提供商提供(或者加钱购买)独立固定的ip才有可能(只是可能)。如果谁知道那里有便宜的虚拟主机提供商能提供的话,请告诉我一声,不身感激。

要是有一个自己的box那就好多了。自己是root自然干什么都没问题。可惜这样的主机价钱就不一样了。在若干个月之前,我们还有一个好的选择,就是joyent.com的针对facebook app应用的免费计划!只要你有facebook app并且转台处于active and in-use状态就可以通过申请这也个计划得到一个原本价值75$/m的主机。自己有root权限。不限流量,1/32的cpu quota。免费期是一年。相信对大多诗人都够用了--一年以后,要么你的app失败了,要么早就要升级扩展了。这么好的计划人们自然趋之若骛。结果就是后来的条款越来越苛刻--主大欺客嘛。新的条款增加了facebook应用的活动用户数量要求:至少50个活动用户;还有30天未登录就会被取消帐户。这个50个active user成了一个比较高的门槛,要知道active user的计算方法可不是有50个人add了你的app就行的。

难道走投无路了么?也不是。两个方法可以work:

No.1 麻烦一点儿,每次更改都deploy到自己的rails虚拟主机上,不用ssh tunnel。优点是简单,所有的rails主机都可以用。缺点是共享主机性能不佳会拖后腿,而且很快就要面临升级。

No.2 现买joyent的最便宜的主机,快速把自己的app弄好,然后发动自己所有的facebook朋友成为你的active user.(在家靠父母,出门靠朋友),说不准成立个facebook app developer群,大家互相访问好了。然后就可以转免费1年的计划了。这样可以达到keep住免费的主机的最低要求,不过不是长久之计。关键还是要作出好东东来吸引大量的用户。此方法只适合新的facebook app developer度过最开始的没钱时期,app发展起来了马上就会面临扩容问题。当然,joyent提供的扩容方式还是足够你的要求。再说,真的到那时,你已经有一个不过的demo可以用来说服你的投资人了。


Pages: 1 2 3 Next