Ruby on rails Rails应用程序分为两层(数据接收/数据读取)
我有一个具有两个不同层的应用程序:Ruby on rails Rails应用程序分为两层(数据接收/数据读取),ruby-on-rails,activerecord,scalability,Ruby On Rails,Activerecord,Scalability,我有一个具有两个不同层的应用程序: 第一层:接收大量数据的ruby tcp服务器 这是一个运行EvenMachine的非常轻的应用程序,它只接收数据,对它们进行一些计算,然后通过http将它们发送到第二层 第二层:提供用户数据可视化的rails应用程序 我使用thin作为应用服务器 该层接收来自第一层的信息并将其存储在数据库中。该层是用户前端。这里定义了模型和迁移 我没有合并这两个层,因为我需要一个tcp(不是http服务器)作为入口点。 我想知道什么是最有效和可扩展的方法: 一旦格式化正
- 第一层:接收大量数据的ruby tcp服务器
这是一个运行EvenMachine的非常轻的应用程序,它只接收数据,对它们进行一些计算,然后通过http将它们发送到第二层 - 第二层:提供用户数据可视化的rails应用程序
我使用thin作为应用服务器 该层接收来自第一层的信息并将其存储在数据库中。该层是用户前端。这里定义了模型和迁移
我想知道什么是最有效和可扩展的方法:
- 一旦格式化正确,通过http将数据从第一层发送到第二层
- 使用ActiveRecord或pg gem从第一层直接将数据放入数据库。每次EventMachine接收到请求时,它都会将其传递给ActiveRecord,ActiveRecord只需要在数据库中写入一条记录。如果收到大量请求,是否存在阻止IO的风险
- 重写node.js上的第一层,并使用node postgres确保无阻塞IO
2/第一层的计算非常有限(主要是文本解析)。我计划添加一个负载平衡器。3/我需要实时将数据添加到数据库中。在数据库中保存收到的每个新数据时,即使使用附加作业保存,我是否也会遇到阻塞IO的风险?4/由于节点postgres是非阻塞IO,我认为这可能是一个不错的选择。你们怎么想?若接收和存储数据基本上是最重要的,那个么为什么要接收数据并将其传输到第二层和第二层“传输”到数据库呢?为什么第一层不接收它&让其他线程完成其余的工作?至少它节省了一次传输。这就是我想知道的事实:)我的第一个猜测是让第一层使用ActiveRecord将数据保存到数据库,但是如果同时收到100多个数据,ActiveRecord/Postgres会添加一些阻塞IO吗?这就是为什么你需要其他线程来完成存储工作:)至于node.js,我看不出事件机有什么不同,它也有单核问题。使用事件机,如果您愿意,可以随时使用jruby。