4

我正在努力实现一个应该返回 JSON 响应并且应该维持非常高负载的 RESTful API。API 的“读取”部分将产生最高负载,API 的“写入”部分将产生极少的负载。我的第一次尝试是使用 nodejs 编写整个 API。我几乎做到了,但在 javascript 和 ruby​​ 之间面临非常高的模型和逻辑重复,因为 API 是更大系统的一部分。我尝试将所有逻辑移动到后端(mySql),但这个想法变得更加丑陋。我的第二次尝试是在 Ruby 生态系统中编写 API,以便在系统的所有部分之间共享模型/逻辑和测试。

我尝试单独使用 Cramp 和 Goliath,但所有这些异步的东西确实使 API 实现变得复杂。我只需要 2 个异步读取 url,因为它们会产生最高的负载,并且通过一路异步,我被迫以异步方式实现 API 的其余部分,这并没有增加任何价值。

我目前的尝试是混合:使用 Thin/Sinatra/Cramp 鸡尾酒。我在 Ruby 代码中实例化 Thin rack 句柄,并使用 rack builder 我在 Sinatra 和 Cramp 之间拆分 API,它采用同步实现,Cramp 以异步方式实现 2 个 url。

这是一个好方法吗?或者将 Sinatra 和 Cramp 放在一个 Web 服务器(Thin)中会因为某种原因给我带来更多麻烦?

更新: 我正在尝试将 Sinatra 与 rack/fiber_pool 和 em_mysql2 混合的解决方案。似乎我正在扼杀两个目标 - 使 API 与同步实现异步。但是我遇到了一个我认为很快就会修复的错误。

会不会有这样的问题?

4

2 回答 2

6

我认为在同一个瘦进程中拥有同步(sinatra)和异步(cramp)应用程序并不是一个好主意。如果同步部分相对简单,我建议在 Cramp 中实现它。当我创作《抽筋》时,这里有点偏颇:)

如果您不知道,Cramp 对 AR/光纤池具有开箱即用的支持 - https://github.com/lifo/cramp/blob/master/examples/fibers/long_ar_query.ru

如果您决定使用 Cramp,我很乐意帮助您解决任何问题,因为我最近在抽筋方面做了很多工作,并且非常兴奋!只要给我一封电子邮件!

于 2011-08-05T02:09:20.677 回答
0

我很好奇你在使用 Goliath 时遇到了什么异步问题?在常见情况下,最终开发人员应该看不到异步代码。

我们可以做些什么来让最终用户不那么容易看到它吗?

于 2011-09-13T04:59:26.653 回答