Hi All, I think the conclusion is like this,
1, We make the gfac as a worker not a thrift service and we can start multiple workers either with bunch of providers and handlers configured in each worker or provider specific workers to handle the class path issues (not the common scenario). 2. Gfac workers can be configured to watch for a given path in zookeeper, and multiple workers can listen to the same path. Default path can be /airavata/gfac or can configure paths like /airavata/gfac/gsissh /airavata/gfac/bes. 3. Orchestrator can configure with a logic to store experiment IDs in zookeeper with a path, and orchestrator can be configured to provider specific path logic too. So when a new request come orchestrator store the experimentID and these experiments IDs are stored in Zk as a queue. 4. Since gfac workers are watching they will be notified and as supun suggested can use a leader selection algorithm[1] and one gfac worker will take the leadership for each experiment. If there are gfac instances for each provider same logic will apply among those nodes with same provider type. [1]http://curator.apache.org/curator-recipes/leader-election.html I would like to implement this if there are no objections. Lahiru On Mon, Jun 16, 2014 at 11:51 AM, Supun Kamburugamuva <[email protected]> wrote: > Hi Marlon, > > I think you are exactly correct. > > Supun.. > > > On Mon, Jun 16, 2014 at 11:48 AM, Marlon Pierce <[email protected]> wrote: > > > Let me restate this, and please tell me if I'm wrong. > > > > Orchestrator decides (somehow) that a particular job requires JSDL/BES, > so > > it places the Experiment ID in Zookeeper's /airavata/gfac/jsdl-bes node. > > GFAC servers associated with this instance notice the update. The first > > GFAC to claim the job gets it, uses the Experiment ID to get the detailed > > information it needs from the Registry. ZooKeeper handles the locking, > etc > > to make sure that only one GFAC at a time is trying to handle an > experiment. > > > > Marlon > > > > > > On 6/16/14, 11:42 AM, Lahiru Gunathilake wrote: > > > >> Hi Supun, > >> > >> Thanks for the clarification. > >> > >> Regards > >> Lahiru > >> > >> > >> On Mon, Jun 16, 2014 at 11:38 AM, Supun Kamburugamuva < > [email protected]> > >> wrote: > >> > >> Hi Lahiru, > >>> > >>> My suggestion is that may be you don't need a Thrift service between > >>> Orchestrator and the component executing the experiment. When a new > >>> experiment is submitted, orchestrator decides who can execute this job. > >>> Then it put the information about this experiment execution in > ZooKeeper. > >>> The component which wants to executes the experiment is listening to > this > >>> ZooKeeper path and when it sees the experiment it will execute it. So > >>> that > >>> the communication happens through an state change in ZooKeeper. This > can > >>> potentially simply your architecture. > >>> > >>> Thanks, > >>> Supun. > >>> > >>> > >>> On Mon, Jun 16, 2014 at 11:14 AM, Lahiru Gunathilake < > [email protected]> > >>> wrote: > >>> > >>> Hi Supun, > >>>> > >>>> So your suggestion is to create a znode for each thrift service we > have > >>>> and > >>>> when the request comes that node gets modified with input data for > that > >>>> request and thrift service is having a watch for that node and it will > >>>> be > >>>> notified because of the watch and it can read the input from zookeeper > >>>> and > >>>> invoke the operation? > >>>> > >>>> Lahiru > >>>> > >>>> > >>>> On Thu, Jun 12, 2014 at 11:50 PM, Supun Kamburugamuva < > >>>> [email protected]> > >>>> wrote: > >>>> > >>>> Hi all, > >>>>> > >>>>> Here is what I think about Airavata and ZooKeeper. In Airavata there > >>>>> are > >>>>> many components and these components must be stateless to achieve > >>>>> scalability and reliability.Also there must be a mechanism to > >>>>> > >>>> communicate > >>>> > >>>>> between the components. At the moment Airavata uses RPC calls based > on > >>>>> Thrift for the communication. > >>>>> > >>>>> ZooKeeper can be used both as a place to hold state and as a > >>>>> > >>>> communication > >>>> > >>>>> layer between the components. I'm involved with a project that has > many > >>>>> distributed components like AIravata. Right now we use Thrift > services > >>>>> > >>>> to > >>>> > >>>>> communicate among the components. But we find it difficult to use RPC > >>>>> > >>>> calls > >>>> > >>>>> and achieve stateless behaviour and thinking of replacing Thrift > >>>>> > >>>> services > >>>> > >>>>> with ZooKeeper based communication layer. So I think it is better to > >>>>> explore the possibility of removing the Thrift services between the > >>>>> components and use ZooKeeper as a communication mechanism between the > >>>>> services. If you do this you will have to move the state to ZooKeeper > >>>>> > >>>> and > >>>> > >>>>> will automatically achieve the stateless behaviour in the components. > >>>>> > >>>>> Also I think trying to make ZooKeeper optional is a bad idea. If we > are > >>>>> trying to integrate something fundamentally important to architecture > >>>>> as > >>>>> how to store state, we shouldn't make it optional. > >>>>> > >>>>> Thanks, > >>>>> Supun.. > >>>>> > >>>>> > >>>>> On Thu, Jun 12, 2014 at 10:57 PM, Shameera Rathnayaka < > >>>>> [email protected]> wrote: > >>>>> > >>>>> Hi Lahiru, > >>>>>> > >>>>>> As i understood, not only reliability , you are trying to achieve > >>>>>> some > >>>>>> other requirement by introducing zookeeper, like health monitoring > of > >>>>>> > >>>>> the > >>>> > >>>>> services, categorization with service implementation etc ... . In > that > >>>>>> case, i think we can get use of zookeeper's features but if we only > >>>>>> > >>>>> focus > >>>> > >>>>> on reliability, i have little bit of concern, why can't we use > >>>>>> > >>>>> clustering + > >>>> > >>>>> LB ? > >>>>>> > >>>>>> Yes it is better we add Zookeeper as a prerequisite if user need to > >>>>>> use > >>>>>> it. > >>>>>> > >>>>>> Thanks, > >>>>>> Shameera. > >>>>>> > >>>>>> > >>>>>> On Thu, Jun 12, 2014 at 5:19 AM, Lahiru Gunathilake < > >>>>>> [email protected] > >>>>>> wrote: > >>>>>> > >>>>>> Hi Gagan, > >>>>>>> > >>>>>>> I need to start another discussion about it, but I had an offline > >>>>>>> discussion with Suresh about auto-scaling. I will start another > >>>>>>> thread > >>>>>>> about this topic too. > >>>>>>> > >>>>>>> Regards > >>>>>>> Lahiru > >>>>>>> > >>>>>>> > >>>>>>> On Wed, Jun 11, 2014 at 4:10 PM, Gagan Juneja < > >>>>>>> > >>>>>> [email protected] > >>>> > >>>>> wrote: > >>>>>>> > >>>>>>> Thanks Lahiru for pointing to nice library, added to my dictionary > >>>>>>>> > >>>>>>> :). > >>>> > >>>>> I would like to know how are we planning to start multiple servers. > >>>>>>>> 1. Spawning new servers based on load? Some times we call it as > auto > >>>>>>>> scalable. > >>>>>>>> 2. To make some specific number of nodes available such as we > want 2 > >>>>>>>> servers to be available at any time so if one goes down then I > need > >>>>>>>> > >>>>>>> to > >>>> > >>>>> spawn one new to make available servers count 2. > >>>>>>>> 3. Initially start all the servers. > >>>>>>>> > >>>>>>>> In scenario 1 and 2 zookeeper does make sense but I don't believe > >>>>>>>> > >>>>>>> existing > >>>>>>> > >>>>>>>> architecture support this? > >>>>>>>> > >>>>>>>> Regards, > >>>>>>>> Gagan > >>>>>>>> On 12-Jun-2014 1:19 am, "Lahiru Gunathilake" <[email protected]> > >>>>>>>> > >>>>>>> wrote: > >>>>>>> > >>>>>>>> Hi Gagan, > >>>>>>>>> > >>>>>>>>> Thanks for your response. Please see my inline comments. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On Wed, Jun 11, 2014 at 3:37 PM, Gagan Juneja < > >>>>>>>>> > >>>>>>>> [email protected]> > >>>>>>> > >>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>> Hi Lahiru, > >>>>>>>>>> Just my 2 cents. > >>>>>>>>>> > >>>>>>>>>> I am big fan of zookeeper but also against adding multiple hops > in > >>>>>>>>>> > >>>>>>>>> the > >>>>>>> > >>>>>>>> system which can add unnecessary complexity. Here I am not able to > >>>>>>>>>> understand the requirement of zookeeper may be I am wrong > because > >>>>>>>>>> > >>>>>>>>> of > >>>> > >>>>> less > >>>>>>> > >>>>>>>> knowledge of the airavata system in whole. So I would like to > >>>>>>>>>> > >>>>>>>>> discuss > >>>> > >>>>> following point. > >>>>>>>>>> > >>>>>>>>>> 1. How it will help us in making system more reliable. Zookeeper > >>>>>>>>>> > >>>>>>>>> is > >>>> > >>>>> not > >>>>>>> > >>>>>>>> able to restart services. At max it can tell whether service is up > >>>>>>>>>> > >>>>>>>>> or not > >>>>>>> > >>>>>>>> which could only be the case if airavata service goes down > >>>>>>>>>> > >>>>>>>>> gracefully and > >>>>>>> > >>>>>>>> we have any automated way to restart it. If this is just matter of > >>>>>>>>>> > >>>>>>>>> routing > >>>>>>> > >>>>>>>> client requests to the available thrift servers then this can be > >>>>>>>>>> > >>>>>>>>> achieved > >>>>>>> > >>>>>>>> with the help of load balancer which I guess is already there in > >>>>>>>>>> > >>>>>>>>> thrift > >>>>>>> > >>>>>>>> wish list. > >>>>>>>>>> > >>>>>>>>>> We have multiple thrift services and currently we start only > one > >>>>>>>>> > >>>>>>>> instance > >>>>>>> > >>>>>>>> of them and each thrift service is a stateless service. To keep > the > >>>>>>>>> > >>>>>>>> high > >>>>>>> > >>>>>>>> availability we have to start multiple instances of them in > >>>>>>>>> > >>>>>>>> production > >>>> > >>>>> scenario. So for clients to get an available thrift service we can > >>>>>>>>> > >>>>>>>> use > >>>> > >>>>> zookeeper znodes to represent each available service. There are > >>>>>>>>> > >>>>>>>> some > >>>> > >>>>> libraries which is doing similar[1] and I think we can use them > >>>>>>>>> > >>>>>>>> directly. > >>>>>>> > >>>>>>>> 2. As far as registering of different providers is concerned do > >>>>>>>>>> > >>>>>>>>> you > >>>> > >>>>> think for that we really need external store. > >>>>>>>>>> > >>>>>>>>>> Yes I think so, because its light weight and reliable and we > have > >>>>>>>>> > >>>>>>>> to > >>>> > >>>>> do > >>>>>>> > >>>>>>>> very minimal amount of work to achieve all these features to > >>>>>>>>> > >>>>>>>> Airavata > >>>> > >>>>> because zookeeper handle all the complexity. > >>>>>>>>> > >>>>>>>>> I have seen people using zookeeper more for state management in > >>>>>>>>>> distributed environments. > >>>>>>>>>> > >>>>>>>>>> +1, we might not be the most effective users of zookeeper > because > >>>>>>>>> > >>>>>>>> all > >>>> > >>>>> of > >>>>>>> > >>>>>>>> our services are stateless services, but my point is to achieve > >>>>>>>>> fault-tolerance we can use zookeeper and with minimal work. > >>>>>>>>> > >>>>>>>>> I would like to understand more how can we leverage zookeeper > in > >>>>>>>>>> airavata to make system reliable. > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> [1]https://github.com/eirslett/thrift-zookeeper > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Regards, > >>>>>>>>>> Gagan > >>>>>>>>>> On 12-Jun-2014 12:33 am, "Marlon Pierce" <[email protected]> > wrote: > >>>>>>>>>> > >>>>>>>>>> Thanks for the summary, Lahiru. I'm cc'ing the Architecture > list > >>>>>>>>>>> > >>>>>>>>>> for > >>>> > >>>>> additional comments. > >>>>>>>>>>> > >>>>>>>>>>> Marlon > >>>>>>>>>>> > >>>>>>>>>>> On 6/11/14 2:27 PM, Lahiru Gunathilake wrote: > >>>>>>>>>>> > >>>>>>>>>>>> Hi All, > >>>>>>>>>>>> > >>>>>>>>>>>> I did little research about Apache Zookeeper[1] and how to use > >>>>>>>>>>>> > >>>>>>>>>>> it > >>>> > >>>>> in > >>>>>>> > >>>>>>>> airavata. Its really a nice way to achieve fault tolerance and > >>>>>>>>>>>> > >>>>>>>>>>> reliable > >>>>>>>>>>> > >>>>>>>>>>>> communication between our thrift services and clients. > >>>>>>>>>>>> > >>>>>>>>>>> Zookeeper > >>>> > >>>>> is a > >>>>>>> > >>>>>>>> distributed, fault tolerant system to do a reliable > >>>>>>>>>>>> > >>>>>>>>>>> communication > >>>> > >>>>> between > >>>>>>>>>>> > >>>>>>>>>>>> distributed applications. This is like an in-memory file > system > >>>>>>>>>>>> > >>>>>>>>>>> which > >>>>>>> > >>>>>>>> has > >>>>>>>>>>> > >>>>>>>>>>>> nodes in a tree structure and each node can have small amount > >>>>>>>>>>>> > >>>>>>>>>>> of > >>>> > >>>>> data > >>>>>>> > >>>>>>>> associated with it and these nodes are called znodes. Clients > >>>>>>>>>>>> > >>>>>>>>>>> can > >>>> > >>>>> connect > >>>>>>>>>>> > >>>>>>>>>>>> to a zookeeper server and add/delete and update these znodes. > >>>>>>>>>>>> > >>>>>>>>>>>> In Apache Airavata we start multiple thrift services and > >>>>>>>>>>>> > >>>>>>>>>>> these > >>>> > >>>>> can > >>>>>>> > >>>>>>>> go > >>>>>>>>>>> > >>>>>>>>>>>> down for maintenance or these can crash, if we use zookeeper > to > >>>>>>>>>>>> > >>>>>>>>>>> store > >>>>>>> > >>>>>>>> these > >>>>>>>>>>> > >>>>>>>>>>>> configuration(thrift service configurations) we can achieve a > >>>>>>>>>>>> > >>>>>>>>>>> very > >>>> > >>>>> reliable > >>>>>>>>>>> > >>>>>>>>>>>> system. Basically thrift clients can dynamically discover > >>>>>>>>>>>> > >>>>>>>>>>> available > >>>>>>> > >>>>>>>> service > >>>>>>>>>>> > >>>>>>>>>>>> by using ephemeral znodes(Here we do not have to change the > >>>>>>>>>>>> > >>>>>>>>>>> generated > >>>>>>> > >>>>>>>> thrift client code but we have to change the locations we are > >>>>>>>>>>>> > >>>>>>>>>>> invoking > >>>>>>> > >>>>>>>> them). ephemeral znodes will be removed when the thrift service > >>>>>>>>>>>> > >>>>>>>>>>> goes > >>>>>>> > >>>>>>>> down > >>>>>>>>>>> > >>>>>>>>>>>> and zookeeper guarantee the atomicity between these > operations. > >>>>>>>>>>>> > >>>>>>>>>>> With > >>>>>>> > >>>>>>>> this > >>>>>>>>>>> > >>>>>>>>>>>> approach we can have a node hierarchy for multiple of > airavata, > >>>>>>>>>>>> orchestrator,appcatalog and gfac thrift services. > >>>>>>>>>>>> > >>>>>>>>>>>> For specifically for gfac we can have different types of > >>>>>>>>>>>> > >>>>>>>>>>> services > >>>> > >>>>> for > >>>>>>> > >>>>>>>> each > >>>>>>>>>>> > >>>>>>>>>>>> provider implementation. This can be achieved by using the > >>>>>>>>>>>> > >>>>>>>>>>> hierarchical > >>>>>>>>>>> > >>>>>>>>>>>> support in zookeeper and providing some logic in gfac-thrift > >>>>>>>>>>>> > >>>>>>>>>>> service > >>>>>>> > >>>>>>>> to > >>>>>>>>>>> > >>>>>>>>>>>> register it to a defined path. Using the same logic > >>>>>>>>>>>> > >>>>>>>>>>> orchestrator > >>>> > >>>>> can > >>>>>>> > >>>>>>>> discover the provider specific gfac thrift service and route > >>>>>>>>>>>> > >>>>>>>>>>> the > >>>> > >>>>> message to > >>>>>>>>>>> > >>>>>>>>>>>> the correct thrift service. > >>>>>>>>>>>> > >>>>>>>>>>>> With this approach I think we simply have write some client > >>>>>>>>>>>> > >>>>>>>>>>> code > >>>> > >>>>> in > >>>>>>> > >>>>>>>> thrift > >>>>>>>>>>> > >>>>>>>>>>>> services and clients and zookeeper server installation can be > >>>>>>>>>>>> > >>>>>>>>>>> done as > >>>>>>> > >>>>>>>> a > >>>>>>>>>>> > >>>>>>>>>>>> separate process and it will be easier to keep the Zookeeper > >>>>>>>>>>>> > >>>>>>>>>>> server > >>>>>>> > >>>>>>>> separate from Airavata because installation of Zookeeper server > >>>>>>>>>>>> > >>>>>>>>>>> little > >>>>>>> > >>>>>>>> complex in production scenario. I think we have to make sure > >>>>>>>>>>>> > >>>>>>>>>>> everything > >>>>>>>>>>> > >>>>>>>>>>>> works fine when there is no Zookeeper running, ex: > >>>>>>>>>>>> > >>>>>>>>>>> enable.zookeeper=false > >>>>>>>>>>> > >>>>>>>>>>>> should works fine and users doesn't have to download and start > >>>>>>>>>>>> > >>>>>>>>>>> zookeeper. > >>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> [1]http://zookeeper.apache.org/ > >>>>>>>>>>>> > >>>>>>>>>>>> Thanks > >>>>>>>>>>>> Lahiru > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> System Analyst Programmer > >>>>>>>>> PTI Lab > >>>>>>>>> Indiana University > >>>>>>>>> > >>>>>>>>> > >>>>>>> -- > >>>>>>> System Analyst Programmer > >>>>>>> PTI Lab > >>>>>>> Indiana University > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> -- > >>>>>> Best Regards, > >>>>>> Shameera Rathnayaka. > >>>>>> > >>>>>> email: shameera AT apache.org , shameerainfo AT gmail.com > >>>>>> Blog : http://shameerarathnayaka.blogspot.com/ > >>>>>> > >>>>>> > >>>>> > >>>>> -- > >>>>> Supun Kamburugamuva > >>>>> Member, Apache Software Foundation; http://www.apache.org > >>>>> E-mail: [email protected]; Mobile: +1 812 369 6762 > >>>>> Blog: http://supunk.blogspot.com > >>>>> > >>>>> > >>>>> > >>>> -- > >>>> System Analyst Programmer > >>>> PTI Lab > >>>> Indiana University > >>>> > >>>> > >>> > >>> -- > >>> Supun Kamburugamuva > >>> Member, Apache Software Foundation; http://www.apache.org > >>> E-mail: [email protected]; Mobile: +1 812 369 6762 > >>> Blog: http://supunk.blogspot.com > >>> > >>> > >>> > >> > > > > > -- > Supun Kamburugamuva > Member, Apache Software Foundation; http://www.apache.org > E-mail: [email protected]; Mobile: +1 812 369 6762 > Blog: http://supunk.blogspot.com > -- System Analyst Programmer PTI Lab Indiana University
