azuremulti-instance-deployment

Azure- static repository needs reloading


I have a static repository with stores a large XML file structure in memory and is loaded only once in the MVC application. The application is hosted on Azure (Paas) with 2 instances. We have a design tool which is used to add more stuff or remove stuff from this repository. The challenge we find is that once stuff gets added we need to reload the repository by tearing down the repository and re-creating it. This works but leaves a problem that the static repository has been refreshed only on server A and not on server B. If a request goes to server B, the user doesnt see that change as it has not been updated. On;y an IIS reset on both instances fixes the problem. I have tried using Session state to store the repository but as we use as custom Session provider which stores the values in a database table the session_start event is called on every page request causing performance problems. Does anyone out there have a more elegant solution to updating the repository on both servers and using any modern techniques.


Solution

  • Have you considered using an in-role cache to store the repository (of course, persist it as well as you are doing already)?

    You can either use memory from your existing web role, or create a dedicated cache role. The cache will span all of your instances, so you'd be accessing the same data from each instance.

    Taking it one step further: If you're concerned about data loss during a role instance reboot (which would mean some of your data would no longer be in the cache when the instance goes down), you can enable High Availability on the cache namespace. At this point, data is replicated between instances, which lets you survive an instance restart.

    You'll find the co-located (or dedicated) cache setting in the role properties:

    enter image description here