high concurrency design - noradle/noradle-dispatcher GitHub Wiki
各个客户端的并行度控制
- 通过 noradle-nodejs-client 连接到 noradle-dispatcher 的并发度按照如下方式控制
- client 连接 dispatcher 成功后,就发起握手请求,内容包括 cid/passwd/dbu 等信息
- dispatcher 将上述信息转发到 oracle,并将 oracle 返回结果转发回 client'
- oracle 根据请求信息和 client_control_t 配置信息,返回结果,其中包含允许的并发度
- 客户端同时只能发送这个并发度的请求
- 通过 nginx 访问的
- 直接 http 访问的
todo
- 当 oracle 侧 client_control_t 中的并发配额变动时,如何能通知到 client?
- 考虑当 client_control_t 并发配合变动时,向 dispatcher 发出和原响应格式一样的内容
- 修改 client_control_t 的会话,根本就没有连接到 dispatcher,事件信息如何发送给 dispatcher?
- 各种变化记录到事件 pipe 中
- dispatcher 在进行 keepalive 的时候,检查事件 pipe,有则通知到各自的 client,但是反应不及时
- 针对每个请求的等待,先检查事件 pipe 中是否有事件,有的话,先针对事件做处理并发送给相应的客户端
- 每个事件内容对每个连接上来的 dispatcher 发送,dispatcher筛选后转发给各自连接上来的client
reference
sync/async block/none-block I/O