Page 145 - Node.js开发指南
P. 145

138  第 6 章  Node.js 进阶话题


                 这些库的具体使用方法,乃至实现的原理以及更深一步的讨论已经超出了本书的范围,
             欢迎有兴趣的读者到Node.js中文社区(http://club.cnodejs.org/)交流。


             6.3  Node.js 应用部署


                 在第5章我们已经使用Express实现了一个微博网站,在开发的过程中,通过node app.js
             命令运行服务器即可。但它不适合在产品环境下使用,为什么呢?因为到目前为止这个服务
             器还有几个重大缺陷。

                   不支持故障恢复
                   不知你是否在调试的过程中注意,当程序有错误发生时,整个进程就会结束,需要重
                   新在终端中启动服务器。这一点在开发中无可厚非,但在产品环境下就是严重的问题
                   了,因为一旦用户访问时触发了程序中某个隐含的bug,整个服务器就崩溃了,将无
                   法继续为所有用户提供服务。在部署Node.js 应用的时候一定要考虑到故障恢复,提
                   高系统的可靠性。
                   没有日志

                   对于开发者来说,日志,尤其是错误日志是及其重要的,经常查看它可以发现测试时
                   没有注意到的程序错误。然而这个服务器运行时没有产生任何日志,包括访问日志和
                   错误日志,所以有必要实现它的日志功能。

                   无法利用多核提高性能
                   由于Node.js是单线程的,一个进程只能利用一个CPU 核心。当请求大量到来时,单
                   线程就成为了提高吞吐量的瓶颈。随着多核乃至众核时代的到来,只能利用一个核心
                   所带来的浪费是十分严重的,我们需要使用多进程来提高系统的性能。
                   独占端口

                   假如整个服务器只有一个网站,或者可以给每个网站分配一个独立的IP地址,不会有
                   端口冲突的问题。而很多时候为了充分利用服务器的资源,我们会在同一个服务器上
                   建立多个网站,而且这些网站可能有的是PHP,有的是Rails,有的是Node.js。不能每
                   个进程都独占80端口,所以我们有必要通过反向代理来实现基于域名的端口共享。
                   需要手动启动

                   先前每次启动服务器都是通过在命令行中直接键入命令来实现的,但在产品环境中,
                   特别是在服务器重启以后,全部靠手动启动是不现实的。因此,我们应该制作一个自
                   动启动服务器的脚本,并且通过该脚本可以实现停止服务器等功能。

             6.3.1  日志功能


                 下面我们开始在第5章的代码的基础上,介绍如何实现服务器的日志功能。Express支持
   140   141   142   143   144   145   146   147   148   149   150