Hi Reka,

Was re-reading the email, couple of points to consider based on my experience 
with the POC, please see inline (“Martin>”):

Regards

Martin


From: Reka Thirunavukkarasu [mailto:r...@wso2.com]
Sent: Wednesday, July 09, 2014 5:43 AM
To: Udara Liyanage
Cc: dev; Lakmal Warusawithana; Martin Eppel (meppel); Isuru Haththotuwa
Subject: Re: Composite Application Deployment and Application Monitor for 
Autoscaler

Hi Udara,

On Wed, Jul 9, 2014 at 5:43 PM, Udara Liyanage 
<ud...@wso2.com<mailto:ud...@wso2.com>> wrote:
Hi Reka,

Currently in AS we have a cluster moniter which act on ClusterCreated events 
when a subscription happens. Are we going to use the same ClusterMoniter for 
compositeApp deployment or adding another moniter like ApplicationMoniter.

We can use ApplicationMonitor for the global monitoring of a composite 
Application. This will get added when AS receives ApplicationCreatedEvent. We 
can still have the cluster monitor registered per cluster. In that case, 
ApplicationMonitor can send the controls to ClusterMonitor as what to do such 
as start, pause, terminate and etc according to startup or termination 
dependency characteristics of other dependents. Also, independent clusters can 
be monitored by Cluster Monitor without any issue..I believe, this will improve 
the performance than ApplicationMonitor itself evaluates all dependencies and 
monitors whole clusters. In that case, the decision of independent clusters 
might get delayed when ApplicationMonitor goes through all the clusters. WDYT?
Thanks,
Reka

On Wed, Jul 9, 2014 at 4:33 PM, Reka Thirunavukkarasu 
<r...@wso2.com<mailto:r...@wso2.com>> wrote:
Hi all,
These are the break down that we may need to consider when deploying Composite 
Application and when starting an ApplicationMonitor. I have integrated the 
earlier subscription model with Composite Application. Please see below and 
provide you thoughts on this. So that we can finalize the things before the 
implementation. Sorry for the bit long mail..

*As discussed in the previous mail by Martin and Isuruh, now that the service 
group definitions are deployed independently and Composite Application will use 
a reference to pre-deployed service Group with autoscaling policy, deployment 
policy and etc.
   - service group definition is deployed and persisted in SM
   - Composite Application Deployment
        + This will be parsed by SM to get the already deployed service Group 
definition to validate and to load the information.
       + SM needs to validate the deployment policy and autoscale policy 
against cartridge Type by calling Autoscaler.
        + SM needs to perform any other validation as required or any logical 
validation
        + Once all validation are done, SM needs to extract subscription 
related information from Composite Application and persist in it.
        + SM needs to build the payload or pass relevant information to CC to 
build the payload.
        + SM invokes service call to CC to deploy the Composite Application 
with all data.
        + CC will persist any required data from Composite Application and 
build the Topology with Composite Application. In that case, it should even 
create a Cluster with Composite Application and build the data model. Then 
only, it should send the ApplicationCreatedEvent. If we don't build Cluster 
object with ApplicationCreatedEvent, then autoscaler has to wait for each 
ClusterCreatedEvent to perform the actions. In that case, autoscaler won't 
aware of how many ClusterCreatedEvents it should receive before starts 
monitoring on a Composite Application. If all the Cluster is available with 
Composite Application as part of ApplicationCreatedEvent, then autoscaler can 
start monitor and evaluate dependencies to spin the instances.
* New events to the Topology
    -ApplicationCreatedEvent
       Sent after the composite Application got deployed successfully
    -ApplicationTerminatedEvent
       when composite application undeployed
   -GroupStartEvent
      After cluster/clusters in a groups gets started with an instance
   -GroupActivatedEvent
     After all the clusters in the group becomes active with the minimum member 
count
   -GroupterminatedEvent
     After a group terminated
   -GroupInMaintenanceModeEvent
     After a group trying to restart on of it's internal cartridge cluster or 
group.

*Application Monitor in autoscaler
   - has to find out the dependencies, get the least dependent cartridge type/s 
or group/s and start minimum rule for them individually or in parallel 
according to the start up order specified.
   - CC has to send InstanceSpawned/GroupStartedEvent. Once instance/s 
activated, CC has to check the minimum no of instance count available in the 
Cluster from Topology, and send the GroupActivatedEvent or CC has to follow any 
other approach to send GroupActivatedEvent.
  - In the member activation or Group activation start the next least dependent 
cartridge type/s or group/s
* Find an optimized algorithm to traverse the relation data model for the 
Composite Application. I assume, it will be a tree structure..Will autoscaler 
or LB or anyone who subscribes to Topology require this at any point?
“Martin>”: yes, it will be a tree structure (dependencies), with multiple roots 
though. From the use cases I have seen we have to allow multiple roots, e.g. 
A->B->C, D->B->C so it’s more of a graph structure with up and down stream 
dependencies and not necessarily a common root for all.
* We need to revise our relational data model according to the current 
Composite Application Definition. I believe, the same group with different 
alias may present in the relational data model more than one time. Eg:
                                                         App1
                                                            |
                    
-------------------------------------------------------------------------------
                    |                                                           
                   |

              Group1(myapp)                                                     
  Group2(myapp2)
                    |                                                           
                   |
          -------------------------                                             
      ------------------------
          |                        |                                            
      |                        |

Group2(myapp3)       cartridge1(mycar1)             cartirdge2(mycar2)      
cartridge3(mycar3)
Eg: Group1(myapp) - Group1 is the group name and myapp is the alias

Where Group2 is getting used twice in the data model. So, we need to keep 
reference of Group2 more than one place. If we already did so, please ignore 
this.
Please do add, if there is any missing items to be considered to the list.

“Martin>” –Also, we have to keep in mind that when a group is auto scaled a new 
instance (with a new instance id) will be created with new instances of the 
group members (cartridges, nested groups). So I think we’ll have to distinguish 
between group name and a group id since the dependency check has to compute 
dependencies for specific instance rather group type.


Thanks,
Reka




--
Reka Thirunavukkarasu
Senior Software Engineer,
WSO2, Inc.:http://wso2.com,
Mobile: +94776442007<tel:%2B94776442007>




--

Udara Liyanage
Software Engineer
WSO2, Inc.: http://wso2.com<http://wso2.com/>
lean. enterprise. middleware
web: http://udaraliyanage.wordpress.com
phone: +94 71 443 6897



--
Reka Thirunavukkarasu
Senior Software Engineer,
WSO2, Inc.:http://wso2.com,
Mobile: +94776442007<tel:%2B94776442007>

Reply via email to