This is Part 2 of a 3-part series comparing Enterprise Multi-Cloud Object Storage. Read Part 1: High Level Comparison or Part 3: Integration, Strategy, and Business Impact (coming soon).
Storage Performance and Durability
📊 Performance Overview
Aspect AWS S3 Google Cloud Storage Azure Blob First-byte latency ★★★★☆ ★★★☆☆ ★★★★☆ Large-object throughput ★★★★☆ ★★★★★ ★★★★☆ Request scaling ★★★★★ ★★★★☆ ★★★★☆ Consistency model ★★★★★ ★★★★★ ★★★★★
All three platforms deliver high throughput and low latency for object storage, but there are subtle differences:
- AWS S3 and Azure Blob generally exhibit very low latency for data retrieval (tens of milliseconds for first byte in-region)
- Google Cloud Storage (GCS) can have slightly higher first-byte latency in some cases but often provides excellent throughput for large sequential transfers
- All three support HTTP/HTTPS with similar semantics, so raw network performance often depends on network conditions and client proximity to the cloud region
Read/Write Throughput and Scaling
Each platform handles scaling differently:
AWS S3:
- Automatically scales with workload
- Supports at least 3,500 PUT/POST/delete and 5,500 GET requests per second per prefix
- No limits to number of prefixes
- Can handle tens of thousands of requests/sec by spreading keys over different prefixes
- Many real-world S3 deployments easily achieve multi-gigabit throughput
- Mature architecture that partitions buckets as needed to accommodate load
- May experience temporary “slow down” errors during very sudden spikes
Google Cloud Storage:
- Initial capacity: ~1,000 write/delete operations and 5,000 read operations per second
- Automatically detects hot spots and redistributes load across more servers
- Auto-scaling typically occurs within minutes
- Can scale to similar request rates as S3 given a gradual ramp-up
- Internal limit of ~1000 writes per second to the same object name
- Excellent throughput for large streaming reads (capable of saturating 10 Gbps+ on a single TCP stream)
- May experience brief periods of elevated latency when traffic spikes suddenly
Azure Blob Storage:
- Soft limit of 20,000 requests per second per storage account (combined reads/writes)
- Scale further by using multiple storage accounts
- A single block blob can typically handle up to 500 requests/sec or ~60 MiB/sec
- Conservative default limit can be raised by Microsoft on request
- Azure’s network backbone and features like Accelerated Networking ensure well-designed applications can drive blob storage at line-rate
Consistency Models
All three platforms now offer strong read-after-write consistency:
- AWS S3: Strong consistency for all operations since Dec 2020 (historically had eventual consistency)
- Azure Blob: Always strongly consistent – writes are replicated synchronously, so reads immediately reflect changes
- Google Cloud Storage: Strongly consistent for both data and metadata, including bucket listings
This uniformity in consistency simplifies multi-cloud architectures – a job reading recently-written data will behave correctly on any of the platforms.
Durability and Data Protection
All three services are engineered for extremely high durability:
AWS S3 Standard:
- 99.999999999% annual durability (“11 nines”)
- Data stored redundantly across a minimum of three separate Availability Zones
- If you stored 10,000,000 objects, you might expect to lose one object every 10,000 years
- Zero reported data loss events in normal operations (losses typically due to customer error)
Google Cloud Storage:
- 11 nines of durability per year for Standard class
- Stores data across multiple failure domains within region
- Uses erasure coding across zones for redundancy
- Multi-Regional storage class stores data geo-redundantly across at least two regions
Azure Blob Storage:
- 99.999999999% durability for stored data
- Locally Redundant Storage (LRS): Three synchronous copies within primary region
- May keep copies in a single data center (or spread across racks)
- In regions with Availability Zones, copies might be in different zones
- Zone-Redundant Storage (ZRS): Ensures 3 copies are in 3 distinct AZs
- Geo-Redundant Storage (GRS/GZRS): Asynchronously replicates to a secondary region
⚠️ Important Consideration: From a pure durability standpoint, all three platforms are equivalent at 11 nines durability. The difference comes in how many locations those copies span. Azure’s base offering (LRS) might all be in one facility unless you use ZRS, whereas AWS and GCP standard are always multi-facility by default.
Availability SLA and Real-world Uptime
High durability does not always mean high availability:
AWS S3: 99.9% uptime SLA (monthly), though designed for 99.99% availability
- Suffered a well-publicized outage in 2017 (S3 in us-east-1 was down for several hours)
- Credits given if availability dips below 99.9%
Azure Storage:
- 99.9% availability for read/write on LRS/ZRS (hot tier)
- 99% for cool tier
- 99.99% for RA-GRS read access
- Had a Blob storage outage in 2019 affecting a region for several hours
Google Cloud Storage:
- 99.95% monthly uptime target for multi-regional
- 99.9% for regional
- Fewer headline outages, though had a multi-region incident in April 2020
💡 Availability Mitigation Strategies:
- Distribute data across regions/clouds to avoid single points of failure
- Use CDNs and caching to shield users from origin outages
- Design idempotent/retry logic for handling transient errors
Latency Considerations
For most enterprise use cases, latency differences between platforms are minor:
- All can typically deliver the first byte in ~50–150 milliseconds from within the same region
- AWS S3: 100–200 ms first-byte latencies for small objects in typical scenarios
- Google Cloud Storage: Historically showed higher latencies (~38 ms) but has improved significantly
- Azure Blob: When accessed from an Azure VM in the same region, can be very fast (~10 ms TTFB)
For ultra-low latency (single-digit ms), use a CDN or cache layer like Redis in front of object storage.
Performance Takeaway
For large-scale workloads, all three providers offer comparable top-end performance:
- AWS S3: Highly optimized for massive concurrency with the broadest ecosystem of performance tools
- Google Cloud Storage: Often shines in raw throughput per stream and benefits from Google’s global network
- Azure Blob Storage: Strong performance, especially when used with ADLS Gen2 for analytics
None should be a bottleneck for well-designed systems. Other considerations like network egress costs, integration, and management often dominate decision-making once performance is “good enough” on all sides.
📊 Pricing and Cost Analysis
Cost Category AWS S3 Google Cloud Storage Azure Blob Storage (per GB-month) $0.023 $0.020-0.026 $0.0184 (LRS)
$0.023 (ZRS)Volume discounts ✓ ✗ ✓ Reserved capacity ✗ ✗ ✓ Egress (per GB) $0.09 $0.12 $0.087 GET requests (per 1M) $0.40 $0.40 $0.40 PUT requests (per 1M) $5.00 $5.00 $5.00 Free egress/month 100 GB 100 GB 100 GB
Cost is often the decisive factor for storage at scale. Here we compare pricing models including raw storage prices and “hidden” costs.
Storage Pricing (per GB-month)
AWS S3 Standard:
- $0.023 per GB-month for the first 50 TB in most US regions
- Beyond 50 TB: drops to $0.022, then $0.021 at 500+ TB
- Volume tiers automatically reward large customers
- Higher rates in some regions (Asia, South America)
Google Cloud Storage (Standard):
- $0.020 to $0.026 per GB-month, depending on region
- Iowa (us-central1) and South Carolina (us-east1): ~$0.020/GB
- Multi-regional bucket covering whole US: $0.026/GB
- No automatic volume discounts - flat rate regardless of volume
- Large customers can negotiate enterprise discounts separately
Azure Blob Hot:
- $0.0184 per GB-month for first 50 TB with Locally Redundant Storage (East US)
- Beyond 50 TB: drops to $0.0177, etc.
- For Zone-Redundant Storage (ZRS): ~$0.023/GB (comparable to S3)
- Geo-Redundant (GRS): pricier at ~$0.036/GB
- Offers reserved capacity pricing (1 or 3 years) for 15-30% savings
At 1 petabyte scale, cost differences become significant:
- 1 PB on S3: ~$21k/month (tiered down to $0.021 after first 500 TB)
- 1 PB on GCS (regional): ~$20k (at $0.02/GB), or $26k for multi-regional
- 1 PB on Azure: ~$18k on LRS, or ~$23k on ZRS
Data Transfer (Egress) Costs
All three providers charge for outbound data transfer:
AWS S3:
- Data transfer into S3: free
- Transfer out to internet: $0.09 per GB for first 10 TB, then tiered discounts
- 100 GB per month free egress for all customers
- Data from S3 to CloudFront edge: free of charge
- Transfer between S3 and EC2 in same region: free
- Cross-region transfer or to non-AWS locations: charged at internet rates
Google Cloud Storage:
- First 100 GB egress free per month
- Then ~$0.12 per GB for data egress to internet (US region)
- Drops to $0.08/GB at larger volumes
- Egress between regions in same multi-region bucket: not charged
- Egress between certain GCP services and GCS in same region: typically free
- No native “bundled CDN” discount similar to CloudFront
Azure Blob:
- 100 GB/month free internet egress for all customers
- Beyond that: ~$0.087 per GB up to 10 TB, then tiered discounts
- No charge for data transfer between Azure services in same region
- Data from Blob to Azure CDN: free or at cheaper rate
⚠️ Multi-Cloud Warning: Pulling data from one cloud to another can be expensive. Example: copying 10 TB/month from S3 to GCS would cost ~$900 to AWS for egress. To reduce charges, keep data and compute in the same provider when possible.
API Operation Costs
Each platform charges for API requests at fractions of a cent:
AWS S3:
- $0.005 per 1,000 PUT/POST/COPY or LIST requests
- $0.0004 per 1,000 GET or other read requests
- 1 million PUTs = $5, 1 million GETs = $0.40
- Additional charges for select/scan operations and analytics queries
Google Cloud Storage:
- Two-tier operations pricing:
- Class A (data/metadata operations): $0.05 per 10,000 ($5 per million)
- Class B (simple reads): $0.004 per 10,000 ($0.40 per million)
- Each individual API call counted
- No free tier for the first number of requests
Azure Blob:
- Hot tier operations: $0.0005 per 1,000 for writes (~$0.005 per 10k)
- $0.0004 per 1,000 for reads (same as AWS)
- $0.001 per 10,000 for delete operations
- Listing operations: $0.0055 per 1,000
For most enterprises, API costs are a small fraction of storage cost unless dealing with very small objects or extremely frequent access.
Storage Class Tiers and Lifecycle Costs
All providers offer multiple tiers for colder data:
AWS S3:
- S3 Infrequent Access (Standard-IA): $0.0125/GB with $0.01/GB retrieval fee, 30-day minimum
- One Zone-IA: $0.01/GB (1 AZ storage)
- Glacier tiers: $0.004 to $0.00099/GB-month for Deep Archive
- Lifecycle transitions between tiers are free to configure
- Early deletion/retrieval triggers pro-rated charges
Google Cloud Storage:
- Nearline: ~$0.01/GB-month (30-day minimum, $0.01/GB retrieval)
- Coldline: ~$0.004/GB (90-day min, $0.02/GB retrieval)
- Archive: ~$0.0012/GB (365-day min, $0.05/GB retrieval)
- Small operation cost for data retrieval on colder tiers
Azure Blob:
- Cool tier: ~$0.01/GB (30-day minimum, $0.01/GB to read back)
- Archive tier: ~$0.00099/GB with rehydration time and higher retrieval fees
💡 Cold Storage Strategy: For enterprises, colder tiers are great for backups and archives. However, “cold” storage can become expensive if accessed frequently or moved around. Standard (hot) tier is often best for any data that will be actively used or synced multi-cloud.
Reserved Capacity and Commitments
AWS S3 and GCP Cloud Storage do not have public reserved capacity programs. Their discounting comes through:
- Tiered pricing
- Enterprise agreements
- Custom negotiations
Azure explicitly offers Reserved Capacity for Blob:
- Pre-purchase 1-year or 3-year storage amounts
- Get significant discounts (up to ~30% off pay-go rate)
- Use-it-or-lose-it model (pay even if you don’t use it all)
Cost Summary
- Storage prices: Azure LRS has lowest sticker price, but for multi-AZ all three are close ($0.021–$0.023/GB)
- Operations: AWS and Azure are cheapest, GCP similar for most workloads
- Egress: All three charge similar rates (AWS ~$0.09, Azure ~$0.085, GCP ~$0.12 per GB)
- Cold storage: Each provider offers much cheaper options with access costs
- Enterprise discounts: Azure’s reserved capacity can tip scales if used
For a $100K+ budget, optimizing costs could save tens of thousands by choosing the right provider or tier for specific data types.
Operational Considerations
Account Setup and Management
AWS S3:
- Globally unified - create buckets named globally, tied to a region
- No separate “storage account” container required
- Limit of 1000 buckets per account by default (up to 1 million with request)
- Simple management via buckets and IAM policies
- Integrates with AWS Organizations for central governance
Azure Blob:
- Requires creating an Azure Storage Account in a resource group
- Storage account has settings like redundancy and tier
- Container > blob hierarchy
- Account names must be globally unique (form DNS name)
- Multiple containers of different types can be grouped in one account
- Enterprises often use multiple storage accounts for partitioning
- Storage Explorer GUI tool available for management
Google Cloud Storage:
- Create buckets in projects
- No separate storage account object
- Global namespace for bucket names
- Managed via Cloud Console or
gsutil
tool - Supports fine-grained ACLs in addition to IAM
- Default limit of 1,000 buckets per project (can be increased)
Monitoring and Logging
AWS S3:
- Server Access Logs record all requests to another bucket
- CloudTrail data events track API calls for security auditing
- CloudWatch metrics per bucket (bytes, requests, latency, errors)
- Storage Lens provides organization-wide visibility into usage and trends
Google Cloud Storage:
- Access Transparency and Data Access logs via Cloud Audit Logging
- Stackdriver/Cloud Monitoring provides usage metrics
- Storage Insights (preview) analogous to AWS Storage Lens
- Can send bucket event notifications to Pub/Sub
Azure Blob:
- Logs requests through Azure Monitor
- Diagnostic settings can send metrics to Log Analytics or Event Hubs
- Azure Activity Log and Audit logs track management operations
- Object access events can be logged to Azure Log Analytics
- Azure Advisor recommends optimizations
💡 Monitoring Best Practice: Enterprises using all three clouds typically integrate these logs into a unified monitoring system (e.g., Splunk or Datadog) for a single pane of glass view.
Scalability and Namespace Limits
AWS S3:
- Virtually unlimited objects per bucket
- Up to 1 million buckets per account
- Individual object size limit: 5 TB (using multi-part upload)
- No partitioning needed for performance
Google Cloud Storage:
- No hard limit on data or object count per bucket
- 5 TB per object limit (like S3)
- Default limit: 1,000 buckets per project
- Auto-scaling eliminates need for manual partitioning
- Flat namespace with prefix-based organization
Azure Blob:
- Single storage account capacity: up to ~5 PB
- Throughput: 50 Gbps ingress/egress per account
- Container limit: 500 TB (in older docs)
- Storage account limit: 250 per region by default
- Block blob size: up to 200 TB with jumbo block support
- Virtual folder separators (
\
and/
) in blob names
Naming and Versioning:
- All three support object versioning
- Slight differences in allowed characters for names
- Azure container names must be lowercase and follow DNS rules
- S3 and GCS enable versioning per bucket
- Azure enables versioning at storage account level
High Availability and Failover
AWS S3:
- Automatic multi-AZ availability
- No automatic cross-region failover
- Multi-Region Access Points simplify accessing multiple regional buckets
- Manual redirection needed if a region fails
Google Cloud Storage:
- Multi-regional buckets store data across regions
- Automatically serves from nearest/fastest region
- 99.95% availability SLA for multi-regional
- No auto-failover for single-region buckets
Azure Blob Storage:
- LRS may keep copies in a single data center
- ZRS ensures copies in 3 distinct AZs
- GRS replicates to a secondary region (asynchronous)
- RA-GRS allows read access to secondary region
- Customer-initiated account failover available
Support and SLAs
Support Plans:
- All three offer tiered support with 24/7 access at enterprise level
- Technical account managers available for large customers
- AWS and Microsoft known for enterprise-oriented support
- Google’s support has improved but some feel it’s less “high-touch”
Service Level Agreements:
- AWS S3: 99.9% uptime SLA (monthly)
- Azure Storage: 99.9% for read/write on LRS/ZRS (hot tier)
- Google Cloud Storage: 99.95% for multi-regional, 99.9% for regional
Compliance and Certifications:
- All three comply with major standards (ISO, SOC, PCI-DSS, HIPAA, GDPR)
- All offer government cloud regions
- All support customer-managed encryption keys and audit logs
Operational Maturity and Tooling
- AWS S3: Extremely battle-tested with huge community knowledge
- Azure Blob: Strong tooling with Azure Storage Explorer and AzCopy
- Google Cloud Storage: Convenient developer tools like gsutil
Vendor Lock-In Considerations
- Advanced features can create lock-in concerns
- Basic object storage functionality is relatively portable
- Egress cost is a significant barrier to moving petabytes of data
- Regular migration testing helps gauge effort and cost
Sources (Performance, Pricing, Operations)
Pricing & Cost Comparison: Amazon S3 vs Google Cloud Storage vs Azure Pricing Comparison, Exploring S3 Request Pricing, Cloud storage cost wrt moving in same bucket, Azure Blob Storage Pricing, Cloud Storage Data Egress Costs, Data Traffic Costs on Azure Demystified, Azure Bastion pricing, Azure Blob Storage Pricing Guide, When not to use Azure Storage Reserved Capacity, Azure Storage Cost Optimization Part I: Reserved Capacity, GCP Egress Pricing, Bandwidth pricing - Azure, Egress/outbound bandwidth free per month, Estimate Azure Blob Storage costs, Plan and manage costs for Azure Blob Storage, Cloud Storage Pricing Comparison, Azure Blob Storage Tiers Overview
Performance & Scalability: Optimizing Amazon S3 performance, GCS Request rate guidelines, Cloud Storage Performance Comparison, Azure Storage Rate Limit Discussion, Azure Blob Scalability Targets, Azure Blob Parallel Upload Suitability
Reliability & Redundancy: Azure Storage Data Redundancy, Dissecting the S3 SLA, Five Nines Discussion (Hacker News), Azure SLA vs Durability, Azure ZRS PUT Order Guarantee Discussion, S3 Strong Consistency Discussion, Azure GRS vs RA-GRS Read SLA, Understanding GCS 11 9s Durability
Storage Classes & Features: Google Cloud Storage Classes Explained, GCS Backup Discussion, GCS Interoperability, S3 Bucket Restrictions, S3 1 Million Buckets Announcement
Best Practices & Implementation: GCS Storage Operations Discussion, Amazon S3 FAQs