-
Notifications
You must be signed in to change notification settings - Fork 0
Home
kaven276 edited this page Jan 10, 2016
·
14 revisions
Welcome to the noradle-dispatcher wiki!
(multiplexed) (utl_tcp)
. clients ===========> dispatcher <---------- oracle processes
(node.js) (node.js) (oracle)
^
. monitor/console
- 提供客户端连接 oracle db 的通道,以反向接受 oracle server process 反向连接注册为基础
- 为客户端提供虚拟的指定并发数的到 oracle 的连接(多路复用,并增强管理信息交换)
- 因为处于网络中心位置,其性能、稳定性要求非常高
- 由于保持转发状态(一个请求的中间状态),并且为简化设计,不支持集群,必须单进程来提供海量frame转发
- 功能单一:就是提供一个客户端到oracle的网络通道,额外的集中提供监控数据源(比从其他类型节点提供要方便、集中)
- 只有握手过程使用 http 协议,建立通道后,直接使用简单高效的内部 frame 协议通信
- 除了管理包,不解析,不生成应用 frame 的内容体,只看标准的固定长度的 frame 头,用于 frame 在 client/oracle 间的转发
- 网络增强
- 不直接通过 TCP 建立私有的握手过程,而是通过 http 协议握手,然后 upgrade connection
- 支持 https 接入,提供通信安全性,端到端的相互认证
- 可以通过 node.js/nginx 等常用代理来反向代理内部的 noradle-dispatcher
- 健壮性
- 支持端到端 ping/pong 包,用于保持中间带状态网元(如防火墙NAT转换状态)、心跳检测
- 支持端到端的 graceful quit 信号处理,确保在途请求处理完毕才最终退出
- 配置增强
- client/oracle/console 向 noradle-dispatcher 的认证提供标准接口,供定制实现认证和授权策略
- 提供标准化的配置格式,实现上述认证和授权,方便使用
- 监控增强
- 可以将完整的时间声名周期通过日志输出
- 可以将上述日志输出改为向 console 实时输出,并由 console UI 实时监控
- in-process client
- noradle client 进程直接 require noradle-dispatcher
- 节省一层网络中转,client 独占一组oracle服务进程
每个 oracle db instance 启动后,会自动向 LOCAL_LISTENER 参数指定地址的 oracle listener 注册器服务, 这样当有客户端连接 listener,listen 就可以将TCP句柄转移给 oracle instance 中的服务进程。
noradle 启动 db server processes 后,各个进程也是向 noradle-dispatcher 注册自己。
区别在于,oracle 是数据库实例向 listener 注册,而 noradle 是每个对应组的服务进程向 noradle-dispatcher 注册。
- oracle dispatcher 只服务于一个 db instance,并且属于该 db instance
- noradle dispatcher 可以服务于多个 db instance,可以是一个 db 的(RAC/DG),也可以是不同的
server process share 不同
- oracle 下,一个 dispatcher 接受的请求可以被所有的 share server process 处理
- noradle 下,一个 noradle-dispatcher 独占一组 noradle server process,之间不共享,用于不同应用不同业务负载的隔离切分
- 日志提升
- log (debug based) log should classified more clear
- 对于日志输出,分类要更加精细,容易从日志中看出系统运行过程。
- 同时,日后可以将日志改成事件流,在 noradle-console 中实时查看。
- 支持 https
- client can make security connection to noradle-dispatcher
- prevent password leakage
- encrypt transport data
- prevent middle proxy to see the exchanged data between client and dispatcher, allow http tunnel only
- can serve behind proxy
- can behind node.js based proxy, such as http-proxy
- can behind nginx
- keep-alive to sustain TCP(NAT) state
- for oracle, client, console(realtime data)
- configuration
- use oracle's configuration data
- only config http/https ports
- support multiple db instances
- all oracle connection from one db instance one cfg_id will incorporate into one pool
- statistics should bring into pool, not global data
- 参考 websocket 协议,拿来器优点
- 大的 frame 分片,防止传输被一个请求独占,不过 noradle 已经将上传文件留下不发往db,因此意义不是很大
- Opcode:4位操作码,包括 text/binary/ping/pong/close,这个 noradle 已经引用 frame type,而且 slotID=0 代表管理包 ping/pong/quit
- payload length 不定长,noradle 是定长4个字节,对于单个 frame 2G/4G 足够用了。