A little discussion on Twitter between myself, @BasRaayman, @UltraSub and @esignoretti got me thinking about the evolution of VPLEX and the whole caching thing. It’s something I mentioned on one of my previous VPLEX posts and it could have significant impact on designing and implementing VPLEX solutions. Here’s the conundrum.
First of all, be aware that VPLEX is a write-through device. That means it doesn’t keep I/O in cache and confirm write-completion to the host; it waits until the data is secured on disk before confirming the write success. One the one hand this is a positive thing; the VPLEX clusters contain no data in cache that could become stale or in the event of a failure, not written to disk. In VPLEX-Metro where synchronous cross-site writes are permitted, it also makes sense from a simplicity point of view; everything is on physical disk before the host I/O is confirmed as successful, so there’s no recovery issues to worry about.
However, write through in a heterogenous environment might not be so good. Performance is directly connected to the storage layer. Storage design has to continue as before and two layers of complexity now have to be considered in order to assure best performance. By using the VPLEX layer to achieve replication, we also have a situation where the performance is entirely dependent on the time it takes to write data to the underlying storage supporting the virtual VPLEX LUNs – in all locations. It would be possible to create a very bad configuration with awful performance. It also means that diagnosing performance problems has another layer of complexity to wade through.
The trouble is, the concept of VPLEX effectively leans itself towards the need to have write-through I/O, as VPLEX is enabling multiple I/Os to the same data in multiple locations. If I/O was cached, there would be a significant increase in data inconsistency, if one of the VPLEX devices in the complex was lost, for example.
Of course, other VPLEX-like technology uses write-through or write-back (Hitachi USP V for example). I believe SVC also caches. Are they in a better situation? In some respects they are because USP V and SVC offer additional features like thin provisioning and snapshots, all of which are implemented at the virtualisation layer above the underlying storage.
What is everyone else’s opinion? Will we see more or less complexity with VPLEX?