我正在创建一个 Ruby on Rails 应用程序,它将使用一些复杂且耗时的算法。
我正在考虑使用 C 或 C++ 函数来实现它们。
如果任何有在 Web 应用程序中实现复杂算法的经验的人能给我一些指导,我将不胜感激。
我的假设是 Rails 本身太慢,最好使用 C 或 C++。如果是这种情况,如何用 C 或 C++ 实现该算法并使用 Ruby on Rails 调用它?
最佳答案
好吧,这是一个非常模糊的问题,但却是一次有趣的对话。
一般来说,您描述的问题并不是真正的技术问题,而是业务问题。 Rails 的一些巨大优势是开发、维护速度等。C 和 C++ 也是很棒的工具,但用 C 构建与 Rails 中相同的东西往往需要更长的时间。这意味着它更贵。
这笔费用是持续的。 使用 Rails,您将损失一些性能,这将需要更多硬件。这一成本仍在持续。
让我们假设复杂算法是一个长时间运行的函数,可以定义为 User 类中发生的以下情况。
def DoIt() sleep 10000 结束
现在我们还假设您需要一次对很多项目进行这种操作。假设每分钟有 10000 个用户。
如果我们以直线过程执行此操作,我们将看到每分钟 10000*10000 的运行时间。这可不是好事。
幸运的是,这些问题一直都得到解决。 我们正在讨论的是垂直缩放与水平缩放。
垂直: 假设如果你用 c 语言编写它,该函数就相当于:
def DoIt sleep 5000 结束
您已经获得了 50% 的 yield ,这太棒了。问题是,如果您的用户负载增加,您最终会遇到麻烦。我们一直在生产系统中看到这种情况。
所以现在的问题是如何水平扩展它。
使用 resque(或数百个解决方案中的任何一个),您可以将此工作踢到后台并分发它。 然后,您可以添加服务器来处理进入系统的负载。
现在的问题是,用 c/c++ 构建它的成本值得吗?或者你最好用 Rails 构建它并支付额外的硬件费用?或者最好从 Rails 开始,如果需要,在完成原型(prototype)并验证是否需要时转向 C++/C。
关于c++ - 使用 Ruby on Rails 进行复杂算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25039647/