混合任务池

1.概述

1.1.问题描述

容器化+微服务是现如今很多后端服务系统的流行架构,而在电商、社交等场景中,流量呈现明显的波峰波谷现象,从而使得整体集群利用率不高。 针对上述问题,通常需要从集群层面,根据负责特征(平均CPU负载、实时QPS),动态扩缩容服务节点。但这种方案往往无法处理突发型流量暴涨。 其实,实际应用场景中除了大量实时增量任务,同事还会有海量的存量任务或者异步任务。所以,可以考虑利用异步任务来填充机器空闲的资源,从而提高资源利用率。

1.2.适用特征

1.3.局限

2.架构

graph TD
    subgraph sync
    cl1(Client1)
    cl2(Client2)
    end
    subgraph async
    pd1(Producer1)
    pd2(Producer2)
    end
    subgraph mq
    tp1(Topic1)
    tp2(Topic2)
    end
    subgraph node
    svr(http server)
    cs1(consumer1)
    cs2(consumer2)
    q0(queue L0)
    q1(queue L1)
    q2(queue L2)
    th("thread pool(worker)")
    end
    subgraph status
    rs(result server)
    db(database)
    end
    cl1==>svr
    cl2==>svr
    pd1-.job1.->tp1
    pd2-.job2.->tp2
    tp1-->cs1
    tp2-->cs2
    svr==job0==>q0
    cs1--job1-->q1
    cs2--job2-->q2
    q0==sync call==>th
    q1-->th
    q2-->th
    th-->rs
    rs-->db

加粗(同步调用)、虚线(异步非阻塞调用)、实现(异步阻塞调用)

3.详情

3.1.任务调度

3.2.策略

3.3.流程

graph TD
    st((idel))--"(1)"-->q0(sync queue)
    st((idel))--"(2)"-->q1(aysnc queue 1)
    st((idel))--"(3)"-->q2(aysnc queue 2)
    st((idel))--"(n)"-->qn(aysnc queue n-1)
    q0--"task"-->h(handler)
    q1--"task"-->h(handler)
    q2--"task"-->h(handler)
    qn--"task"-->h(handler)
    h-->d(done)
    d-."(loop)".->st


Table of Contents