【问题标题】:Is it a bad idea to use a web api instead of a tcp socket for master/slave communication?使用 web api 而不是 tcp 套接字进行主/从通信是一个坏主意吗?
【发布时间】:2015-09-11 07:54:05
【问题描述】:

TL:DR;在主从模式中使用 RESTful API 而不是 TCP/Socket 连接是否有任何缺点/陷阱?


我正在编写一个 Web 应用程序,它从第 3 方 API 获取数据、计算统计信息(以及更多)并呈现它。提取的数据存储在数据库中。

我正在使用 NodeJS 和 AngularJS 编写这个 Web 应用程序。

因此,该应用程序将执行 2 个基本操作:

  1. 从前端响应 HTTP 请求
  2. 更新数据库。这包括:获取数据、将数据保存到数据库,以及每 5 分钟将一些繁重查询的结果缓存到内存数据库(如 redis)中。

我想在两个应用程序中分离这些操作。 HTTP 服务器应为主服务器。第二个应用程序只是一个从属应用程序,可以生成尽可能多的实例。

master 将实现某种类型的 task-processor,它只是将任务分配给空闲的 slave。奴隶非常愚蠢。它可以报告其状态(空闲/忙碌和一些细节,如当前负载等)。您可以在从属设备上启动任务。 master会负责排队等任务。

我猜这是常见的服务器/代理模式。

所以我已经开始实现 TCP 服务器和客户端,但是这样做感觉开销很大。有点像重新发明轮子。所以我想我可以在我的客户端上使用一个 HTTP 服务器,它只有两个端点,比如

[GET] /status 
[POST] /execute/:task

我在正确的轨道上吗?

【问题讨论】:

  • REST-ful [HTTP] API 的“缺点”是开销。有关系吗?嗯,这取决于 - 手头的任务是否重要?手动编写 TCP 处理程序(或发送的消息) 是在重新发明轮子;这是许多不同实现/方法的已解决问题。当然,还有一些基本的区别需要考虑,例如 TCP [通常] 被用作长流连接,而 HTTP 请求通常是短时间的。 (然后进入long-polling、WebSockets等。)

标签: node.js master-slave


【解决方案1】:

TL;DR;为主从架构滚动您自己的 REST API 存在一些缺点。

您的服务器/代理模式通常称为microservices

滚动您自己的 REST API 可能有效,但可能不是最佳选择。处理delivery semantics(例如at most once vs at least once)、瞬时故障、轮询等可能会在你做对之前造成很多痛苦。

有一些库/服务可以提供不同程度的便利:

  1. Seneca - http://senecajs.org
  2. Pigato - http://prdn.github.io/pigato/
  3. Kong by Mashape - http://getkong.org
  4. Webtask by Auth0 (paid) - https://webtask.io

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多