-
Notifications
You must be signed in to change notification settings - Fork 1
input output format
kaven276 edited this page Jan 14, 2016
·
3 revisions
当前 noradle 在 oracle 侧接收的请求的数据格式是 noradle 格式, 他的主要设计考虑是
- 请求头容易是用 oracle UTL_TCP API 读取
- 响应头容易是用 node.js 分解以利用
由于将原始请求(http,websocket,fcgi,scgi) 要和 noradle 标准格式做转换,这个node.js进程就存在着处理消耗,现在考虑一下直接转发上述协议请求包到空间可用的oracle server process上,由 OSP 负责进行进一步的解析,这样可以充分利用oracle多进程处理,同时也基本上做到 node.js的最简化部署。
SCGI 的格式非常适用于 oracle 读取
- noradle-dispatcher 可以开 SCGI 服务端口
- nginx 接收到 http 请求,转换成 SCGI 连接发送请求消息到 noradle-dispatcher
- noradle-dispatcher 选择空闲的 oracle 进程,将该 SCGI 消息转发
- noradle-dispatcher 接受 oracle 的响应然后发送回 nginx
- 在 nginx 本机部署 noradle-dispatcher
- nginx 适用 unix domain socket 和 noradle-dispatcher 通信,通信处理损耗和延时降到最低
- nginx 配置路由策略,不同的访问地址映射到不同的 noradle-dispatcher 从而访问不同的 oracle instance
- nginx 可以添加变量,让 pl/sql servlet 可以获得更多需要的环境信息
- 确认 header 结束
- header 条目切分
- header name-value 切分
- 重复 header 只留一条
- form submit ( query string) 解析
- JSON data 解析
- post body
- 上传文件,multipart 分割处理
- 从请求中找出 cookie id 值,根据他做 RAC/DG instance 路由,可以考虑在 nginx 上做路由
- 根据 method 和 prog 类型,判断是否是只读请求,做 DG(primary/standby) 路由,浏览器应用可以通过js确保连接中非只读的改成显然用户确认然后再用post方式提交
- 根据会话 cookie 值,添加会话信息到请求中。当然完全可以通过会话表实现,只是不能跨DB,通过 signed cookie 或 oauth 也能解决
可以看出,如果 dispatcher 一旦拆包,就需要理解和解析各种协议格式,变得复杂,负载加重。