Skip to content

Use Case 2: BPS Discovery

Ihar Suvorau edited this page Sep 14, 2023 · 4 revisions

Workflow

flowchart LR
    upload[Upload a log] --> discover[Discover BPS model] --> save[Save BPS model] --> examine[Examine BPMN] & use[Use BPS model for simulation]
Loading

Architectural Approaches

P2P communication

This is the point-to-point communication approach (vs. distributed messaging). Gateway serves as (a) a load balancer and (b) service discovery. We omit auth requests on the diagram to simplify it.

Case 1

flowchart LR
    subgraph node1[pix.cloud.ut.ee]
        webserver
        gateway
        assets
    end

    subgraph node2[simod1.cloud.ut.ee]
        simod-http1
    end

    subgraph node3[simod2.cloud.ut.ee]
        simod-http2
    end

    frontend -- 1. new job --> gateway
    gateway -- 1. new job --> webserver
    webserver -- 2. get assets --> gateway
    gateway -- 2. get assets --> assets
    webserver -- 3. new job --> gateway -- 3. new job --> simod-http1 & simod-http2
    simod-http1 -- 4. job done webhook ---> gateway -- 4. job done webhook --> webserver
    simod-http2 -- 4. job done webhook ---> gateway
    webserver -- 5. get results --> gateway
    gateway -- 5. get results --> simod-http1 & simod-http2
    webserver -- 6. save results --> gateway
    gateway -- 6. save results --> assets
Loading

Case 2

In this case, we don't have the webserver, its role plays the gateway that simply relays requests (load balancing if configured) to downstream services. The simod-http service receives locations (URLs, paths) to input assets already in the POST request. No need to use the assets service to fetch files.

flowchart LR
    subgraph node1[pix.cloud.ut.ee]
        webhooks
        gateway
        assets
        requests
    end

    subgraph node2[simod1.cloud.ut.ee]
        simod-http1
    end

    subgraph node3[simod2.cloud.ut.ee]
        simod-http2
    end

    frontend -- 1. new job --> gateway
    gateway -- 1. new job --> requests[processing requests]
    requests -- 2. new job --> simod-http1 & simod-http2
    simod-http1 & simod-http2 -- 3. job done ---> gateway -- 3. job done --> webhooks[webhooks server]
    webhooks -- 3. get results --> gateway -- 3. get results --> simod-http1 & simod-http2
    webhooks -- 4. save results --> gateway -- 4. save results --> assets
    webhooks -- 5. update requests --> gateway -- 5. update requests --> requests
Loading

Same, without the gateway for simplicity (still assuming, all requests are routed through the gateway):

flowchart LR
    subgraph node1[pix.cloud.ut.ee]
        webhooks
        assets
        requests
        notifications
    end

    subgraph node2[simod1.cloud.ut.ee]
        simod-http1
    end

    subgraph node3[simod2.cloud.ut.ee]
        simod-http2
    end

    frontend -- 1. new job ---> requests[processing requests]
    requests -- 2. new job --> simod-http1 & simod-http2
    simod-http1 & simod-http2 -- 3. job done ---> webhooks[webhooks server]
    webhooks -- 4. get results --> simod-http1 & simod-http2
    webhooks -- 5. save results --> assets
    webhooks -- 6. update requests --> requests
    webhooks -- 7. notify user --> notifications
Loading

Distributed messaging

flowchart LR
    subgraph node1[pix.cloud.ut.ee]
        webserver
        gateway
        assets
        kafka
    end

    subgraph node2[simod1.cloud.ut.ee]
        simod-worker1
    end

    subgraph node3[simod2.cloud.ut.ee]
        simod-worker2
    end

    frontend -- 1. new job --> gateway -- 1. new job --> webserver -- 1. new job --> kafka

    kafka -- 2. new job --> simod-worker1
    kafka -- 2. new job --> simod-worker2

    simod-worker1 -- 3. save results --> gateway -- 3. save results --> assets
    simod-worker2 -- 3. save results --> gateway -- 3. save results --> assets

    simod-worker1 -- 4. job result --> kafka
    simod-worker2 -- 4. job result --> kafka
Loading

Same, without the gateway for simplicity:

flowchart LR
    subgraph node1[pix.cloud.ut.ee]
        requests[processing requests]
        assets
        kafka
        notifier
        post-processor
    end

    subgraph node2[simod1.cloud.ut.ee]
        simod-worker1
    end

    subgraph node3[simod2.cloud.ut.ee]
        simod-worker2
    end

    frontend -- 1. new job --> requests -- 1. new job --> kafka
    kafka -- 2. new job --> simod-worker1 & simod-worker2
    simod-worker1 & simod-worker2 -- 3. save results --> assets
    simod-worker1 & simod-worker2 -- 4. job result --> kafka
    kafka -- 5. post-process --> post-processor 
    post-processor -- 6. update requests --> requests
    post-processor -- 7. notify user --> notifier
Loading
Clone this wiki locally