high concurrency design - noradle/noradle-dispatcher GitHub Wiki

各个客户端的并行度控制

  • 通过 noradle-nodejs-client 连接到 noradle-dispatcher 的并发度按照如下方式控制
    1. client 连接 dispatcher 成功后,就发起握手请求,内容包括 cid/passwd/dbu 等信息
    2. dispatcher 将上述信息转发到 oracle,并将 oracle 返回结果转发回 client'
    3. oracle 根据请求信息和 client_control_t 配置信息,返回结果,其中包含允许的并发度
    4. 客户端同时只能发送这个并发度的请求
  • 通过 nginx 访问的
    • 并发度没有单独的控制
  • 直接 http 访问的
    • 并发度没有单独的控制

todo

  • 当 oracle 侧 client_control_t 中的并发配额变动时,如何能通知到 client?
    1. 考虑当 client_control_t 并发配合变动时,向 dispatcher 发出和原响应格式一样的内容
    2. 修改 client_control_t 的会话,根本就没有连接到 dispatcher,事件信息如何发送给 dispatcher?
    3. 各种变化记录到事件 pipe 中
    4. dispatcher 在进行 keepalive 的时候,检查事件 pipe,有则通知到各自的 client,但是反应不及时
    5. 针对每个请求的等待,先检查事件 pipe 中是否有事件,有的话,先针对事件做处理并发送给相应的客户端
    6. 每个事件内容对每个连接上来的 dispatcher 发送,dispatcher筛选后转发给各自连接上来的client

reference

sync/async block/none-block I/O