0

When you want to update, migrate or deploy-new-version of a large and/or critical system, absolutely, you can't shutdown the system and do your job, then start it!!! I want to know what's the requirements of designing a system that can be available during update,...? what's the compatibility issues? How clients should be aware of changes?

For example: In updating a new refactored version of a large system that provides services to embedded softwares, the updating all of clients take some months, then how the development team should deal with this sitution?

1

It hugely depends on the type of system, but here are some things to consider.

  1. Hot patching allows your system to continue running while you deploy new features and upgrades. For this to work, you generally need to be working in a functional programming language, since such languages do not hold mutable state variables. Erlang is such a language; hot code deployment is fully supported in Erlang. Lisp has had this feature for ages. Java also supports hot code replacement, but not C#.

  2. Some web application servers like Microsoft Internet Information Server (IIS) and Apache Tomcat have a hot deploy option. In some cases, code is dynamically compiled at execution time. In the case of DLL's, IIS does a shadow copy of the deployed DLL, waits for an opportune time, recycles the app domain, and swaps in the new DLL. The user merely sees a short delay in his web browser while the app domain restarts.

  3. Mechanisms like the Managed Extensibility Framework and Activator.CreateInstance() (techniques specific to the .NET ecosystem) allow you to change out modules and plugins at runtime.

Further Reading
Dynamic Software Updating

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.