Rails、Padrino和Sinatra对于构建预付手机服务的适用性。

18

我正在开发一个移动/VOIP领域的应用程序,这对我来说真的是一个灰色地带。以下是有关该应用程序的一些详细信息:

  • 这基本上就像自动充值/预付费移动服务。
  • 与我之前编写的ERP应用程序相比,将具有中等复杂性的逻辑。
  • 响应中的视图部分将是纯文本,并作为SMS/USSD拉取到用户和Voice XML(VXML)发送到用户作为IVR响应。
  • 路由逻辑非常简单,每种回复类型只需要两三个URL即可。

约束条件:

我们已经在Perl中构建了核心系统(它是一个遗留系统,为许多其他VOIP/Mobile相关服务提供服务),以及一个会计系统来跟踪损益,但它变得非常复杂。因此,我们决定将此应用程序单独创建,并仅使用SMS/USSD和IVR。然而,为了会计目的,此应用程序的每个用户都必须是核心系统的注册用户;我们可以通过API调用轻松实现这一点。

现在,为了对IVR和USSD发送回复/响应,我们需要将应用程序部署在提供这些服务的供应商那里。但是,我们不希望总是需要登录他们的服务器以获取每个客户的USSD/SMS/IVR系统的不同流程的日常报告和会计信息。

因此,我们决定将这个新应用程序确实分为两个子应用程序。

  • 一个应用程序将处理与USSD/SMS/IVR领域的用户界面,并部署在供应商的服务器上,我们将其称为“clientware”。
  • 第二个应用程序将处理所有核心业务逻辑和报告系统,并部署在我们具有完全访问权限的服务器上。我们将其称为“middleware”。

应用程序的基本流程:

  1. 用户拨打短码。
  2. 呼叫落在我们供应商的服务器上,其中clientware应用程序将处理请求并将其注册为其本地数据库中的用户。
  • 客户端软件(Clientware)还将调用中间件的API。为了及时自动充值等核心业务逻辑,注册该用户。
  • 然后,中间件将调用核心系统的API,也要在那里注册该用户,以便进行会计目的。
  • 现在,将有许多这样的客户端软件应用程序与单个中间件应用程序交互。我们决定使用Ruby构建这些应用程序。我将遵循RESTful架构,因为涉及大量API调用。

    在三个框架中,RailsPadrinoSinatra,它们中的任何一个特别适合这个项目吗?如果可能的话,我希望能得到一个详细的相关优缺点比较。


    5
    关于这个问题的价值的元讨论在这里 - Wayne Conrad
    1个回答

    83

    我是 Padrino 的创始人之一,但也广泛地使用 Rails 和 Sinatra。也许不是你想听的,但不管你选择哪个,你都能相对轻松地完成这个项目。在整体上来看,我无法说选择一个会对你产生多大的影响。

    显然,我支持 Rack 和 Sinatra 轻量级模块化的特性。通过 Rack、Rack 中间件、Sinatra 和扩展,只要你愿意理解这些工具,就可以像在 Rails 中一样轻松地完成任何任务。

    我认为对于 Ruby 初学者来说,Sinatra 和 Padrino 学习曲线更低。这是因为它们更好地推广“取所需”和“逐渐复杂”的思想,而不是 Rails 更加“集中一次性学习”的方式。但另一方面,Rails 有更多的文档、博客、支持等等。所以权衡利弊是很清楚的。Sinatra 和 Padrino 在内存占用、每秒请求处理数、CPU 使用率等方面都更加“快速”和“轻量级”,但在大多数情况下,Rails 的速度已经足够快了,应用服务器很少成为瓶颈。

    所有这些话说完了,我会尝试给你一个更直接的建议。如果你只是做服务 API(听起来是这样的话),我建议使用 Sinatra、Padrino 或甚至我们另一个项目 Renee,而不是 Rails。对于一个轻量级服务 API 来说,Rails 太过于臃肿了。

    进一步缩小范围,Padrino 就是 Sinatra,所以你不需要在它们之间做出选择。你可以从 Sinatra 开始并包含 Padrino 的独立模块,或者使用全栈 Padrino 应用程序,它在内部仍然是 Sinatra,但具有许多强大功能(i18n、logger、管理面板、缓存、生成器、表单助手、邮件发送等),性能上几乎没有损失。请记住,这些都是“只在需要时使用”的模块化扩展。

    我建议您查看我们的Padrino 入门指南,作为探索Sinatra和Padrino的起点。我们的Padrino指南和文档力求详尽。话虽如此,“安全”的选择是Rails,因为它有更多的使用量,更成熟,有更多的贡献者和更多的文档/可搜索性。祝你好运,希望这对你有所帮助。


    谢谢Nathan。我会考虑你的建议...讲解得很好 :) - Jai Madhav
    1
    我同意Nathan的观点,对于服务API,我使用Sinatra并调用Padrino(路由、生成器和缓存)和Rails(ORM)模块。这对我非常有效,并且节省了一些内存,因此我可以运行更多的独角兽进程 :) - complistic

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接