09-10-2021 09:35 AM
Hi,
We've created a server-application in LabVIEW that is now running on a Windows-PC. The application is mission-critical and is only visible on the LAN. As we restart each PC/server minimally once per month, this will result in unwanted downtime of the application.
How can we avoid unwanted downtime of our labview-application because of automatic updates.
However we still require patch management.
First I thought of deploying the application to a cRIO or a Linux Server. cRIO and linux has some drawbacks for our application(no SQL Server communication functionality (ODBC, ADO), less storage/performance, less active directory integration). But the main thing is that the system will always be on our company network and although it is linux, it will also require security patching. (And live kernel patching is complex)
Another solution would be to keep working in Windows, and completely rewrite the code so that I can run 2 instances of the application and that we have have high availability and that one can take over from the other.
Do you guys have any smart suggestions?
Thomas.
09-10-2021 10:13 AM
Without seeing your application I would consider a cRIO configuration which would send the data back to a storage application on a PC. The cRIO application could utilize storage on the cRIO if the PC is not available, and then transmit that data once a connection has been re-established. I would also consider putting it on a separate network and having two network cards in the PC (one for the local network and one for the company network), thus keeping it off of the company network but allowing the data to be accessible from and stored on the company network.
09-12-2021 09:38 AM
You don't really specify what you mean with high availability. On one hand you make it look like it is unacceptable that there will be short downtimes because of system restarts that might be caused by software updates to either your application or OS. On the other hand your solution to create two applications that can run alternatingly so you can run the one while updating the second doesn't sound like it would do anything about the OS updates and restarts at all.
And I would guess that if you can guarantee proper functionality of your application, that the downtime caused by having to shutdown your application and restart a new version of it, should be a minor factor compared to having to restart your PC (potentially multiple times) during an OS upgrade. So your proposed solution only fixes a minor aspect of your problem, which makes me wonder how well you have assessed your problem.
If you really need seamless availability of your services you would have to look into dynamic network routing and management with at least one backup hardware system to which you can divert all the traffic while you do maintenance on the other. And then of course also do any necessary data synchronization between the two systems if you have anything stored outside of the database. This is done on large scale in every modern data center nowadays, but it's not easy to setup and neither trivial to operate. It also requires specialized network infrastructure that can do managed data routing.
09-13-2021 03:57 AM
Hi, thanks for the suggestions. I guess I didn't explain my possible suggestions clear enough, as there is a misunderstanding. I dind't want to suggest to run 2 indentical applications on 1 Pc, so that I could update 1 application and leave the other running. I meant to suggest that a 2 complete identical backend-systems are running (PC + software) and that a load-balancer in front of the application is determining to which backend the client-calls are routed. This way, we can take 1 system down for maintenance if we forward all client calls to the 2nd backend.
But this is indeed a very high-end option.
09-13-2021 06:37 AM
does server application imply TCP?
what about running two little rpi's (any small linux box) with keepalived and haproxy? that way if one of the backend servers goes down and even one rpi goes down you're still running....
09-13-2021 09:47 AM - edited 09-13-2021 09:58 AM
@ThomasV wrote:
Hi,
We've created a server-application in LabVIEW that is now running on a Windows-PC. The application is mission-critical and is only visible on the LAN. As we restart each PC/server minimally once per month, this will result in unwanted downtime of the application.
How can we avoid unwanted downtime of our labview-application because of automatic updates.
However we still require patch management.
First I thought of deploying the application to a cRIO or a Linux Server. cRIO and linux has some drawbacks for our application(no SQL Server communication functionality (ODBC, ADO), less storage/performance, less active directory integration). But the main thing is that the system will always be on our company network and although it is linux, it will also require security patching. (And live kernel patching is complex)
Another solution would be to keep working in Windows, and completely rewrite the code so that I can run 2 instances of the application and that we have have high availability and that one can take over from the other.
Do you guys have any smart suggestions?
Thomas.