A data storage system comprising: a plurality of host servers, each of which includes at least one processor, wherein a host server of the plurality of host servers is configured to communicate with a plurality of storage nodes over at least one network, wherein at least one storage node, of the plurality of storage nodes (310-1, 310-2,..., 310-N), includes: at least one persistent storage device (340-1, 340-N) and at least one storage controller (320-1, 320-2,..., 320-N), wherein the host server of the plurality of host servers: is executing at least one process that issues data storage read/write requests; includes a memory device forming a cache configured for caching data stored in at least one of the storage nodes; includes a system software component configured to write data corresponding to a write request to at least one remote non-volatile memory device; and includes a distributed virtual array, DVA, sub-system, characterized in that the DVA sub-system comprises computer- executable code which, when executed on the at least one processor, causes said at least one processor to carry out at least one storage processing function, the at least one storage processing function including at least one of: computing a fingerprint of data to be written and storing said fingerprinted data in a selected one of the plurality of storage nodes; compressing data to be written and sending the data in compressed form for storage in at least one of the plurality of storage nodes; computing error-correction data over the data to be written and storing both the data to be written and the computed error-correction in at least one of the plurality of storage nodes; and logging data writes and transmitting corresponding logging information to a log within at least one storage node's storage controller (320-1, 320-2,..., 320-N). a plurality of host servers, each of which includes at least one processor, wherein a host server of the plurality of host servers is configured to communicate with a plurality of storage nodes over at least one network, wherein at least one storage node, of the plurality of storage nodes (310-1, 310-2,..., 310-N), includes: at least one persistent storage device (340-1, 340-N) and at least one storage controller (320-1, 320-2,..., 320-N), at least one persistent storage device (340-1, 340-N) and at least one storage controller (320-1, 320-2,..., 320-N), wherein the host server of the plurality of host servers: is executing at least one process that issues data storage read/write requests; includes a memory device forming a cache configured for caching data stored in at least one of the storage nodes; includes a system software component configured to write data corresponding to a write request to at least one remote non-volatile memory device; and includes a distributed virtual array, DVA, sub-system, characterized in that the DVA sub-system comprises computer- executable code which, when executed on the at least one processor, causes said at least one processor to carry out at least one storage processing function, the at least one storage processing function including at least one of: computing a fingerprint of data to be written and storing said fingerprinted data in a selected one of the plurality of storage nodes; compressing data to be written and sending the data in compressed form for storage in at least one of the plurality of storage nodes; computing error-correction data over the data to be written and storing both the data to be written and the computed error-correction in at least one of the plurality of storage nodes; and logging data writes and transmitting corresponding logging information to a log within at least one storage node's storage controller (320-1, 320-2,..., 320-N). is executing at least one process that issues data storage read/write requests; includes a memory device forming a cache configured for caching data stored in at least one of the storage nodes; includes a system software component configured to write data corresponding to a write request to at least one remote non-volatile memory device; and includes a distributed virtual array, DVA, sub-system, characterized in that the DVA sub-system comprises computer- executable code which, when executed on the at least one processor, causes said at least one processor to carry out at least one storage processing function, the at least one storage processing function including at least one of: computing a fingerprint of data to be written and storing said fingerprinted data in a selected one of the plurality of storage nodes; compressing data to be written and sending the data in compressed form for storage in at least one of the plurality of storage nodes; computing error-correction data over the data to be written and storing both the data to be written and the computed error-correction in at least one of the plurality of storage nodes; and logging data writes and transmitting corresponding logging information to a log within at least one storage node's storage controller (320-1, 320-2,..., 320-N). computing a fingerprint of data to be written and storing said fingerprinted data in a selected one of the plurality of storage nodes; compressing data to be written and sending the data in compressed form for storage in at least one of the plurality of storage nodes; computing error-correction data over the data to be written and storing both the data to be written and the computed error-correction in at least one of the plurality of storage nodes; and logging data writes and transmitting corresponding logging information to a log within at least one storage node's storage controller (320-1, 320-2,..., 320-N).