Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Introduction

Users have a number of options to organize their Subagent Clusters.for organizing their scheduling clusters.

  • Agent Cluster: The operational layer of a Director Agent and a number of Subagents acting as an Agent Cluster.
  • Subagent Clusters: The functional layer that groups a number of Subagents to different Subagent Clusters

This includes to use of a smaller number of operational Agent Clusters with a higher number of Subagent Clusters and vice versa.

For information on how to set up Agent Clusters and Subagent Clusters see see JS7 - Management of Agent Clusters

Capabilities

Subagent Clusters include the following capabilities.

Implicit Subagent Cluster per Subagent

When adding a Subagent JOC Cockpit can be instructed to add a cluster that holds the single Subagent.

offer a number of capabilities:

  • A Subagent can be a member of any number of Subagent Clusters.
  • A Subagent Cluster can include a single Subagent and it can include any number of Subagents.
  • A Subagent Cluster defines fixed-priority or round-robin scheduling mode to switch between Subagents
  • This allows to assign an individual Subagent to a job should the job be executed with this Subagent only.
  • The name of the Subagent Cluster corresponds to the Subagent ID.

Unlimited Subagents per Cluster

Any number of Subagents can be added to a cluster.

  • Adding more Subagents to a round-robin cluster allows unlimited horizonal scaling.
  • Some might consider it paranoid to add a larger number of Subagents to a fixed-priority cluster, however, users are free to create a chain of Subagents that can replace each other.


