Platform updates

classic Classic list List threaded Threaded
7 messages Options
luqmanahmad luqmanahmad
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Platform updates

Hi there,

Lets say we have a distributed caching system which needs to be up 99.9% time unless we upgrade the version of ignite. Now let say we have found some bugs and needs to be updated on the production cluster without any downtime.

How do we approach this scenario in ignite ? If we have a cluster, let say 2 nodes, can we stop one node -
 update the jars and repeat the same process on the other node without any downtime ? I might not be thinking straight over here but would be appreciated any help.

Thanks,
Luqman
christos christos
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Platform updates

Luqman, do you want to update the application or the actual Ignite version?

If it's your application Kara then as long as you can manage multiple versions of your app for a phased upgrade then sure. But if it's for Ignite then this is not possible to have 2 different version running in the same cluster. You can do that with GridGain enterprise version though.

Cheers,
C  

> On 4 Aug 2017, at 15:31, luqmanahmad <[hidden email]> wrote:
>
> Hi there,
>
> Lets say we have a distributed caching system which needs to be up 99.9%
> time unless we upgrade the version of ignite. Now let say we have found some
> bugs and needs to be updated on the production cluster without any downtime.
>
> How do we approach this scenario in ignite ? If we have a cluster, let say 2
> nodes, can we stop one node -
> update the jars and repeat the same process on the other node without any
> downtime ? I might not be thinking straight over here but would be
> appreciated any help.
>
> Thanks,
> Luqman
>
>
>
> --
> View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Platform-updates-tp15998.html
> Sent from the Apache Ignite Users mailing list archive at Nabble.com.
luqmanahmad luqmanahmad
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Platform updates

Thanks Christos, it is for the application code. For upgrading the ignite version we can schedule the downtime that's why 99.9% :)
vkulichenko vkulichenko
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Platform updates

Hi Luqman,

It depends on what change you do exactly.

If a change is in data model, then it's best not to deploy these classes on server nodes at all and take advantage of binary object. In this case you don't even need to restart nodes, just start using new schema and it will be picked up transparently.

If a change is in a compute task, you can use peer class loading [1] or dynamic task deployment [2]. Again, no need to restart classes.

If a change is in service, then there is no built in mechanism for now. But you can create a wrapper that will know class name of particular service implementation and get class to create instance during deployment. When service implementation change, you can use rolling upgrade technique.

[1] https://apacheignite.readme.io/docs/zero-deployment
[2] https://apacheignite.readme.io/docs/deployment-spi

-Val
luqmanahmad luqmanahmad
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Platform updates

Thanks Val, that's much more similar to what I was looking for.

With respect to [1] when you say "get class to create instance during deployment" do you mean during the server startup time ?

[1] If a change is in service, then there is no built in mechanism for now. But you can create a wrapper that will know class name of particular service implementation and get class to create instance during deployment. When service implementation change, you can use rolling upgrade technique.
vkulichenko vkulichenko
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Platform updates

Hi Luqman,

I meant the service deployment. Most likely, you will do this in init() method - just call Class.forName() and create the instance of the class.

Makes sense?

-Val
luqmanahmad luqmanahmad
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Platform updates

Hi Val,

Indeed, it does make sense. Thanks for all your help.

- Luqman
Loading...