这是一个多层次的问题,其中我的最终目标是建立设置我的服务器的最佳方式,该服务器将托管网站以及用于iOS的服务(使用Socket.io)(最终Android)应用。应用程序服务和网站都将在node.js中编写,因为我需要高度并发和扩展应用程序服务器,我想,虽然我可以在节点中做网站,因为它不会&# 39;在性能方面与Apache之类的不同(根据我的理解)。
此外,该网站的优先级低于应用服务,应用服务应获得比网站更高的流量(但从长远来看,这可能会改变)。钱不是我最重要的优先事项,但这是一个限制因素,我觉得拥有99.9%正常运行时间的服务(从长远来看似乎100%的正常运行时间)比省钱更重要在妥协时有更多的停工时间。
首先,我了解每个cpu核心有一个节点进程是充分利用多核cpu的最佳方式。我现在明白,经过研究,由于cpu必须在多个进程之间进行上下文切换这一事实,每个核心运行多个是低效的。为什么每当我看到如何在node.js中使用内置集群模块发布代码时,主工作者就会创建一些等于内核数量的worker,因为这意味着你将在8核上拥有9个进程机器(1个主进程和8个工作进程)?这是因为主进程通常只是为了重新启动工作进程,如果它们崩溃或结束,因此它与其他节点进程共享cpu核心无关紧要吗?
如果是这种情况那么,我计划让工作人员处理提供应用服务并让主工作者处理工作人员,但也主持一个网页,该网页将提供有关服务器状态的所有统计信息。其他相关信息(如连接的客户端数量,工作人员重启计数,错误日志等)。这是一个坏主意吗?让这个网页在一个单独的工作人员上运行并让主工作人员处理工人会更好吗?
总的来说,我希望拥有以下元素;处理来自应用程序(我的主要交通点)的请求的服务,一个网站(相当简单,几页和一个注册表单),一个用于存储用户信息的SQL数据库,一个网页(可能是本地托管在服务器上的)机器)只有我可以访问主机有关服务器的信息(用户连接,工作人员重启,服务器日志,其他有用的信息等)和显然nginx将是一个好主意,我处理多个节点进程接受来自应用程序。在进行研究之后,我还发现最初可能最好主持一个VPS。我一开始在想,当应用服务接收的流量很可能会相当低时,我可以在一个VPS上运行所有这些元素。或者最好让他们在单独的VPS上运行,除了我可以在同一个网站上运行的网站和服务器状态网页?我想是这样的,如果出现硬件故障并且出现故障,并非一切都发生了,我可以在2个不同的VPS上运行2个应用服务实例,所以如果一个发生故障,另一个仍在运行。这只是矫枉过正吗?我怀疑有一段时间我需要多个应用服务实例来支持流量负载,但这有助于减少用户的明显停机时间。
也许这一切都取决于我更重视和有时间做什么?一个更复杂的服务器设置,成本更高,可能有点不必要,但保证一致和可靠的服务,或更便宜和更简单的设置,可能会因编码错误和服务器硬件问题而导致停机。
另外值得注意的是,我从未对生产级服务器有任何实际经验,因此在某些方面我已经深入了解了这一点。在过去的半年里,我觉得我已经走了很长的路,感觉自己能够很好地掌握自己需要做的事情,我可以从有经验的人那里得到一些建议。了解我可能遇到的障碍,以及我是否会因为这种设置而给自己带来不必要的问题。
非常感谢任何建议,感谢您花时间阅读我的问题。