-
Notifications
You must be signed in to change notification settings - Fork 0
embrace http
noradle 内部网络协议 web 化,和由此带来的设计优化,包括:
- http 直接提供 JSON REST console 服务
- get 请求获取系统运行状态:连接到的client/oracle,其中的统计信息,client/oracle 访问通道繁忙程度等等
- post 请求动态修改配置,如增加访问通道数,动态删减各种事件处理钩子
- dispatcher 直接提供json状态服务,不再需要通过额外 console 应用通过 dnode 协议访问间接提供
- http(s) + upgrade(fake websocket)
- 先握手进行认证,然后使用 noradle-protocol 进行 frame 交换
- 握手采用 upgrade:websocket header
- 对于 console 的实时监控,dispatcher 将实时信息推送到 console
- noradle-protocol frame 交换协议
- https 作为 http 的安全增强版本
- 用于握手过程中 http basic authentication 密码保护
- 用于通信过程的保护
- 允许用于 oracle/client/console 连接 dispatcher 的身份确认,而且是相互的身份确认,利用标准的公钥和证书体系
- 确认安全不考虑采用 http digest 挑战码(完全避免密码明码传输),因此需要双方交互过程,控制复杂
- 测试 https 支持
- dispatcher 支持 https 证书和监听端口配置,根据配置决定是否启动 https 服务
- noradle-client 创建 dbpool 增加 secure 参数,控制是否使用 https 访问 dispatcher
- oracle 学习尝试下通过 oracle wallet 来创建到 dispatcher 的 https 连接
- 采用 https 接入 dispatcher 后,可以完整的提供认证和传输的安全性,直接利用ssl提供的各种安全机制,特别是以后可以基于身份证书进行接入者的认证,不再需要密码。
- 该举措将使得 noradle 可以应用到对安全要求极为苛刻的应用场景,特别是在互联网公网上
- 测试是否可以将 noradle-dispatcher 部署到 proxy 后,反向代理访问
- 测试通过 uniproxy(基于http-proxy模块,node.js 社区最流行的代理)
- 测试通过 nginx 代理(性能最佳的传统模式的web服务器)
- 该举措的意义在于可以将dispatcher部署到企业的统一对外web端口后,实现dispatcher的负载均衡,实现在各种云平台上部署服务
- http/websocket 化协议改造,将大大提升 noradle 的通达性,穿透各种防火墙的阻断,增加其应用场景
- 去除系统部署时对网管人员的依赖
http {
server {
listen 80;
server_name localhost;
}
server {
server_name dispatcher.noradle.org;
location / {
proxy_pass http://127.0.0.1:9009;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
see http://nginx.org/en/docs/http/websocket.html
"proxy_pass" set to the http listening address of noradle-dispatcher with protocol prefix,
format like "protocol://ip:port"
WARN: proxy_read_timeout default to 60s, so noradle-dispatcher must be configured to send keep-alive ping frame less than it.
- 管理帧:包括 ping/pong 包,graceful quit
- 端到端的通信管理,而不是点对点的,很好的支持了 http 代理
- 帧结构简化,适合 oracle API 读写
- 426 : 'Upgrade Required', // RFC 2817
- 503 : 'Service Unavailable',
-
dispatcher 直接提供json状态服务,不再需要通过额外 console 应用通过 dnode 协议访问间接提供
-
dispatcher 删除了的 dnode 的依赖,增加对 basic-auth 第三方模块(解析http basic authentication)依赖* console 直接通过普通 http 请求访问 dispatcher 服务,获取系统状态
-
console 直接 http 访问 dispatcher,不用再依赖 dnode module 和相应的私有协议
-
原有的 frame stream 协议得到简化,不再处理头信息和认证* client/oracle 都可以直接通过Http upgrade请求进行身份说明认证的握手过程,成功后直接socket通信
-
oracle 通过 upgrade 握手包建立到 dispatcher的链接,其中提供了更全面的身份和标识信息
-
确认安全不考虑采用 http digest 挑战码(完全避免密码明码传输)
-
安全机制更为灵活,可以采用 https 接入
-
确定了认证功能自定义接口规范 check(role,name,pass,cip,secure),根据访问dispatcher的角色(client/console/oracle),用户名密码,客户端IP,是否通过加密通道链接5个参数才确定是否允许握手通过,可以支持各种灵活的策略,系统默认采用的内置策略是位于同一局域网下可以访问dispatcher。
-
确定启动新项目 noradle-auth,来支持标准化的基于静态配置文件的认证和配置获取功能
-
对 noradle-dispatcher 项目进行重构,将逻辑清晰的分布到三个字文件中,分别负责配置获取和全局设置、服务器启动和握手处理、具体的frame交换和服务。