Page History
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 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.
One Subagent Cluster per Subagent
When adding a Subagent JOC Cockpit can be instructed to add a Subagent Cluster that holds the single Subagent.
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
- This allows to assign a job an individual Subagent should the job be executed with this Subagent only.
- The name of the Subagent Cluster corresponds to the Subagent ID.
Graphviz | ||
---|---|---|
| ||
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"]; Subagent2Subagent1_12 [shape="rectangle",label="Subagent 12",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"]; Subagent3Subagent1_13 [shape="rectangle",label="Subagent 13",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"]; { rank = same; JOC -> Controller -> Director1 } Director1 -> Subagent1_1 [lhead=cluster_subagent_1]; Director1 -> Subagent2_1 [lhead=subgraph cluster_subagent_2]; 1 { Director1 -> Subagent3_1 [lhead=cluster_subagent_3]; subgraph cluster_subagent_1 { label="Subagent Cluster 1"; fontname="Arial"; fontsize="10pt"; Subagent1_1 -> Subagent1_2 [label=" Subagent 1\n standalone round-robin ",fontname="Arial",fontsize="10pt"]; } subgraph cluster_subagentSubagent1_2 { -> Subagent1_3 [label="Subagent Clusterround-robin 2"; ,fontname="Arial"; ,fontsize="10pt"]; Subagent2Subagent1_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 | ||
---|---|---|
| ||
digraph { compound=true1 [label=" Subagent 2\n standalone ",fontname="Arial",fontsize="10pt"]; } subgraph cluster_subagent_3 { label="Subagent Cluster 3"; fontname="Arial"; fontsize="10pt"; rankdir=LR; Subagent3_1JOC [shape="rectangle",label=" Subagent 3\n standalone JOC Cockpit",style="filled",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"]; } } |
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 | ||
---|---|---|
| ||
digraph { compound=true; rankdir=LR; JOCController [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="JOCSubagent Cockpit1",style="filled",fillcolor="lightskybluedarkolivegreen2",fontname="Arial",fontsize="10pt"] Controller; Subagent3_1 [shape="rectangle",label="Controller\nStandalone / ClusterSubagent 1",style="filled",fillcolor="lightskybluedarkolivegreen2",fontname="Arial",fontsize="10pt"] node [shape="record""10pt"]; { rank = same; JOC -> Controller -> Director1 } Director1 -> Subagent1_1 [lhead=cluster_subagent_1]; 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-> 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"]; Subagent1_3 [shape="rectangle", } subgraph cluster_subagent_2 { label="Subagent Cluster 3",style="filled",fillcolor="darkolivegreen2",2"; fontname="Arial",; fontsize="10pt"]; { rank = same; JOC -> Controller -> Director1 } Director1 -> Subagent1_1 [lhead=cluster_subagent_1];Subagent2_1 [label=" Subagent 2\n standalone ",fontname="Arial",fontsize="10pt"]; } subgraph cluster_subagent_13 { label="Subagent Cluster 3"; fontname="Arial"; fontsize="10pt"; Subagent1_1 -> Subagent1_2 [label=" round-robin ",fontname="Arial",fontsize="10pt"]; Subagent1_2 -> Subagent1_3Subagent3_1 [label=" round-robin Subagent 3\n standalone ",fontname="Arial",fontsize="10pt"]; Subagent1_3 -> Subagent1_1; } } |
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).
...
Graphviz | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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 64",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"]; Subagent2b_2 [shape="rectangle",label="Subagent 76",style="filled",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"]; Subagent2b_3 [shape="rectangle",label="Subagent 87",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_21 [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; } } |
...