1. A computer-implemented method for distributing data for a distributed filesystem across multiple cloud storage systems, the method comprising: collectively managing the data of the distributed filesystem using two or more cloud controllers, wherein collectively managing the data comprises: upon receiving in a cloud controller new data from a client, sending from the cloud controller an incremental metadata snapshot for the new data, wherein the incremental metadata snapshot is received by the other cloud controllers of the distributed filesystem; storing the data for the distributed filesystem in one or more cloud storage systems, wherein the cloud controllers cache and ensure data consistency for data stored in the cloud storage systems; and sending an incremental data snapshot containing the new data from the cloud controller to a first cloud storage system; and distributing data stored in the distributed filesystem across the first cloud storage system and a second cloud storage system to optimize at least one of performance and cost of the distributed filesystem.