Graphviz
templateGraphvizSubgraphs
digraph {
    compound=true;
    rankdir=LR;

    JOC [shape="rectangle",label="JOC Cockpit",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]
    Controller [shape="rectangle",label="Controller\nStandalone / Cluster",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]

    node [shape="record"];
    Director1 [label="<f0> Agent Cluster\nDirector Agent|<f1> Integrated\nSubagent",style="filled",fillcolor="darkorange1",fontname="Arial",fontsize="10pt"];
    
	Subagent1_1 [shape="rectangle",label="Subagent 1",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent1_2 [shape="rectangle",label="Subagent 2",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent1_3 [shape="rectangle",label="Subagent 3",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];

    { rank = same; JOC -> Controller -> Director1 }

    Director1 -> Subagent1_1 [lhead=cluster_subagent_1];

    subgraph cluster_subagent_1 {
        label="Subagent Cluster"; fontname="Arial"; fontsize="10pt";
        Subagent1_1 -> Subagent1_2 [label=" round-robin ",fontname="Arial",fontsize="10pt"];
        Subagent1_2 -> Subagent1_3 [label=" round-robin ",fontname="Arial",fontsize="10pt"];
        Subagent1_3 -> Subagent1_1;
    }
}

One Cluster per Subagent

When adding a Subagent, the JOC Cockpit can be instructed to add a Subagent Cluster which holds the single Subagent.

  • This allows a job to assigned to an individual Subagent if the job is to be executed only with this Subagent.
  • The name of the Subagent Cluster corresponds to the Subagent ID.


Graphviz
templateGraphvizSubgraphs
digraph {
    compound=true;
    rankdir=LR;

    JOC [shape="rectangle",label="JOC Cockpit",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]
    Controller [shape="rectangle",label="Controller\nStandalone / Cluster",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]

    node [shape="record"];
    Director1 [label="<f0> Agent Cluster\nDirector Agent|<f1> Integrated\nSubagent ",style="filled",fillcolor="darkorange1",fontname="Arial",fontsize="10pt"];
    
	Subagent1_1 [shape="rectangle",label="Subagent 1",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent2_1 [shape="rectangle",label="Subagent 1",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent3_1 [shape="rectangle",label="Subagent 1",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];

    { rank = same; JOC -> Controller -> Director1 }

    Director1 -> Subagent1_1 [lhead=cluster_subagent_1];
    Director1 -> Subagent2_1 [lhead=cluster_subagent_2];
    Director1 -> Subagent3_1 [lhead=cluster_subagent_3];

    subgraph cluster_subagent_1 {
        label="Subagent Cluster 1"; fontname="Arial"; fontsize="10pt";
        Subagent1_1 [label=" Subagent 1\n   standalone   ",fontname="Arial",fontsize="10pt"];
    }

    subgraph cluster_subagent_2 {
        label="Subagent Cluster 2"; fontname="Arial"; fontsize="10pt";
        Subagent2_1 [label=" Subagent 2\n   standalone  ",fontname="Arial",fontsize="10pt"];
    }

    subgraph cluster_subagent_3 {
        label="Subagent Cluster 3"; fontname="Arial"; fontsize="10pt";
        Subagent3_1 [label=" Subagent 3\n   standalone  ",fontname="Arial",fontsize="10pt"];
    }
}

Scheduling Modes

Subagents can be added for both fixed-priority and round-robin scheduling modes:

  • fixed-priority: execute jobs with the first Subagent and switch to the next Subagent only if the first Subagent becomes unavailable (active-passive cluster).
  • round-robin: execute each the next job on the next next Subagent (active-active cluster).

The JS7 allows to use mixed scheduling modes within the same cluster.


Graphviz
templateGraphvizSubgraphs
digraph {
    compound=true;
    rankdir=LR;

    JOC [shape="rectangle",label="JOC Cockpit",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]
    Controller [shape="rectangle",label="Controller\nStandalone / Cluster",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]

    node [shape="record"];
    Director1 [label="<f0> Agent Cluster\nDirector Agent|<f1> Integrated\nSubagent",style="filled",fillcolor="darkorange1",fontname="Arial",fontsize="10pt"];
    
	Subagent_active [shape="rectangle",label="Active Subagent",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent_standby [shape="rectangle",label="Standby Subagent",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];

	Subagent1_1 [shape="rectangle",label="Subagent 1",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent1_2 [shape="rectangle",label="Subagent 2",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent1_3 [shape="rectangle",label="Subagent 3",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];

    { rank = same; JOC -> Controller -> Director1 }

    Director1 -> Subagent_active [lhead=cluster_subagent_active_passive];
    Director1 -> Subagent1_1 [lhead=cluster_subagent_round_robin];

    subgraph cluster_subagent_active_passive {
        label="Subagent Cluster: active-passive"; fontname="Arial"; fontsize="10pt";
        Subagent_active -> Subagent_standby [label=" fixed-priority  ",fontname="Arial",fontsize="10pt"];
    }

    subgraph cluster_subagent_round_robin {
        label="Subagent Cluster: active-active"; fontname="Arial"; fontsize="10pt";
        Subagent1_1 -> Subagent1_2 [label=" round-robin ",fontname="Arial",fontsize="10pt"];
        Subagent1_2 -> Subagent1_3 [label=" round-robin ",fontname="Arial",fontsize="10pt"];
        Subagent1_3 -> Subagent1_1;
    }
}

Strategies

Director Agent as Subagent Cluster Member

Users can add the a Director Agent to their Subagent Clusters:

  • The Primary and Secondary Director Agents each include a Subagent that can be used to execute jobs.
  • The Director Subagent can be added to any Subagent Clusters.
  • Users can decide not to use the Director Agent for job execution but for orchestration of Subagents only in order to . This will guarantee the highest level of robustness.

Agent Clusters and Subagent Clusters

Users can apply different strategies to manage operational Agent Clusters and functional Subagent Clusters.

  • A single or a few Agent Clusters can be used that with each holds holding a larger number of Subagent Clusters.
    • Each Subagent Cluster selects a number of Subagents.
    • The same Subagents can occur in any number of Subagent Clusters.
    • The same Subagents cannot occur in more than one Agent Cluster.
    • This scenario can be applied for load sharing between server nodes that act for a number of clustered applications.
  • A larger number of Agent Clusters can be used that hold a single or a small number of Subagent Clusters.
    • Agent Clusters are autonomous and are not related to each other. 
    • Each Agent Cluster is assigned an individual Director Agent that is optionally clustered.
    • This scenario is preferably applied in a situation when communication between a Director Agent and Subagents should be limited to a few servers, for example for use of , when Agent Clusters are used in separate network zones.


Graphviz
templateGraphvizSubgraphs
digraph {
    compound=true;
    rankdir=LR;

    JOC [shape="rectangle",label="JOC Cockpit",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]
    Controller [shape="rectangle",label="Controller\nStandalone / Cluster",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]

    node [shape="record"];
    Director1 [label="<f0> Agent Cluster 1\nDirector Agent|<f1> Integrated\nSubagent",style="filled",fillcolor="darkorange1",fontname="Arial",fontsize="10pt"];
    node [shape="record"];
    Director2 [label="<f0> Agent Cluster 2\nDirector Agent|<f1> Integrated\nSubagent",style="filled",fillcolor="darkorange1",fontname="Arial",fontsize="10pt"];
    
	Subagent1a_1 [shape="rectangle",label="Subagent 1",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent1a_2 [shape="rectangle",label="Subagent 2",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent1a_3 [shape="rectangle",label="Subagent 3",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];

	Subagent2a_1 [shape="rectangle",label="Subagent 4",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent2a_2 [shape="rectangle",label="Subagent 5",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];

	Subagent2b_1 [shape="rectangle",label="Subagent 4",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent2b_2 [shape="rectangle",label="Subagent 6",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];
	Subagent2b_3 [shape="rectangle",label="Subagent 7",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"];

    { rankdir = LR; rank = same; JOC -> Controller -> Director1; Controller -> Director2; }

    Director1 -> Subagent1a_1 [lhead=cluster_subagent_1a];
    Director2 -> Subagent2a_1 [lhead=cluster_subagent_2a];
    Director2 -> Subagent2b_1 [lhead=cluster_subagent_2b];

    subgraph cluster_subagent_1a {
        label="Subagent Cluster 1"; fontname="Arial"; fontsize="10pt";
        Subagent1a_1 -> Subagent1a_2 [label=" round-robin ",fontname="Arial",fontsize="10pt"];
        Subagent1a_2 -> Subagent1a_3 [label=" round-robin ",fontname="Arial",fontsize="10pt"];
        Subagent1a_3 -> Subagent1a_1;
    }
    subgraph cluster_subagent_2a {
        label="Subagent Cluster 2a"; fontname="Arial"; fontsize="10pt";
        Subagent2a_1 -> Subagent2a_2 [label=" fixed-priority  ",fontname="Arial",fontsize="10pt"];
    }

    subgraph cluster_subagent_2b {
        label="Subagent Cluster 2b"; fontname="Arial"; fontsize="10pt";
        Subagent2b_1 -> Subagent2b_2 [label=" round-robin ",fontname="Arial",fontsize="10pt"];
        Subagent2b_2 -> Subagent2b_3 [label=" round-robin ",fontname="Arial",fontsize="10pt"];
        Subagent2b_3 -> Subagent2b_1;
    }
}