浏览 2263 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-18
我是以前在外企做了3年Java Server端开发(公司就不透露了,就是一个处理Push Email的Server),ROR上是个新手,新工作需要做一个ROR的Server,其实是买了一个ROR的成品然后修改,往上加feature。经过看了看文档什么的,总体觉得公司对ROR的理解还是有些偏差,我个人理解Rails就是做网站的,可是他们要的是Server不是网站。虽然这个Server有个网页前台,但是主要处理手机连上来的一些业务,比如Sync Contact,处理GPS数据等。但是用Rails做页面然后用Ruby做Server来处理业务其实就是现在的模式,性能我觉得就Server来讲肯定是不如Java(注意我说的是Server不是网站,如果就网站来说ROR我不认为有什么性能上的劣势),但是没办法,已经这样子了,所以只有这样做。 2. 看过了JavaEye上Robbin写过的几个部署和性能方面的文章,有些想法了,以下是我的想法和问题,希望大家提提意见:) 2.1 我的想法 我现在的想法是,按照既有的结构,先用Ruby完成第一版Server的功能,前台页面那些东西还是用Rails来做,第一版我考虑的是实现功能,不做太多的架构上的争论了。第一版release以后,我会考虑看server那些业务性能差的比较严重的并且能够独立出来的模块,我考虑用Java单独写这个模块,这是后话了以后再说,因为就我现在的ROR水平,一上来设计一个Java+ROR的架构我觉得不太现实,一步一步来。 服务器配置,我想Lighttpd+Mongrel,没用FastCGI的原因主要是那个ROR成品的公司建议这么搭配,并且我看了看Robbin分析的Lighttpd+Mongrel的性能也算在各种搭配里排名第二了还可以。虽然不如Lighttpd+FastCGI,但是也还可以。一开始我打算按书上说得Apache+Mongrel,看了Robbin的分析放弃。 2.2 我的问题 a) 关于Mongrel起几个线程我有个问题,因为是Server主要不是关注于网站(至少我现在理解公司的需求是这样子),有没有必要起多个Mongrel?如果起了的话,我得Server里可能会有监听某一个端口来获取SMS Aggregator发来的短信这种模块,如果多个起多个Mongrel对这种模块会不会有影响,比如多个线程都要监听同一个端口了?ROR的内部我真不是很了解,所以想问问大伙。 b) 我看了那本web敏捷第二版的书还有Robbin的文章,其中我没有找到关于数据库连接池方面的配置和说明,我的问题是ROR需要考虑对这些配置么? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-08-18
不如先谈谈你的Server到底要提供什么样的服务,要同时服务多少客户端,频率等等。没有这些数据,谈性能问题是不是太早了点?
Rails也不是只能作Web应用,就看你怎么用了,工具是可以活用的。 |
|
返回顶楼 | |
发表时间:2008-08-19
2.2 我的问题
引用 a) 关于Mongrel起几个线程我有个问题,因为是Server主要不是关注于网站(至少我现在理解公司的需求是这样子),有没有必要起多个 Mongrel?如果起了的话,我得Server里可能会有监听某一个端口来获取SMS Aggregator发来的短信这种模块,如果多个起多个Mongrel对这种模块会不会有影响,比如多个线程都要监听同一个端口了?ROR的内部我真不是很了解,所以想问问大伙。
一般会启动10~30个mongrel进程。每个mongrel进程不存在多线程的说法。 引用 b) 我看了那本web敏捷第二版的书还有Robbin的文章,其中我没有找到关于数据库连接池方面的配置和说明,我的问题是ROR需要考虑对这些配置么?
。。。。。。。 active_record是用的一个长数据库连接,不存在连接池的说法。 在现在ruby世界里,多进程好于多线程。 |
|
返回顶楼 | |
发表时间:2008-08-19
严格来说mongrel是以多线程方式处理请求的,但是在调用Rails的Handler的时候就会加锁,在Rails处理完毕之后再解锁,因此Rails的执行过程是单线程在跑的。
Rails2.2开始将改成线程安全方式,因此Mongrel在进行必要的修改之后,实际上是可以支持多线程处理Rails请求的。但是由于目前Ruby的线程是用户级线程,因此访问数据库的过程仍然可能被阻塞住,变成单线程跑。 最后即使不存在线程阻塞问题,即使Mongrel用多线程跑Rails,仍然强烈不推荐多线程方式跑。这是因为ruby的VM是很烂的,GC是格外烂的,单线程跑尚且可以保持稳定性,如果改成多线程,会造成很多问题。 |
|
返回顶楼 | |
发表时间:2008-08-19
引用 这是因为ruby的VM是很烂的,GC是格外烂的 确实如此,半年前新VM到现在也没有消息了 |
|
返回顶楼 | |
发表时间:2008-08-21
robbin 写道 最后即使不存在线程阻塞问题,即使Mongrel用多线程跑Rails,仍然强烈不推荐多线程方式跑。这是因为ruby的VM是很烂的,GC是格外烂的,单线程跑尚且可以保持稳定性,如果改成多线程,会造成很多问题。 多谢多谢,暂时的打算是第一版就是ROR来做了,Lighttpd+Mongrel,单线程跑,先把功能实现搞定。然后等Server上线之后,考虑那部分性能有问题,如果是独立的业务模块,再考虑用Java写或者考虑Code Review一系列的方法调优。 |
|
返回顶楼 | |
发表时间:2008-08-21
hozaka 写道 引用 这是因为ruby的VM是很烂的,GC是格外烂的 确实如此,半年前新VM到现在也没有消息了 今年圣诞1.9就release了,到时候估计VM就稳定了 |
|
返回顶楼 | |
发表时间:2008-08-21
t0uch 写道 hozaka 写道 引用 这是因为ruby的VM是很烂的,GC是格外烂的 确实如此,半年前新VM到现在也没有消息了 今年圣诞1.9就release了,到时候估计VM就稳定了 1.9的VM主要改进在于引入了字节码,是先实时把源代码编译为VM的字节码指令,然后再执行字节码指令。但是我没有听说在GC方面有什么大的改进。 |
|
返回顶楼 | |