`
aaronfu
  • 浏览: 991 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类

新接手一个ROR Server,有些想法和问题,希望大家帮忙

阅读更多
1. 简介:
我是以前在外企做了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需要考虑对这些配置么?
分享到:
评论
7 楼 robbin 2008-08-21  
t0uch 写道
hozaka 写道
引用

这是因为ruby的VM是很烂的,GC是格外烂的

确实如此,半年前新VM到现在也没有消息了

今年圣诞1.9就release了,到时候估计VM就稳定了


1.9的VM主要改进在于引入了字节码,是先实时把源代码编译为VM的字节码指令,然后再执行字节码指令。但是我没有听说在GC方面有什么大的改进。
6 楼 t0uch 2008-08-21  
hozaka 写道
引用

这是因为ruby的VM是很烂的,GC是格外烂的

确实如此,半年前新VM到现在也没有消息了

今年圣诞1.9就release了,到时候估计VM就稳定了
5 楼 aaronfu 2008-08-21  
robbin 写道

最后即使不存在线程阻塞问题,即使Mongrel用多线程跑Rails,仍然强烈不推荐多线程方式跑。这是因为ruby的VM是很烂的,GC是格外烂的,单线程跑尚且可以保持稳定性,如果改成多线程,会造成很多问题。


多谢多谢,暂时的打算是第一版就是ROR来做了,Lighttpd+Mongrel,单线程跑,先把功能实现搞定。然后等Server上线之后,考虑那部分性能有问题,如果是独立的业务模块,再考虑用Java写或者考虑Code Review一系列的方法调优。
4 楼 hozaka 2008-08-19  
引用

这是因为ruby的VM是很烂的,GC是格外烂的

确实如此,半年前新VM到现在也没有消息了
3 楼 robbin 2008-08-19  
严格来说mongrel是以多线程方式处理请求的,但是在调用Rails的Handler的时候就会加锁,在Rails处理完毕之后再解锁,因此Rails的执行过程是单线程在跑的。

Rails2.2开始将改成线程安全方式,因此Mongrel在进行必要的修改之后,实际上是可以支持多线程处理Rails请求的。但是由于目前Ruby的线程是用户级线程,因此访问数据库的过程仍然可能被阻塞住,变成单线程跑。

最后即使不存在线程阻塞问题,即使Mongrel用多线程跑Rails,仍然强烈不推荐多线程方式跑。这是因为ruby的VM是很烂的,GC是格外烂的,单线程跑尚且可以保持稳定性,如果改成多线程,会造成很多问题。
2 楼 dazuiba 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世界里,多进程好于多线程。
1 楼 rubynroll 2008-08-18  
不如先谈谈你的Server到底要提供什么样的服务,要同时服务多少客户端,频率等等。没有这些数据,谈性能问题是不是太早了点?

Rails也不是只能作Web应用,就看你怎么用了,工具是可以活用的。

相关推荐

    RoR性能优化经验谈

    总之,RoR性能优化是一个全面的过程,涵盖从操作系统到Web服务器配置,再到代码本身的改进。每个环节的优化都能显著提升网站的运行效率,使RoR应用能够更好地应对高负载和大规模用户的需求。通过学习和实践这些经验...

    ROR安装必备所有架包

    `activesupport`是Rails中的另一个核心库,提供了一套实用工具方法和通用库,如日期和时间处理、国际化支持、JSON编码和解码。`activesupport-1.4.4.gem`是这个库的一个旧版本,但依然包含了大量提高代码可读性和...

    ror中文资料

    Ruby on Rails(RoR)是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。RoR强调“约定优于配置”,提供了一套完整的工具链,使得开发者...

    ror

    NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696

    初探ROR

    Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进开发过程的简洁性和效率。Ruby on Rails的核心理念是“Don't Repeat Yourself”(DRY,...

    神经网络ror resenet模型

    ResNet的核心是引入了“残差块”(Residual Block),通过引入一个恒等映射(Identity Mapping)的跳跃连接(Skip Connection),使得网络能够更轻松地学习到输入数据的微小变化。在每个残差块中,输入信号可以直接...

    ror实例

    "ror实例"可能指的是在学习或实践中,通过创建一个具体的Rails应用程序来理解和掌握RoR的工作原理和最佳实践。 在Ruby on Rails中,重要知识点包括: 1. **Gemfile与Gemfile.lock**:项目中的Gemfile用于指定项目...

    RoR选题方向—源代码

    在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是理解任何编程语言或框架工作原理的关键,对于RoR来说也不例外。 在深入源代码之前,我们需要了解RoR的一些核心概念。如ActiveRecord,它...

    Windows 上搭建 ROR环境

    - 添加一个新的源地址,如淘宝的RubyGems镜像:`gem sources -a http://ruby.taobao.org/` - 移除默认的源地址:`gem sources -r https://rubygems.org/` ##### 4. 安装Rails - **安装命令**:`gem install rails...

    ROR绿色最新环境(2013/3/10)

    ROR环境 Ruby version 1.9.3 (java) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.12 JavaScript Runtime therubyrhino (Rhino) Active Record version 3.2.12 Action Pack version 3.2.12 ...

    RoRBlog 基于RoR的博客系统

    基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。

    我的ror的第一天

    标题 "我的ror的第一天" 暗示了这是一个关于Ruby on Rails (RoR) 开发初体验的分享,其中可能涵盖了作者初次接触RoR时的学习过程、遇到的问题以及解决方法。Rails是Ruby的一个Web开发框架,它以MVC(模型-视图-控制...

    ROR 文件的上传与下载

    在给定的示例中,使用MySQL数据库创建了一个名为`records`的表,其中包含两个关键字段:`name`和`person`。`name`字段用于存储上传文件的名称,而`person`字段则是一个`MEDIUMBLOB`类型,用于保存上传文件的二进制流...

    RoR 培训课程PPT

    - **第一天**:安装配置、哲学思想与MVC模式、创建第一个应用。 - **安装**:介绍了适用于不同操作系统的安装方法,包括InstantRails(Windows)、Locomotive(OSX)、MacPorts以及从源码安装(Linux)等。 - **...

    javarebel 用JAVA和ROR一样方便测试

    破解版本的JAR包,放到本地磁盘,ECLIPUS直接用,到JVM设置直接加 -noverify -javaagent:D:\javarebel.jar

    机遇ROR 的图书管理系统

    《机遇ROR的图书管理系统》是一份以Ruby on Rails(简称ROR)技术为核心,旨在构建高效、便捷的图书管理解决方案的学习资料。Ruby on Rails,是基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-...

    intimate_web:一个 ROR 应用程序

    "intimate_web" 是一个基于 Ruby on Rails (ROR) 框架开发的应用程序。Ruby on Rails 是一种流行的开源 Web 开发框架,它遵循 Model-View-Controller (MVC) 设计模式,用于构建数据库驱动的 web 应用程序。这个应用...

Global site tag (gtag.js) - Google Analytics