我正在寻找一个RESTful API,该API将负责根据多个移动应用发送的数据(存储在Amazon redshift数据库中)插入数据。
我已经开发了一个API,您可以在这里找到:https : //github.com/Noeru14/fms。它使用Gin:https : //github.com/gin-gonic/gin。如果我打开了太多的并行连接,它曾经会崩溃/无法正常工作。
我的一个朋友谈论使用Node代替,因为它允许真正短的客户端-服务器交互。
我想知道构建RESTful API时必须考虑的因素,该API可以使用Go和Node每秒处理多达数十万个请求。您还知道在Golang中是否可行?
非常感谢。
在Go中可行,在Node中可行。它在其他语言(例如Erlang或Python)中也是可行的。但是,由于您在询问有关Node的信息,所以这就是我要回答的问题。
对于Node中的高并发性而言,最重要的事情是永远不要阻塞事件循环或进行任何阻塞操作(除非它是事件循环的第一刻)。这是人们要做的并破坏并发性的第一件事-就像不时摆出一些无辜的外观fs.statSync()(有关此错误的示例,请参阅此答案,请参见Stack Overflow 的答案)。在第一次滴答之后使用任何阻塞操作(包括长时间运行for或while循环)总是一个错误,实际上我认为它应该引发异常。
并非在所有情况下都是彻底的错误可能仍然会损害可伸缩性的另一件事是在应用程序中存储任何状态。如果您需要具有任何持久状态(并不惜一切代价尽量减少这种需求),则应为此使用数据库。对于需要在请求之间快速共享的数据(例如会话数据),应使用快速数据库(例如Redis),但前提是您无法通过JWT等实现相同的功能。
选择水平而不是垂直可伸缩性,因为在某个时候将没有更大的服务器,但是总会有更多的服务器。
把它们加起来:
我是否提到从未阻止过事件循环?