Home - noradle/noradle-fcgi GitHub Wiki
FastCGI frame 组成和 noradle 比较
- version: noradle frame 没有 version,但是 noradle 打算在握手信息中增加 version,确保各个通信节点直接协议版本兼容
- type: frame 类型,noradle 有,head/body/end,响应额外还有 session。
- request ID: noradle 对应有 slot ID,只标识在途中的请求,处理完的包括异常的请求不占用ID
- padding 相关:noradle 目前没有 padding 信息,因为还不能证明存在 padding 处理会更快
- We recommend that records be placed on boundaries that are multiples of eight bytes
noradle-dispatcher 提供 FCGI 服务
其实 noradle client 和 noradle-dispatcher 之间的通信就类似 fastCGI 协议, 如果 noradle-dispatcher 就能够接受 fastCGI协议的请求,并转发到 oracle 中,就能成为标准de fastCGI 应用服务器。
- 为新的 request ID 分配 oSlotID,或者 FCGI request ID 就是 oSlotID
- 相同 request ID 下的后续包,发送到绑定好的 oSlotID
- oracle 侧可以读取一个 request ID 下先后不同类型的请求包格式
- 包括 version, type, req id, padding 等等
FCGI 协议下的用于能力协商管理包
- FCGI_MAX_CONNS: The maximum number of concurrent transport connections this application will accept, e.g. "1" or "10".
- FCGI_MAX_REQS: The maximum number of concurrent requests this application will accept, e.g. "1" or "50".
- FCGI_MPXS_CONNS: "0" if this application does not multiplex connections (i.e. handle concurrent requests over each connection), "1" otherwise.
具体在 noradle-fcgi 上的配置应该有两套;
第一套:多路复用
node.js 实现上和 noradle-dispatcher 非常的像
- FCGI_MAX_CONS:1 因为 node.js 应用只要监听一个端口即可
- FCGI_MAX_REQS:n 直接设置成 dispatcher 给予的最大连接数即可
- FCGI_MPXS_CONNS:1 代表接受多路复用
第二套:不用多路复用
node.js 实现接受多个连接,每个连接同时只接受一个请求的数据,cSlotID就是连接号(从1依次往下排,并复用)
- FCGI_MAX_CONS:n 直接设置成 dispatcher 给予的最大连接数即可
- FCGI_MAX_REQS:n 直接设置成 dispatcher 给予的最大连接数即可
- FCGI_MPXS_CONNS:0 代表接受多路复
非多路复用,多条链路,每条链路无并发模式的快速路由方法
(注:这里的 nginx 泛指如 nginx 的支持 fast CGI 协议的 web server)
- noradle-fcgi 接受多个 oracle server process 的反向连接(当然有握手过程,通 noradle-dispatcher 完全一样)
- nginx 建立多个到 noradle-fcgi 的连接
- noradle-fcgi 将每个 nginx 连接绑定一个空闲的 oracle 连接,并且一直保持
- nginx 发送的 app level 请求直接转发到绑定的 oracle 连接上
- oracle 的响应直接转发到绑定的 nginx 到 noracle-fcgi 连接上
采用这种方式,请求到oracle通道的派发最为简单高效,就好像 nginx 直接连接到多个 oracle server process 上。
(multiplexed or not) (utl_tcp)
. nginx ===========> noradle-fcgi <---------- oracle processes
(node.js|python) (oracle)
^
. monitor/console