Hi

As you aware, in the composite application we can define the depencies
between groups/cartridges. Autoscaler's responsible is to parse this
dependencies and build up a logical relationship model in order to handle
the dependency information among the child nodes. As we have the
hierarchical monitors in autoscaler, i propose to have dependencies
information in each monitor that they aware of (the immediate child only).
In that monitor, we need to identify the group/cartridge which can be
started in parallel. So that a monitor can look at it's dependency and
control it's immediate children based on that. Once all the children are
active, it can pass the control to it's parent. For Eg:

If we take the top level in Composite application which has mysqlGroup,
postgresGroup, php, tomcat, apimanager and esb. If they have an alias
saying my + cartridge/groupName then we can define the dependency
information as follows:
            - myPhp depends on myPostgresGroup (means postgresGroup should
be started before php)
            - myTomcat depends on myMysqlGroup
            - myApiManager depends on myTomcat
            - myEsb depends on myTomcat

Like wise, groups will define their own dependency as well.

In that way, we need to represent these dependency information as part of
Composite Application definition/GroupDefinition. In order to represent
this dependency information given above for Composite Application, i would
suggest to have the following in Composite Application definition.

 "startupOrders": [
          "mypostgresGroup, myphp",
          "mysqlGroup, mytomcat",
          "mytomcat, myapimanager",
          "mytomcat, myesb"
      ]

You can use the same format in GroupDefinition to define dependencies in a
group.

As per the example, autoscaler will build a dependency tree for
ApplicationMonitor as below in order to identify the parallel and dependent
ones. So that Autoscaler will start up same level children monitors as in
parallel.


​
As above, ApplicationMonitor will start GroupMonitors of myPostgresGroup
and myMysqlGroup in parallel. Once postgres becomes active,
ApplicationMonitor will start ClusterMonitor for myPhp. Once
myPostgresGroup becomes active, ApplicationMonitor will start the immediate
child myTomcat. Once myTomcat becomes active, ApplicationMonitor will start
the myAppServer and myEsb in parallel. This will be applicable for
GroupMonitors as well. They can look at their own dependency tree and will
start their children.

Please share your suggestions on the above model to handle the Dependency
information of Composite Application in autoscaler.


Thanks,
Reka
























-- 
Reka Thirunavukkarasu
Senior Software Engineer,
WSO2, Inc.:http://wso2.com,
Mobile: +94776442007


​

Reply via email to