I know there was more than few topic already about Umbraco and Azure but they are either referring to v5, older version of umbraco and recommned depraced (now) accelerators or not really matching my scenario.
Problem:
Installing Umrbaco v.4.10 in multi-web-role (at least 2) Windows Azure environment. The only files that will be updated by editors are media. They will not be updating Razor, XSLT, Templates etc which limits the scope of "file synchronisation" problems.
Current research:
Umbraco v.4.10 work very well on single instance website - had no problem with setup at all.
load balanced guide suggests: "SAN/NAS/Clustered File Server/Network Share" or "File Storage with File Replication" http://our.umbraco.org/wiki/install-and-setup/installing-umbraco-for-load-balanced-environments ; If my understanding is correct first suggesiton is not really any option in Azure, 2nd option could be achieved by some custom code synchronizing media and other files etc. between roles.
I cannot wait to get my hands on Umbraco Concorde, but afaik there is no ETA for release ...
Questions:
In multi server scenario ContinouslyUpdateXmlDiskCache should be set to true, XmlCacheEnable set to false and umbraco.config should be synchronised between server which makes sense. After reading this post http://our.umbraco.org/forum/using/ui-questions/21025-Caching-umbracoconfig-and-umbracoSettingsconfig I would like to know whether there are some limitation to this scenario, like asked by user Bradley : " it does not behave in the same way when something is unpublished or deleted, that is to say, I can still see items on Web 2 (web 1 being the primary admin machine). "
I would really like to continue using in-memory cache in multi server scenario. Is there really now way? E.g. even duplicaiton of cache on each instance? Best case would be to change umbraco cache to use Azure DataCache provider as proper distributed cache? I was thinking about injecting my instance of Azure cache wrapper but because of Cache sealed class, I don't think it's possible or is it? (ANY even crazy idea is highly appriciated)
What exactly is done by distributedCalls? Is it update of umbraco.config and examine index? Anything else?
How media can be saved and displayed from Azure? Is there any way at all to put them into Azure CDN / Blob Storage? I think "microsoft-dpe" accelerator attempted to sync files into blob storage and then back into all instances. Would that be a sensible option? Or should Umbraco Media Save event be handled and then push file into different instances? Do you have any other suggestions? Any file synchronisation between servers could potentially serve (updated)"home page" from server 1, and at almost the same time updated content from server 2 but with broken image as image could not yet be synchronised...
Any suggestions are greatly appriciated, the only thing that I don't want to do is to modify umbraco core source code as that would make any upgrades amazingly difficult. Any (even crazy ideas) how this can be achieved are welcome.
I'm facing the same issues, wish I'd have come here first :)
For my implementation (I believe) I need to use a WebRole because I want to use the Cache Service for other aspects of the site, so that rules out the standard Umbraco Azure Web Site but as you point out that is v5 anyway (correct me if I wrong).
Thanks you for posting on that subject. I'm currently trying to host Umbraco 4.11 in a multi-web-role environment so it will avoid me a lot of research.
Regarding Umbraco limitations that can block you on azure :
Pay attention to Public Access issue mentionned here in your scenario.
There are issue tickets open here and here so why not give them a vote.
Windows Azure Websites use an Azure Drive (XDrive) with some "secret sauce" to share the XDrive in a similar way to how a shared iSCSI would be setup in a normal load balanced environment. For a bit more info on how it works see Windows Azure Web Sites: Under the Hood It would be great if it was possible to share a XDrive between WebRoles but it is not.
So actually Umbraco on Azure Websites utilising Multiple Reserved Instances is close to working and you can follow the standard load balanced setup assuming that iSCSI is in place. There are two issues, the main one being distributedCalls, you can't setup the url's of the servers for Umbraco to Ping on publish, so the memory cache will become stale on Instances that Umbraco wasn't published from. There has been some preliminary work on a core ServerRegistrationService which might provide an API facilitate the population of Instance url's but we will have to wait and see. The second issue is that AWS are limited to 3 Instances as WebRoles have no limit.
Currently if you’re using multiple WebRoles, the deprecated Windows Azure Accelerator for Umbraco is the only way to go. I used this with Umbraco v4.7.2 utilising many Instances and it works very well. I assume it would work with newer versions of Umbraco but some modifications to Accelerator maybe required to exclude the newer temporary folders, but I'm not sure.
I’m really not sure what the future holds for Umbraco multi WebRole deployments as it looks like AWS and Concorde will be the focus.
Last point on media, Umbraco since 4.10 (i think) although only made public in v6 does have an IFileSystemProvider so that you could develop an Azure Blob provider and then all media, css & js could be stored in a specific Azure Blog and served via the Azure CDN. As far as I'm aware there is only currently an Amazon S3 provider POC that Matt did quite a while ago. See here: https://bitbucket.org/mattbrailsford/amazons3filesystem
Can’t wait to see Concorde in full swing this summer!
If by XDrive you speak about Azure Drive, be careful since it didn't allow your to use CDN as Asure Blob Storage do. Azure drive can be mount by multiple webrole instance but only one of them can write (Azure Drive limitation).
Yes, you are right and Umbraco is not keen on running from UNC shares anyway, you really need iSCSI. This is why I wish the "secret sauce" use by AWS was available to WebRoles now. Maybe it will be released one day as Azure iSCSI Drive or something, it would be great!
With regard to the Umbraco Azure Accelerator, the temporary folders/files such as /App_Data/Temp/ are excluded from the synchronisation to the Azure Storage Blob and the instances create them on start-up. So yes, if you alter a css file or add a media file it is synced to the Storage Blob and then to the other Instances.
So although all the Umbraco files are within the storage blob, it's not possible to immediately then add a CDN (if I remember rightly because of the container naming). I guess if you had Umbraco 4.11.x and modified the core to make the IFileSystemProvider public like it is in v6, you could have a secondary Blob for this and a CDN on that.
I forgot to mention that there is a special version of Examine for Azure that you need to use for Multi Instance deployments using the accelerator otherwise you get some intermittent failures http://examine.codeplex.com/releases/view/77362
Azure Drive limitation with multiple writes would require content editors to always use umbraco admin area from single instance...which I'm not sure how can be accomplished.On top of that you would have to mount the drive during startup and create virtual directory in your Cloud Service IIS to point to your drive.
Saving to Blob storage and even adding CDN as suggested by Jeavon seem to be best option. While umbraco IFileSystemProvider is a step in good direction other parts of umbraco are not ready for using "cloud storage".
Apart from making IFileSystemPublic as correctly pointed by Jeavon you also need to update :
* umbraco.Core.IO.IOHelper ResolveUrl and MapPath method - they will attempt to resolve blob URL into URL... which will not end up nicely :)
* Umbraco.Core.IO.MediaFileSystem GetThumbnails method will attempt to get thumbnails from directory which we no longer have. (since thumbnails also need to be stored in Blob storage)
* umbraco.cms.businesslogic.Content DeleteAssociatedMediaFiles method is checking existance of media file using System.IO.File and System.IO.Path again. This should be updated to support blob storage and absolute blob URLs
* TinyMCE configuraiton needs modification "convert_urls", "relative_urls" and "remove_script_host" needs to be set to false.
That means umbraco core needs modification which is quite bad... I don't see any way around it :(
As for Examine on Azure - I've experienced some problems with locking of blobs during update + Examine is not referencing latest versions of Azure SDK (or at least wasn't when I downloaded it) which will cause you problems if you are using latest Azure SDK.
On top of all of that you need to setup proper permissions to folders + enable distributed calls between your instances.
You are right, Azure Drive can't be used with WebRoles yet. We need the "secret sauce" used by Azure Web Sites that allows multiple instances to both read and write to Azure Drive (pretty much the same as a iSCSI drive)
Have you logged all the IO issues you list on http://issues.umbraco.org They are all issues that would affect any implementation of the IFileSystemProvider?
Thanks to the issues list you mentionned and informations you provided on that topic I was able to mount my azure multi webrole infrastructure.
Unfortunately I had to modifiy the version I used to build the infrastructure but it's minor changes and I now have Umbraco 6.1.1 which is running on azure with multiple webroles.
I still have to do some work but I wanted to thanks you both for these informations you share which point me in the right direction.
Umbraco on multi-role Azure
Hi all,
I know there was more than few topic already about Umbraco and Azure but they are either referring to v5, older version of umbraco and recommned depraced (now) accelerators or not really matching my scenario.
Problem:
"AFIK, the accelerator only supports one instance because the Cloud Drive can't be mounted by more than one role at the same time -this is by cloud drive design."
source: http://azureaccelerators.codeplex.com/discussions/245276
"SAN/NAS/Clustered File Server/Network Share" or "File Storage with File Replication"
http://our.umbraco.org/wiki/install-and-setup/installing-umbraco-for-load-balanced-environments ;
If my understanding is correct first suggesiton is not really any option in Azure, 2nd option could be achieved by some custom code synchronizing media and other files etc. between roles.
Questions:
After reading this post http://our.umbraco.org/forum/using/ui-questions/21025-Caching-umbracoconfig-and-umbracoSettingsconfig I would like to know whether there are some limitation to this scenario, like asked by user Bradley :
" it does not behave in the same way when something is unpublished or deleted, that is to say, I can still see items on Web 2 (web 1 being the primary admin machine). "
Any suggestions are greatly appriciated, the only thing that I don't want to do is to modify umbraco core source code as that would make any upgrades amazingly difficult.
Any (even crazy ideas) how this can be achieved are welcome.
Thanks! :)
Hi Lucas,
Any luck with this?
I'm facing the same issues, wish I'd have come here first :)
For my implementation (I believe) I need to use a WebRole because I want to use the Cache Service for other aspects of the site, so that rules out the standard Umbraco Azure Web Site but as you point out that is v5 anyway (correct me if I wrong).
Any help anyone can be would be appreciated.
Thanks
Tim
Hi Lucas,
Thanks you for posting on that subject. I'm currently trying to host Umbraco 4.11 in a multi-web-role environment so it will avoid me a lot of research.
Regarding Umbraco limitations that can block you on azure :
Pay attention to Public Access issue mentionned here in your scenario.
There are issue tickets open here and here so why not give them a vote.
David
Hi Lucas,
Some crazyish thoughts for you:
Windows Azure Websites use an Azure Drive (XDrive) with some "secret sauce" to share the XDrive in a similar way to how a shared iSCSI would be setup in a normal load balanced environment. For a bit more info on how it works see Windows Azure Web Sites: Under the Hood It would be great if it was possible to share a XDrive between WebRoles but it is not.
So actually Umbraco on Azure Websites utilising Multiple Reserved Instances is close to working and you can follow the standard load balanced setup assuming that iSCSI is in place. There are two issues, the main one being distributedCalls, you can't setup the url's of the servers for Umbraco to Ping on publish, so the memory cache will become stale on Instances that Umbraco wasn't published from. There has been some preliminary work on a core ServerRegistrationService which might provide an API facilitate the population of Instance url's but we will have to wait and see. The second issue is that AWS are limited to 3 Instances as WebRoles have no limit.
Currently if you’re using multiple WebRoles, the deprecated Windows Azure Accelerator for Umbraco is the only way to go. I used this with Umbraco v4.7.2 utilising many Instances and it works very well. I assume it would work with newer versions of Umbraco but some modifications to Accelerator maybe required to exclude the newer temporary folders, but I'm not sure.
I’m really not sure what the future holds for Umbraco multi WebRole deployments as it looks like AWS and Concorde will be the focus.
Last point on media, Umbraco since 4.10 (i think) although only made public in v6 does have an IFileSystemProvider so that you could develop an Azure Blob provider and then all media, css & js could be stored in a specific Azure Blog and served via the Azure CDN. As far as I'm aware there is only currently an Amazon S3 provider POC that Matt did quite a while ago. See here: https://bitbucket.org/mattbrailsford/amazons3filesystem
Can’t wait to see Concorde in full swing this summer!
I hope that is in some way helpful!
Thanks,
Jeavon
Hi Jeavon,
If by XDrive you speak about Azure Drive, be careful since it didn't allow your to use CDN as Asure Blob Storage do.
Azure drive can be mount by multiple webrole instance but only one of them can write (Azure Drive limitation).
I found an article that claim multiple webrole writing an azure drive is possible by using smb share:
http://blogs.msdn.com/b/windowsazurestorage/archive/2011/04/16/using-smb-to-share-a-windows-azure-drive-among-multiple-role-instances.aspx
I didn't try it and it seems really painful to put in place.
I agree with you about IFileSystemProvider, so sad that you don't post this yesterday it would have save my time :-D
I've got one question, since you already explored umbraco azure accelerator.
Correct me if I'm wrong :
Does it means that media and App_Data folders are parts of the syncronisation ?
Thanks for your time.
David
Hi David,
Yes, you are right and Umbraco is not keen on running from UNC shares anyway, you really need iSCSI. This is why I wish the "secret sauce" use by AWS was available to WebRoles now. Maybe it will be released one day as Azure iSCSI Drive or something, it would be great!
With regard to the Umbraco Azure Accelerator, the temporary folders/files such as /App_Data/Temp/ are excluded from the synchronisation to the Azure Storage Blob and the instances create them on start-up. So yes, if you alter a css file or add a media file it is synced to the Storage Blob and then to the other Instances.
So although all the Umbraco files are within the storage blob, it's not possible to immediately then add a CDN (if I remember rightly because of the container naming). I guess if you had Umbraco 4.11.x and modified the core to make the IFileSystemProvider public like it is in v6, you could have a secondary Blob for this and a CDN on that.
Regards,
Jeavon
I forgot to mention that there is a special version of Examine for Azure that you need to use for Multi Instance deployments using the accelerator otherwise you get some intermittent failures http://examine.codeplex.com/releases/view/77362
Azure Drive limitation with multiple writes would require content editors to always use umbraco admin area from single instance...which I'm not sure how can be accomplished.On top of that you would have to mount the drive during startup and create virtual directory in your Cloud Service IIS to point to your drive.
Saving to Blob storage and even adding CDN as suggested by Jeavon seem to be best option. While umbraco IFileSystemProvider is a step in good direction other parts of umbraco are not ready for using "cloud storage".
Apart from making IFileSystemPublic as correctly pointed by Jeavon you also need to update :
* umbraco.Core.IO.IOHelper ResolveUrl and MapPath method - they will attempt to resolve blob URL into URL... which will not end up nicely :)
* Umbraco.Core.IO.MediaFileSystem GetThumbnails method will attempt to get thumbnails from directory which we no longer have. (since thumbnails also need to be stored in Blob storage)
* umbraco.cms.businesslogic.Content DeleteAssociatedMediaFiles method is checking existance of media file using System.IO.File and System.IO.Path again. This should be updated to support blob storage and absolute blob URLs
* TinyMCE configuraiton needs modification "convert_urls", "relative_urls" and "remove_script_host" needs to be set to false.
That means umbraco core needs modification which is quite bad... I don't see any way around it :(
As for Examine on Azure - I've experienced some problems with locking of blobs during update + Examine is not referencing latest versions of Azure SDK (or at least wasn't when I downloaded it) which will cause you problems if you are using latest Azure SDK.
On top of all of that you need to setup proper permissions to folders + enable distributed calls between your instances.
Hi Lucas,
You are right, Azure Drive can't be used with WebRoles yet. We need the "secret sauce" used by Azure Web Sites that allows multiple instances to both read and write to Azure Drive (pretty much the same as a iSCSI drive)
Have you logged all the IO issues you list on http://issues.umbraco.org They are all issues that would affect any implementation of the IFileSystemProvider?
Thanks
Jeavon
Hi Jeavon,
I'll log issues this week :)
Regards,
Lucas
Hi Jeavon, Hi Lucas
Thanks to the issues list you mentionned and informations you provided on that topic I was able to mount my azure multi webrole infrastructure.
Unfortunately I had to modifiy the version I used to build the infrastructure but it's minor changes and I now have Umbraco 6.1.1 which is running on azure with multiple webroles.
I still have to do some work but I wanted to thanks you both for these informations you share which point me in the right direction.
Regards
David
Thanks David! Also good work @Lucas for logging those FileSystemProvider issues, please vote up http://issues.umbraco.org/issue/U4-2007
David hi , how u synchronze among web roles ? Thanx.
is working on a reply...