Node 的事件轮询机制图谱和中间层架构图谱

2018-01-14  本文已影响0人  柏丘君

这篇文章主要总结两个图谱:Node 的事件轮询机制图谱和 Node 作为中间层在大型应用下的架构图谱。
注:文中的内容大多是我自己的理解,并不一定正确,如果您在阅读的过程中发现了任何错误,欢迎告诉我,以便改正。

Event Loop 和异步 IO

关于 Event Loop 和异步 IO,可以参考这两篇文章:

Node 的事件轮询机制图谱

Node 的事件轮询机制图谱如下:


Node 的事件轮询机制图谱如.png

图谱说明:

  1. Node 服务器收到客户端的请求,先将请求保存在一个队列中
  2. 将请求假如到 Event Loop
  3. Event Loop 通过 Libuv 库向操作系统发出指令,并注册回调函数(具体的任务交给 Libuv 调度,Event Loop 不负责具体的任务实现,如 IO 读取)
  4. Libuv 是 C++ 的一个处理异步任务的模块,其对 Linux 和 Windows 平台进行了兼容
  5. Libuv 将任务分发给具体的工作线程,工作线程负责执行任务
  6. 工作线程执行任务完毕后,通知 Libuv
  7. Libuv 收到任务完成的通知后再通知 Event Loop,触发先前注册的回调函数
  8. 回调函数执行完成后,移除请求队列中的相关请求

以 Node 为中间层的架构图谱

下面是一个以 Node 为中间层的架构图谱:


Node 中间层的架构图谱.png

图谱说明:

  1. 客户端发起请求,首先由 Nginx 进行负载
  2. Nginx 将请求转发到某台 Node 服务器后,由该服务器上的 PM2 等管理软件选择一个合适的进程处理请求
  3. 同时,Node 服务还可以对静态资源进行处理,将静态资源请求重定向到某台 CDN 上
  4. Node 向后端发起请求
  5. Node 不直接请求 Java 服务器,在 Node 和 Java 集群之间设置一个 HTTP 的缓存,Node 从缓存中获取数据,缓存一般由 Varnish 或 Squid 完成
  6. HTTP 缓存和 Java 服务器之间要保持连接,一般可以通过心跳确认连接状态,如果和某台服务器连接出现了异常,就要进行处理
  7. Java 服务器从数据库集群中读写数据
  8. 数据库集群进行了读写分离
  9. 同时,还需要对数据库进行冷热备份操作,以进行容灾

上面就是使用 Node 作为中间层的一个比较大型的应用的架构图谱。

完。

上一篇下一篇

猜你喜欢

热点阅读