美文网首页
node高并发

node高并发

作者: 宋song一 | 来源:发表于2020-02-21 16:19 被阅读0次

一、非阻塞的异步模式,主要解决了两个问题:

  • 解决了CPU空转大量浪费问题
  • 节约了开线程和线程切换上下文的成本问题

二、Node.js:浅析高并发与分布式集群

1. 单线程的好处就是:

  • 无需像多线程那样去关注线程之间的状态同步问题
  • 没有线程切换所带来的开销
  • 没有死锁存在

2. 当然单线程也有许多坏处

  • 无法充分利用多核CPU
  • 大量计算占用CPU会导致应用阻塞(即不适用CPU密集型)
  • 错误会引起整个应用的退出
    不过在今天看来,这些坏处都已经不再是问题或者得到了适当的解决:
(1) 创建进程 or 细分实例

关于第一个问题,最直白解决方案就是使用child_process核心模块或者cluster:child_process 和 net 组合应用。我们可以通过在一台多核服务器上创建多个进程(通常使用fork操作)来充分利用每个核心,不过要处理好进程间通信问题。
另一个方案是,我们可以将物理机器划分为多台单核的虚拟机,并通过pm2等工具,管理多台虚拟机形成一个集群架构,高效运行所需服务,至于每台机器间的通信(状态同步)我这里先按下不表,在下文的Node分布式架构中再做详细说明。

(2) 时间片轮转

关于第二点,我跟小伙伴讨论过后认为可以通过时间片轮转方式,在单线程上模拟多线程,适当减少应用阻塞的感觉(虽然这种方法不会真的像多线程那样节约时间)

(3) 负载均衡、坏点监控/隔离

至于第三点,我跟小伙伴们也讨论过,认为主要的痛点就在于node不同于JAVA,它所实现的逻辑是以异步为主的。
这就导致了node无法像JAVA一样方便地使用 try/catch 来来捕获并绕过错误,因为无法确定异步任务会何时传回异常。而在单线程环境下,绕不过错误就意味着导致应用退出,重启恢复的间隙会导致服务中断,这是我们不愿意看到的。

当然,在服务器资源丰富的当下,我们可以通过 pm2 或 nginx 这些工具,动态的判断服务状态。在服务出错时隔离坏点服务器,将请求转发到正常服务器上,并重启坏点服务器以继续提供服务。这也是Node分布式架构的一部分。

相关文章

  • node高并发

    Node在处理高并发,I/O密集场景有明显的性能优势 高并发,是指在同一时间并发访问服务器 I/O密集指的是文件操...

  • node高并发

    一、非阻塞的异步模式,主要解决了两个问题: 解决了CPU空转大量浪费问题 节约了开线程和线程切换上下文的成本问题 ...

  • 基于Vercel+Github Action 部署Nest.js

    前言 完美的支持TypeScipt 面向 AOP 编程 支持 Typeorm 高并发,异步非阻塞 IO Node....

  • nodejs 事件循环机制总结

    node设计采用了单线程机制,但还可以承载高并发请求是因为node的单线程仅针对主线程来说,即每个node进程只有...

  • nodejs事件循环机制

    node设计采用了单线程机制,但还可以承载高并发请求是因为node的单线程仅针对主线程来说,即每个node进程只有...

  • Node.js中异步逻辑的串行化流程控制

    0.Nimble 在Node.js中,异步编程技术让我们可以同时处理多个任务,这也是Node.js适用于高并发需求...

  • dotnet core VS Node.js 非全面性能对比

    前言碎语 昨日与一故人闲谈, 提到Node.js, 由于此君本是位资深.net码农, 对node的高并发性能却甚是...

  • node.js(七)

    Node.js 事件循环 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。No...

  • Node事件循环

    Node.js 事件循环机制 Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程、高并发的 Ja...

  • 事件循环。。

    Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 Node.js 的每一个 A...

网友评论

      本文标题:node高并发

      本文链接:https://www.haomeiwen.com/subject/ndvcqhtx.html