`
hijack
  • 浏览: 37371 次
  • 性别: Icon_minigender_1
  • 来自: Mars
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

RoR在扩建复杂系统中的问题

阅读更多
多年来Ruby社区一直以来都承受一个压力,那就是runtime performance scalability。现在很多人也用同样的眼光看待RoR,然而在Cal Henderson的书 中指出网站运行时性能的扩展性可以通过增加服务器来解决。这在RoR里面实现是很简单的。

RoR在现实中遇到的更多的问题是面对复杂性表现出来的可伸缩性(scalability in terms of complexity)。当系统变得越来越复杂的时候,我们发现可伸缩性越来越小,或者说我们需要花费更多的精力到系统维护中。那么这种成本怎么会产生的呢?

我们先来看看人们为什么会采用RoR开发项目。首先Ruby是一种high level programming language。它区别于C/C++这些low level programming language在于指针不暴露给编程人员,这样就避免了编程人员整天浸泡因为指针而犯的错误中。在这个层面上我觉得Ruby和Java、C#不存在什么区别。其次RoR是full stack solution, 在这一点上,也有人认为Ruby社区没有提供足够的lib供开发人员选择。我不知道当RoR提供了Seaside的实现后,这种优势是否存在。

下面我们讨论RoR在构建复杂系统可伸缩性减小的原因:

http://jack.lifegoo.com/?p=134
分享到:
评论
3 楼 robbin 2007-04-29  
引用
1. Ruby 动态解释和mixin的继承方式使得寻找bug的过程变得异常艰难。而有时候通过长时间的寻找发现造成bug的原因是变量的笔误或者是参数顺序的问题。Ruby不象Java和C可以在编译阶段把一些低级的错误定位出来。这也使得Behavior Test显得更加重要。如果没有测试辅助,这方面的成本将会随着系统的复杂而增加。


以我们已经写了超过一万行ruby代码,超过二万行rhtml代码的实践经验来看,拼写错误的定位可以说是非常容易的。我差不多平均每天都会出现2-3次拼写错误,但是每次拼写错误的定位平均不超过10秒钟。所以下结论不要总是想当然。

要说bug,其实最难寻找的bug是不小心覆盖了系统或者库已经使用的命名。ruby和rails里面有大量已经被使用掉的命名方式,有时候你按照英文习惯命名的类/方法可能就重名了,这种错误极难排查。

引用
2. Ruby(或者说动态语言)的重构问题。Martin Flower对重构的定义是: “Each transformation (called a ‘refactoring’) does little, but a sequence of transformations can produce a significant restructuring.” 虽然每次重构都是很小的变化,但是这种变化的传播范围在一个复杂系统中可能变得很大。比如在核心模块中rename一个函数,其影响可能遍及其他所有模块。而这个恰恰是目前动态语言欠缺的。它也没有强大的IDE来支持各种重构操作。所以现实情况就是我们利用文本的查找替换来完成重构操作。另外一方面,我们可以认识到一个好的框架(无论是建立在Ruby还是RoR上)来应对系统的复杂性还是有一定的必要性的。如果框架好,可以做到削弱依赖关系或者化整为零,那么重构带来的成本也会减少。

如果你写的代码有那么复杂,以致于不能很好的支持重构,你要首先考虑你的代码写的是否有问题了。在RoR框架下面,基本写不出来依赖关系复杂的代码。

引用
3. 代码在膨胀!系统代码不断的变得臃肿,里面充斥着有用的代码和无用的代码。当然这可以看作是前面两者综合的结果 — 因为是动态解释的,而在重构结束的时候,有时候很难判定某个方法是否还存在引用。在大多数情况下不会追究下去,所以系统代码不断地在扩大,这种性质的扩大也增加了系统的额外复杂性。

你不觉得Java代码膨胀的更严重吗?即使有IDE的跟踪功能,难到你能很好的管理所有有用无用的代码?你可以肯定某些代码一定是无用的?




2 楼 yananay 2007-04-29  
引用


很重要的一点是,使用RoR你需要写的代码更少。



少是相对的,但是当某一个复杂的逻辑达到千行,就很痛苦了。。。

不过这不是ruby的问题,就算java,也一样痛苦。
1 楼 gigix 2007-04-29  
根据我的经验,你列举的三个点都是不成立的。很重要的一点是,使用RoR你需要写的代码更少。

引用
1. Ruby 动态解释和mixin的继承方式使得寻找bug的过程变得异常艰难。

convention over configuration让你知道应该去什么地方去寻找什么东西。单元测试、功能测试和集成测试让你迅速定位到bug所在的位置。并且在更少的代码中寻找bug总是更加容易。
引用
2. Ruby(或者说动态语言)的重构问题。

缺乏IDE支持是事实。另一方面的事实是,代码越少重构越容易。
引用
3. 代码在膨胀

同样,越少的代码越容易维护。

我认为你的几个点都有一个共同的出发点,即缺乏编译期检查。但程序的可靠性本来就应该由测试(而非编译期检查)来确保。

相关推荐

    机遇ROR 的图书管理系统

    通过学习和实践《机遇ROR的图书管理系统》,你不仅能掌握Ruby on Rails的核心技能,还能提升对Web开发整体流程的理解,为未来开发更复杂的Web应用打下坚实基础。而提供的"EasyKey1.1.exe"可能是用于辅助学习的工具,...

    RoRBlog 基于RoR的博客系统

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

    RoR性能优化经验谈

    在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在使用RoR过程中积累的实际经验。 首先,RoR性能优化涉及到多个层面,包括应用程序的部署、服务器配置以及代码优化。在部署方面,操作系统的...

    ror中文资料

    在提供的压缩包文件中,我们可以看到"Ruby语言中文教程",这暗示了资源可能包含了关于Ruby语言的基础知识和进阶内容,对于学习RoR至关重要。Ruby是RoR的基础,理解其语法和特性对于掌握RoR框架极其关键。 **Ruby...

    基于RoR的在线考试系统

    RoR提供了丰富的内置功能和库,使得开发过程更为快速且易于维护,特别适合构建复杂的Web应用程序,如在线考试系统。 在线考试系统的构建通常包含以下几个关键模块: 1. **用户管理**:首先,我们需要一个用户注册...

    神经网络ror resenet模型

    在CIFAR-10上达到89%的准确率,以及在CIFAR-100上达到72%的准确率,展示了ResNet和Ror模型在处理复杂图像分类任务上的强大能力。相比于其他传统的浅层网络或早期的深度网络,这样的准确率显著提高了模型的性能,表明...

    RoR选题方向—源代码

    如ActiveRecord,它是RoR中的ORM(对象关系映射)库,允许开发者用Ruby代码操作数据库,而无需编写SQL。另一个关键组件是ActionController,它处理HTTP请求并返回响应,是连接模型和视图的桥梁。 RoR的"Convention ...

    ROR安装必备所有架包

    在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...

    ror

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

    初探ROR

    总结来说,Ruby on Rails提供了一种高效且优雅的Web开发方式,通过强大的工具和库,使得开发者能够专注于创新和解决问题,而非基础架构的搭建。对于初学者,深入理解Ruby语言和Rails框架的原理,掌握其核心概念和...

    ror实例

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

    RoR中文解决方案(很不错哦)

    在RoR中,插件是一种可以扩展和定制框架功能的方式,它们通常包含模型、控制器、视图、帮助器以及其他相关的文件。这个插件可能解决了RoR在处理中文数据时的编码问题,使得用户无需访问特定网站下载,直接在项目中...

    Windows 上搭建 ROR环境

    ### Windows上搭建Ruby on Rails(ROR)环境详解 ...在实际开发过程中,可能会遇到更多具体的细节问题,建议及时查阅官方文档或其他开发者的经验分享,以便更好地解决问题。希望每位学习者都能顺利踏上Rails开发之旅!

    ROR环境配置

    在IT行业中,Ruby on Rails(简称ROR)是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用开发过程,提高开发效率。本文将深入探讨如何配置ROR开发环境,以及...

    ROR 文件的上传与下载

    例如,在本例中,`MEDIUMBLOB`被选中,因为它足以满足大多数文件的大小需求,同时避免了使用更大数据类型可能导致的性能问题。 #### 视图设计与文件上传表单 接下来是视图的设计,即用户界面部分。Rails应用程序...

    excel lib ror ruby

    标题 "excel lib ror ruby" 暗示我们要讨论的是在Ruby on Rails(简称RoR)框架中使用库来处理Excel文件的相关知识。RoR是一个流行的开源Web开发框架,而Ruby语言本身支持与Microsoft Excel文件交互,这在数据导入...

    RoR 培训课程PPT

    - **缓存机制**:讲解RoR中的多种缓存策略,包括页面缓存、动作缓存等,以提升应用性能。 - **路由规则**:介绍Rails的路由系统,学习如何定义URL到控制器方法的映射规则。 - **RESTful设计**:解释RESTful架构...

Global site tag (gtag.js) - Google Analytics