MFU Rsync between 2 servers

I currently have a FreeNas box and I am planning on adding a dedicated front-end server for my websites, vms, and other stuff and I had an idea. What if I set up this new box as sort of a caching server while my current box as the dedicated storage. This is mostly theoretical but I still think it will be fun.

Here is my idea:

  1. Assume the front-end box (F) will have 256 GiB of SSD storage the back-end box (B) will have 8 TiB of spinning rust. Both running ZFS.
  2. I want everything to appear as one unified storage space. I don’t want to worry about mounting either from F or B. I just want to see storage and it all be seamless.
  3. If the data is in both servers, I want it to come from F. If not, I want to pull the data from B to F and serve the user. This should handle kicking non-frequent stuff out when F gets full (or about 80% full because ZFS)
  4. This needs to work over “basic” file sharing protocols. NFS, iSCSI, etc. I want to install as little extra programs as possible.

Now the problems:

  1. How to determine what gets cached?
  2. How to cache it?

I think this has kind of been handled by RedHat with FS-Cache, but I want to know if anybody has experience with anything like this either on BSD, Linux, or otherwise?