我正在寻找Web应用程序后端架构的最佳实践。我使用的是直截了当的:Node.js上的websocket服务器处理所有客户端请求,并通过MongoDB保存/加载必要的信息。但是有明显的问题:
数据存储层。如果我们只有一个数据库,它可能会以某种方式被破坏,数据将丢失或无法访问。因此,我们应该在不同的主机上有几个数据库并同步这些数据库,以便它们具有相同的数据。据我所知,MongoDB没有这样的主 - 主同步,例如应该使用CouchDB。但也许还有一些其他技术或工具?
处理层。如果我们只有一台服务器,它可能无法访问或者请求过多。所以我们应该在不同的主机上有几台服务器。这些服务器应如何选择与之交互的数据库?它们应该写入所有数据库还是仅写入一个数据库(某些进程会将该数据库与其他数据库同步)?
负载均衡。如果我们有许多服务器来处理客户端请求,我们必须在服务器之间分配请求。据我所知,在这种情况下可以使用Nginx。但这不是单点故障吗?或者我们应该使用几个Nginx服务器吗?
假设我们有移动应用。在这种情况下,我们无法更改顶层配置,而无需为客户端发布相应的新应用版本。例如,如果我们添加更多服务器,我们应该将它们的地址添加到客户端部分。有没有办法减少这种客户端的变化?我只能想到使用固定数量的Nginx服务器的相同方法,假设它们没有变化。
这个问题似乎众所周知,但我无法对其进行全面的了解。有这么多的webapps - 必须有一些常见的解决方案。也许有一些框架/库可以解决它(仅发现cote.js)?也许有一些关于这个主题的书籍/文章?