A system for managing an object storage, comprising: a plurality of frontend micro-services programmed to: obtain a request to store data in an object storage, wherein the request to store data in the object storage is received from a computing device; divide the data into slices (310, 320, 330); a plurality of backend micro-services programmed to: obtain the slices; generate a sketch of each slice, wherein the sketch of each slice comprises a bit string that does not uniquely identify the slice; match each slice to a similarity group of a plurality of similarity groups using the respective sketch of each slice; obtain meta-data (162A-162Q) associated with each matched similarity group; add at least a portion of a slice of the slices to a compression region (161A-161P) using the meta-data; and store the compression region in the object storage, wherein the object storage is a persistent storage; a request queue that passes the slices (310, 320, 330) from the frontend micro-services to the backend micro-services, wherein a number of available backend micro-services is dynamically adjusted based on a number of pending slices in the request queue; and a load balancer programmed to: obtain requests to store data in the object storage; distribute the requests to the plurality of frontend micro-services, wherein the system dynamically adjusts a number of available frontend micro-services based on a number of pending requests in the load balancer. a plurality of frontend micro-services programmed to: obtain a request to store data in an object storage, wherein the request to store data in the object storage is received from a computing device; divide the data into slices (310, 320, 330); obtain a request to store data in an object storage, wherein the request to store data in the object storage is received from a computing device; divide the data into slices (310, 320, 330); a plurality of backend micro-services programmed to: obtain the slices; generate a sketch of each slice, wherein the sketch of each slice comprises a bit string that does not uniquely identify the slice; match each slice to a similarity group of a plurality of similarity groups using the respective sketch of each slice; obtain meta-data (162A-162Q) associated with each matched similarity group; add at least a portion of a slice of the slices to a compression region (161A-161P) using the meta-data; and store the compression region in the object storage, wherein the object storage is a persistent storage; obtain the slices; generate a sketch of each slice, wherein the sketch of each slice comprises a bit string that does not uniquely identify the slice; match each slice to a similarity group of a plurality of similarity groups using the respective sketch of each slice; obtain meta-data (162A-162Q) associated with each matched similarity group; add at least a portion of a slice of the slices to a compression region (161A-161P) using the meta-data; and store the compression region in the object storage, wherein the object storage is a persistent storage; a request queue that passes the slices (310, 320, 330) from the frontend micro-services to the backend micro-services, wherein a number of available backend micro-services is dynamically adjusted based on a number of pending slices in the request queue; and a load balancer programmed to: obtain requests to store data in the object storage; distribute the requests to the plurality of frontend micro-services, obtain requests to store data in the object storage; distribute the requests to the plurality of frontend micro-services, wherein the system dynamically adjusts a number of available frontend micro-services based on a number of pending requests in the load balancer.