On Mon, Feb 20, 2012 at 8:17 PM, Nirmal Fernando <nir...@wso2.com> wrote:
> Hi Shankar,
>
> On Mon, Feb 20, 2012 at 5:34 PM, Selvaratnam Uthaiyashankar
> <shan...@wso2.com> wrote:
>>
>> Hi Nirmal,
>>
>> Good progress!. we can do a review on the work already done.
>
>
> Thanks, will arrange a review this week.
>
>>
>>
>> Did you try the agent in windows?
>
>
> No, I didn't!
>
>>
>> Is it using any native code?
>
>
> It needs to use native code in cases like spawning a new JVM (in Ubuntu we
> need /bin/sh to run the script 'wso2server.sh' in windows we need to run the
> batch file.
> But I believe this can be handled within the code it self by checking the OS
> name and execute appropriate commands!
>
>>
>>
>> See some comments below.
>>
>> On Sat, Feb 18, 2012 at 11:10 PM, Nirmal Fernando <nir...@wso2.com> wrote:
>> > Hi All,
>> >
>> > I've started to implement 'new autoscaler architecture' [1] on February
>> > 8th.
>> > After having a discussion with Azeez, we came up with three milestones
>> > for
>> > the first iteration.
>> >
>> > -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> >
>> > M1: Make a WS call spawns a new JVM instance & make the new instance
>> > joins
>> > the cluster with hard coded Agents.
>> >
>> > M2: Finish Agent registration related parts and spawn a new instance in
>> > a
>> > selected Agent.
>> >
>> > M3: Let current autoscaler component calls 'AutoscalerService' and
>> > spawns a
>> > new JVM instance in a selected Agent. Also applying WS security.
>> >
>> >
>> > -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> >
>> > I've attached set of images which depicts different stages of new
>> > architecture. Reading order of images is as follows:
>> >
>> > agent-reg --> autoscaler --> spawn --> cluster
>> >
>> >
>> > M1 is already finished.
>> >
>> > I've almost done the Agent registration (M2) aspect.
>> >
>> > What it does now?
>> >
>> > AgentManagementService and AutoscalerService should be deployed in the
>> > back-end server. (say: IP is 192.168.1.2)
>> >
>> > AgentService should be deployed in machines (i.e. where new JVM
>> > instances
>> > will be spawned). (say: IP is 192.168.1.3)
>> >
>> > AgentService do a web service call (eg:  curl -X GET
>> > http://localhost:8080/axis2/services/AgentService/agent) to
>> > AgentManagementService and get registered. Then AgentManagementService
>> > stores the URL (eg:
>> > http://192.168.1.3:8080/axis2/services/AgentService/) of
>> > that particular request.
>> >
>> > When autoscaler API (implementing this is M3) wanted to spawn a new
>> > instance
>> > (JVM or EC2 or anything else), it should call AutoscalerService (eg:
>> > curl
>> > --data "instanceName=as" -X POST
>> > http://192.168.1.2:8080/axis2/services/AutoscalerService/instance). Then
>> > AutoscalerService decides which kind of instance to spawn.
>> >
>> > If AutoscalerService decides to spawn a JVM instance, it creates a new
>> > JVMAdaptor instance. JVMAdaptor then calls (eg: curl -X GET
>> > http://192.168.1.2:8080/axis2/services/AgentManagementService/agent)
>> > AgentManagementService in order to pick an Agent. AgentManagementService
>> > picks an Agent in a round robin manner and sends back that Agent's EPR
>> > (http://192.168.1.3:8080/axis2/services/AgentService/) to JVMAdaptor.
>> > Then
>> > JVMAdaptor does a web service call to that particular AgentService and
>> > asked
>> > it to spawn the requested instance (instance is yet hard coded).
>> >
>> > Spawned instance then joins the cluster.
>> >
>> >
>> > Current observations:
>> >
>> > Currently starting instance aspect is done.
>> >
>> > I've tested this using 2 machines, and starting instance works fine.
>> >
>> > It is observed that the spawned JVM instances get killed when you issue
>> > 'ctrl+c' in the terminal where axis2 running. But when I killed
>> > axis2server.sh process only, the new JAVA process wasn't get killed. To
>> > avoid process get killing when issue ctrl+c, we might need to handle
>> > SIGINT
>> > [2]. Can't we be happy with the fact that it doesn't get killed after
>> > killing axis2server.sh?
>>
>> JVMs (which were created) should live even if  you kill the agent.
>>
>
> Yes, but the problem is how you kill! If you use kill -9 and kills Axis2
> related process (Axis2 is where Agent Service is deployed), spawned JVM
> instances aren't get killed.
> Anyway will research a bit more, I understand that spawned instance should
> never get killed, unless it is asked to!
>
>>
>> >
>> >
>> > Work to be done:
>> >
>> > Terminating and finding instance aspects should be addressed.
>>
>> You have to keep track of which JVMs/VMs created by the autoscaler.
>> Otherwise you will not be able to stop them when you want to scale
>> down. I believe, this information should be stored/kept with
>> "autoscaler service".
>
>
> I have started to implement this part today! According to the design
> 'Autoscaler Service' is only responsible for
> deciding the type of instance it should be spawned. That is a JVM instance
> or an EC2 instance or something else. Thus, it keeps track of
> the type of instance spawned.
>
> It is JVM Adaptor which keeps track of instances spawned in each Agent.

+1. It should be JVM adapter for JVM instances and EC2 adapter for EC2
instance, etc.

Shankar


>
> And it is respective Agent Service that kills an instance, upon a request!
>
>
>>
>>
>> > The 'sad side' (when things go wrong) should be addressed.
>> > AgentServices should know EPR of AgentManagementService (this is hard
>> > coded
>> > now). Should read from a config file?
>>
>> +1 fore reading from config file.
>
>
> Great!
>
>>
>>
>>
>> > JVMAdaptor should keep a map of Agent EPR to AgentService client, to
>> > avoid
>> > creating multiple clients to access the same Agent.
>> > AgentService should keep a count of spawned instances and get itself
>> > unregistered if it can't handle any new instances (threshold value
>> > should be
>> > decided). And when it feels (another threshold) that it can handle new
>> > instances it should register again.
>> > Autoscaler API should be designed.
>> > Should port EC2 client to EC2Adaptor.
>> > Should test the whole scenario.
>> >
>> >
>> > I appreciate your comments/thoughts on above facts.
>> >
>> >
>> > [1]
>> > http://mail.wso2.org/mailarchive/architecture/2011-October/006414.html
>> >
>> > [2] http://www.cons.org/cracauer/sigint.html
>> >
>> >
>> >
>> > --
>> >
>> > Thanks & regards,
>> > Nirmal
>> >
>> > Software Engineer- Platform Technologies Team, WSO2 Inc.
>> > Mobile: +94715779733
>> > Blog: http://nirmalfdo.blogspot.com/
>>
>>
>>
>> --
>> S.Uthaiyashankar
>> Senior Architect & Senior Manager
>> WSO2 Inc.
>> http://wso2.com/ - "lean . enterprise . middleware"
>>
>> Phone: +94 714897591
>
>
>
>
> --
>
> Thanks & regards,
> Nirmal
>
> Software Engineer- Platform Technologies Team, WSO2 Inc.
> Mobile: +94715779733
> Blog: http://nirmalfdo.blogspot.com/



-- 
S.Uthaiyashankar
Senior Architect & Senior Manager
WSO2 Inc.
http://wso2.com/ - "lean . enterprise . middleware"

Phone: +94 714897591
_______________________________________________
Carbon-dev mailing list
Carbon-dev@wso2.org
http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev

Reply via email to