In my last blog, (please read this first as it goes into the actual architecture of FlexApp and how it’s different) I said I’d talk about a specific example of why you cannot simply say ‘all layering is the same’. In that write up, I pointed out a number of differences architecturally, but I really want to bring this home and show how these differences matter. My example is with Citrix Provisioning and how Citrix App Layering and FlexApp interact with it.
Citrix Provisioning is a very popular method of provisioning virtual machines especially in enterprise environments. A couple of reasons why is that when deploying a new or updated image, you simply reboot the machines and when the machines are back up, they have the new image. There are no linked clones to copy and push out. In other words, it is extremely quick to push out new and updated images.  The second reason is that virtual machines deployed with Citrix Provisioning use less storage than other methods. The reason for this is that Citrix Provisioning is streaming the image to the virtual machine at a block level. The entire image is not pushed to the end point, only those blocks that are required to boot the image and run the applications. There is a write-cache disk that is typically anywhere from 5gb to 15gb at the high end. Client operating systems take less cache and server workloads, especially RDSH, require a higher cache. The storage savings can be huge. Let’s say you normally deploy a 40gb Windows 10 image and you want to deploy that to 100 virtual machines. That would be about 4tb worth of storage but with Citrix Provisioning, you may only require 10gb per virtual machine and only require 400gb of storage. Pretty big savings.
By its nature, virtual machines provisioned this way are non-persistent. In the past, you would create pools of desktops or servers based on the applications being delivered. This can create many images to manage and that can be very time consuming. Layering can ease this problem by dynamically adding applications to a non-persistent desktop or server at boot or user login. This would allow you to forego creating another image just to host a slightly different set of applications. Less images, less management, more time to get real work done.
The Problem
Citrix App Layering has Elastic Layers as it’s dynamic method of delivering applications. It does work with Citrix Provisioning, but it has a pretty big problem if you do. It can require two or three or more times of storage for the cache disk. Have you ever wondered why your PVS images with Elastic Layering turned on are larger than the same image without it turned on? Here’s the answer: I’m not going to dive into the details here, I’ll let you read it for yourself from the knowledge base here: CTX227454.
To put this simply, if you are using Elastic Layering, you have enabled the App Layering filter driver. The architecture of the product dictates a writable volume which, by default, is 20gb. The filter driver redirects ALL WRITES, not just Elastic Layer writes. Every write, whether it’s a new file or a modification, from the time the machine is powered on, forces the full copy of those files to the writable partition. If the file is part of the image, then it’s a double whammy because now you must cache the entire file down to the write-cache and copy it into the writable partition which, again, goes to the write-cache.
Why isn’t PVS with FlexApp Affected?
FlexApp doesn’t require a separate writable partition and, more importantly, it simply doesn’t redirect the entire Windows file system in regard to writes, it allows Windows and the provisioning mechanism to do their thing. You can look at it as a handoff. The FlexApp filter driver looks to see where the write is coming from and determines who handles the write. If it’s a call from an application in the FlexApp, the driver redirects it to a small cache (a VHD). If it’s anything other than a FlexApp write, then it simply hands that off to the operating system. In the case of PVS, it’s allowing PVS and/or operating system to make the decision on what happens to that call.
Get the Best of Both Worlds
Saying all this, Citrix and Liquidware do have joint customers that use Citrix App Layering for their image management and FlexApp for layering dynamic applications. Simply do not turn on Elastic Layering for the image. This plays to the strengths of each product. Citrix App Layering is, first and foremost, an image management product and FlexApp is application delivery. Combine them and you get the best of both worlds.