Posts Tagged ‘web2.0’

Heroku试用体会

// August 27th, 2009 // No Comments » // Ruby

上一篇的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)

用Ruby on Rails开发Facebook 应用(4)

// August 5th, 2008 // No Comments » // Ruby, 编程开发

用那个主机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可以用来说服你的投资人了。

用Ruby on Rails开发Facebook 应用(2)

// July 28th, 2008 // 1 Comment » // Ruby, 电脑网络, 编程开发

上一篇说了不少虚的,现在作点儿实在的:

Step.1 Facebook注册一个App.
作为facebook的用户,在也面最下方的developer连接可以进入开发者的portal. 这需要你加入developer app(这本身也是facebook的一个app).之后你就可以创建facebook app了。你需要指定的最基本的信息包括application name, callback url和canvas page url. 尤其是后者,可以看作是facebook给你分配的地址,不可重复。由于facebook已经有了超过26000个app,好名基本都有人用了,因此想要找一个长度合适有好记又有意义的canvas url药费一下脑筋了。

注册好的app也可以更改属性,并不是一成不变的。过程简单不贴图了。总之你的app有了自己的key和secret. 这两个是facebook识别app的重要依据。

Step.2 本地开发环境安装rfacebook和rfacebook plugin (前提是你有一个work的rails环境哦,别告诉我还没有。翻翻我之前的帖子)

sudo gem install rfacebook

rails yourappname
cd yourappname
script/plugin install svn://rubyforge.org/var/svn/rfacebook/trunk/rfacebook/plugins/rfacebook

Step.3 配置facebook app信息
生成facebook.yml文件:
rake facebook:setup
将facebook.yml按照facebook app的信息进行填写

注意facebook.yml每段都有tunnel:

tunnel:
username: yourLoginName
host: www.yourexternaldomain.com
port: 1234
local_port: 5678
这是用来提供你自己的电脑和虚拟主机服务器之间的链路的。要知道facebook把对你app的访问请求转到我们自己的虚拟主机上,要是开发的时候任何一点变化都要deploy到服务器上才能生效的话,怕是要累死了。所以tunnel提供了使用ssh来使得服务器到本地开发环境的链路。这样可以认为facebook把访问请求转到了local的机器上。

怎么用这个tunnel配置呢?看例子
tunnel:
username: foobar < ----- ssh user id
host: www.mysite.com < ----- server adderss
port: 8888
local_port: 3000

配只好之后就rake之:
rake facebook:tunnel:start

(待续)

Ruby on Rails开发Facebook 应用(1)

// July 28th, 2008 // 1 Comment » // Ruby, 编程开发

facebook为app提供了很庞大的用户群体和不错的API支持(至少对ruby on Rails来说是如此),对于想把Web2.0作为创业方向的同学来说,可以节省积累用户的时间。

要学习facebook app的基础知识的同学请参看这里,已经对facebook熟悉的同学请跳过:
[连接丢失,抱歉]

看完之后你至少应该知道Facebook App有三种和facebook耦合的方式(external,Iflame,FBML),这就ok了.

前面说过用Ruby开发facebook app有不错的支持,是因为这个东东: “rfacebook” 什么?这么大名鼎鼎的东西不知道?那你得看看这个

http://rfacebook.rubyforge.org/

不看也行,你知道rfacebook提供了facebook api的ruby接口就行了。新版的rfacebook还连同一个rails plugin一起release,大大方便了使用rails的同学

网上能找到不少有关RoR开发Facebook App的教程。比如一下这些,建议大家都看看:

http://www.liverail.net/articles/2007/6/29/tutorial-on-developing-a-facebook-platform-application-with-ruby-on-rails

http://giantrobots.thoughtbot.com/2007/6/14/fist-in-your-facebook

看过上面的教程相信大家有了更多认识;更相信大家有一个印象,就是这些教程太老了(没办法,谁让rails更新的这么快呢),通过这些教程理解要点还可以,跟着作是没什么希望的。反正我是看到rhtml的后缀就没法再忍受往下看了。网上爬了个遍也没看到有更新的教程。那就自己摸索这来吧。(待续)