Why isn't "the cheapest price per GB" enough when choosing object storage for a web application? Short answer: once your app has real traffic, egress and request fees usually outweigh raw storage costs by a wide margin. A provider listing 900đ/GB/month but charging 999đ per GB of egress can easily end up more expensive than a provider with a slightly higher storage price, if your application serves millions of GET requests a day.
This article builds a framework you can use to evaluate and decide for yourself: how to calculate real TCO, a latency-reducing architecture built around a CDN, an S3-compatible migration playbook, and a verifiable latency-testing checklist.
What is object storage, and how is it different from file/block storage when optimizing for the web?
Object storage stores data as "objects" inside "buckets," with each object carrying custom metadata and being retrieved over HTTP/HTTPS via a URL. There's no real directory structure, no filesystem mount, no inode — this is the core difference from file storage (NFS/CIFS) and block storage (virtual disks).
For a web application, that means:
- Static files (images, CSS, JS, video, PDFs), AI datasets, logs, and backups are all a good fit for object storage.
- It's not suited for databases that need random writes, or a filesystem shared across multiple processes.
On architecture: when traffic is low and users are concentrated near the data center, you can call the origin object storage directly from the browser. Once traffic grows or users are more spread out, putting a CDN in front as a caching layer becomes essential — the origin should only be hit on a CDN miss. This choice directly affects both your egress costs and end-user latency.
Further reading: Object Storage for Big Data & AI: Architecture, Cost Optimization, and Enterprise Deployment Guide 2026
Criteria for choosing "good pricing + low latency" in Vietnam
1. TCO: it's not just đồng/GB/month
The TCO (Total Cost of Ownership) of object storage has at least 4 components:
| Component | Description | Note |
|---|---|---|
| Storage fee | Đồng/GB/month, based on actual stored capacity | Is there a free tier threshold? |
| Egress fee | Đồng/GB of bandwidth going out (to the internet or another region) | Usually higher than the storage fee |
| Request fee | PUT/GET/HEAD/DELETE/LIST charged per request | A web app with many small GETs adds up fast |
| Lifecycle/class | Hot storage vs. cold/archive: different costs, and switching classes may carry a fee | Affects both egress and retrieval fees |
A note on VAT: most providers in Vietnam add 10% VAT on top of listed prices, so the actual amount you pay may differ. Always check the terms and free-tier thresholds before signing a contract.
2. Latency: data center location matters more than you'd think
Object storage located in Hanoi or Ho Chi Minh City is noticeably faster for local users than a bucket sitting in Singapore or Tokyo, especially for small files (thumbnails, JSON files), since round-trip time makes up most of the total latency. Once a CDN sits in front, the CDN node's location matters more than the origin's — if the CDN has nodes in Hanoi and Ho Chi Minh City, a cache hit delivers under 10ms latency, regardless of where the origin lives.
3. S3 API compatibility
The S3 API (Amazon S3-compatible interface) is the de facto industry standard. If a provider supports S3-compatible access, you can immediately use:
- AWS CLI:
aws s3 cp,aws s3 syncwith a custom--endpoint-url - rclone: a cross-platform sync tool supporting dozens of storage backends
- Popular SDKs: boto3 (Python), the AWS SDK (Java, Go, JS)
- WordPress plugins, Laravel Flysystem, and more
Without S3 compatibility, you have to rewrite your integration code every time you switch providers — a significant hidden cost.
Additional S3 features worth checking: presigned URLs (for direct browser uploads), multipart upload (for large files), versioning, server-side encryption, and CORS policy.
4. SLA and reliability
Metrics to ask any provider about:
- Durability: the data-retention rate, usually stated as "99.999999999%" (11 nines)
- Uptime SLA: 99.9% or 99.99%? 4.4 hours of downtime a year versus 52 minutes makes a real difference for production
- Replication: single-zone or multi-zone? If a zone goes down, is your data still accessible?
- Audit logs: are access/delete logs available for debugging and compliance?
5. Deployment and migration process
The last hidden cost is engineering time. A provider with clear migration documentation, S3 compatibility, and a stable endpoint can cut this time down significantly.
Quick comparison of popular object storage providers in Vietnam
The table below is compiled from public information on each provider's website as of August 2026. Prices exclude VAT, are subject to change, and typically come with conditions attached.
| Provider | Storage price | Egress | Request fee | S3-compatible | Latency highlight |
|---|---|---|---|---|---|
| GreenNode (vStorage) | From 530đ/GB/month | See pricing page | See pricing page | Yes | 6 AZs in Hanoi, HCMC, Bangkok; 20+ regional CDN nodes |
| VNPT Smart Cloud | ~900đ/GB/month | Not clearly published | Not clearly published | Yes (per their site) | Domestic Vietnam data center |
| Viettel Cloud (V-Object) | Tiered, pricing not clearly published | Not clearly published | Not clearly published | Yes (S3/HTTP) | Domestic Vietnam data center |
| Vietnix S3 Object Storage | BASIC: 1,000đ/GB (100GB plan); PRO: ~190đ/GB (500GB); ENTERPRISE: ~90đ/GB (1TB) | Claims unlimited on fixed plans | Unlimited (on fixed plans) | Yes | Vietnam data center |
| CloudFly | ~1,000đ/GB/month (monthly plan); 2đ/GB/hour (hourly) | Not clearly published | Not clearly published | Yes | Vietnam data center |
| Onie Cloud | 399đ/GB/month; first 100GB free with an active VM | 999đ/GB | Free uploads | Yes (S3-compatible) | Vietnam data center, 10Gbps uplink (per their site) |
Important note: actual pricing depends on volume, access pattern (hot vs. cold), CDN cache-hit rate, and specific contract terms. Always request a full price breakdown that includes egress and request fees before deciding.
Source: each provider's official website, accessed August 2026.
Sample pricing and how to calculate your own monthly cost (TCO calculator)
Below are 3 illustrative scenarios. Swap in your own numbers to estimate your cost.
Scenario 1: Small static content website
- Storage: 100GB
- Egress/month: 500GB (e.g., low CDN usage, lots of origin requests)
- GET requests: 5 million/month
Using a sample rate of 530đ/GB storage plus an assumed 200đ/GB egress plus request fees:
Storage: 100 × 530đ = 53,000đ
Egress: 500 × 200đ = 100,000đ
Request costs (if any): added on top, depending on the provider
Takeaway: for a small site with high egress (no CDN), egress cost can run 2–3x storage cost or more.
Scenario 2: 1TB media platform with high traffic
- Storage: 1TB
- Egress/month: 5TB (video streaming, no CDN)
- GET requests: 50 million/month
This is an egress-heavy scenario. At a rate of 999đ/GB egress, 5TB of egress alone comes to 4,995,000đ, while 1TB of storage at 530đ/GB is just 542,720đ. Egress accounts for 90% of the total cost — which is exactly why CDN caching is priority number one for media platforms.
Scenario 3: 10TB backup/cold storage
- Storage: 10TB (archive/cold)
- Egress/month: < 100GB (restores are rare)
- Requests: low
For cold/archive storage, storage cost dominates the bill. If your provider supports lifecycle rules that automatically move objects to a cold class, you can cut storage costs by 30–60% compared to leaving everything in the hot tier.
Using lifecycle rules to optimize cost
A lifecycle rule lets you define something like: "an object untouched for 30 days moves to the cold tier; untouched for 90 days, it moves to archive." This runs entirely automatically with no application code changes needed. Providers with S3-compatible lifecycle support typically use XML syntax similar to AWS S3.
To pick the right class, measure your actual access pattern from storage access logs for at least 2 weeks before configuring lifecycle rules. Don't guess.
How to optimize latency for a web application using object storage
Recommended architecture
Browser → CDN (cache hit: ~5-15ms) → [cache miss] → Origin Object Storage (50-150ms domestically)The basic rule: the CDN acts as the caching layer in front, and the origin object storage only receives a request on a CDN miss. With a 90%+ cache-hit rate on static content (images, CSS, JS), most users get a response from the nearest CDN node in a few tens of milliseconds, independent of origin latency.
GreenNode runs its infrastructure across 6 availability zones in Hanoi, Ho Chi Minh City, and Bangkok, plus 20+ regional CDN nodes, significantly cutting time-to-first-byte for end users in Vietnam without routing outside the region.
Setting the right headers
For the CDN to cache effectively, object storage needs to return the right headers:
Cache-Control: max-age=31536000, immutablefor assets with a hash in the filename (bundle.abc123.js)Cache-Control: max-age=3600for assets that change hourly (product images, thumbnails)ETagorLast-Modifiedso the CDN/browser can confirm freshness without re-downloading the whole fileContent-Encoding: gziporbrif the CDN/proxy supports compressionAccess-Control-Allow-Originfor CORS (required if your web app calls storage from a different domain)
File naming strategy and large uploads
File naming affects cache invalidation: using a content hash in the filename (image.abc123.webp) instead of a timestamp lets the CDN cache longer and reduces revalidation requests.
For large files (> 100MB), use multipart upload: split the file into 5–100MB parts, upload them in parallel, and let object storage reassemble them. This cuts upload time significantly and allows resuming after an interruption.
A practical latency-testing checklist
Before concluding a service is "fast" or "slow," measure against these metrics:
- p95/p99 GET latency from multiple test points inside Vietnam (Hanoi, Ho Chi Minh City, Da Nang): use
curl -w "%{time_total}"or a tool like k6 or Locust - Time-to-first-byte (TTFB) for the CDN versus direct origin: should be at least 50–70% lower on a CDN hit
- Cache hit ratio: most CDNs provide a dashboard for this. Target > 85% for static content
- Before/after CDN comparison: capture p95 TTFB before and after enabling CDN caching to get verifiable numbers
- Actual egress in the first week: monitor traffic from the origin to estimate real cost
A fast migration guide for S3-compatible users (playbook)
The 7-step process
Step 1: Inventory — list every bucket, object, ACL policy, CORS config, and current lifecycle rule. Export your object list along with checksums (MD5/ETag).
Step 2: Create the new bucket — create a bucket on the new provider with the same naming structure. Verify the region/endpoint is correct before syncing.
Step 3: Map ACLs/policies — convert policies from source to destination. Note: JSON policy syntax across S3-compatible providers can differ in some details (Principal, Resource ARN format).
Step 4: Dry run — run aws s3 sync --dryrun or rclone check to see which files would be copied without actually copying them.
Step 5: Incremental sync — copy the data, prioritizing hot data first. Sample commands:
# Using AWS CLI with a custom endpoint
aws s3 sync s3://source-bucket s3://dest-bucket \
--source-region <source-region> \
--endpoint-url https://<destination-endpoint> \
--no-progress
# Using rclone (requires configuring rclone.conf for both remotes)
rclone sync source-remote:bucket dest-remote:bucket --progress --checksumStep 6: Validate checksums — compare the ETag/MD5 of source and destination objects. rclone check does this automatically. With the AWS CLI, use --checksum-algorithm to enable verification.
Step 7: Cut over traffic in phases — switch the DNS/CDN origin or the STORAGE_ENDPOINT environment variable one service at a time, not all at once. Keep the source data around for another 7–14 days after traffic has fully cut over.
Common migration errors checklist
| Error | Common cause | How to check |
|---|---|---|
| 403 Signature mismatch | Wrong secret key, wrong region, or clock skew > 5 minutes | Check server time and endpoint config |
| 403 Access Denied | Bucket policy hasn't granted the correct Principal permission | Review the bucket policy and IAM user |
| CORS error | CORS rules not configured on the new bucket | Add AllowedOrigin, AllowedMethod to the CORS config |
| Missing GET/HEAD permission | Public access blocked at the bucket or account level | Check the Block Public Access setting |
| Rate limiting | Too many requests per second during migration | Use --max-bandwidth in rclone or limit concurrency |
FAQ: which object storage is cheap and low-latency for web apps in Vietnam?
Is picking the cheapest price per GB enough?
No. Storage price is only one part of TCO. For a web app with real traffic, egress and request fees typically make up 60–80% of the total bill. Onie Cloud, for example, lists storage at 399đ/GB but charges 999đ/GB for egress (source: Onie Cloud's website, August 2026). If your application generates significant egress, the real cost will look very different from an estimate based on storage price alone.
What is egress, and how does it affect a web app?
Egress (outbound bandwidth) is data leaving your storage system toward the internet or another system. Every time a user's browser downloads an image, video, or file from object storage, you're charged an egress fee. With a CDN in place, origin egress drops sharply because the CDN caches most requests, and the origin is only called on a cache miss.
What does S3-compatible mean for an application?
S3-compatible means the provider implements Amazon Web Services' S3 API. Applications using the AWS SDK, boto3, or the AWS CLI can connect just by changing the endpoint_url, with no need to rewrite any logic. This is what determines how fast you can integrate and how much engineering cost you incur when switching providers.
How do you reduce latency when using object storage?
Three steps: (1) choose a provider with a domestic data center close to your users, (2) put a CDN in front with the correct cache-control headers, (3) use a content hash in filenames so CDN cache entries don't expire prematurely. This is the most effective architecture for cutting TTFB, typically from 150–300ms down to 10–30ms with a high cache-hit rate.
Do you need lifecycle rules to optimize cost?
Yes, especially for applications storing large volumes of logs, backups, or media archives. A lifecycle rule automatically moves objects to a cold/archive tier after X days without access, cutting storage costs by 30–60% with no code changes. S3-compatible providers typically support AWS-compatible lifecycle XML.
What level of SLA and durability should you expect?
Major providers typically commit to 99.999999999% durability (11 nines), meaning an extremely low probability of data loss thanks to multi-zone replication. Uptime SLAs usually range from 99.9% (up to 8.7 hours of downtime a year) to 99.99% (52 minutes). For production workloads, ask for a specific SLA in writing and understand the compensation mechanism if it's breached.
Get advice on choosing the right configuration for your workload
There's no single "best" configuration for every application. GreenNode Object Storage delivers high-performance object storage with an S3-compatible API, deployed across 6 availability zones in Hanoi, Ho Chi Minh City, and Bangkok — suited to both low-latency web applications and AI pipelines processing large volumes of data.
To recommend the right setup for your specific workload, we need 5 pieces of information:
- Hot/cold capacity: how many GB/TB of "hot" data (accessed frequently) and "cold" data (archive/backup)?
- Expected egress: estimated GB/TB transferred out per month, and are you using a CDN?
- Requests per month: estimated PUT/GET/LIST volume, especially for web apps with many small requests.
- Content type: product images, video streaming, PDFs, AI datasets, or backups?
- Security/compliance requirements: do you need data residency in Vietnam, audit logs, encryption at rest, or industry-specific compliance (finance, healthcare)?
Send us your details through GreenNode's contact page or call our hotline for architecture and cost guidance based on your actual workload. Our technical team in Hanoi and Ho Chi Minh City provides 24/7 support in Vietnamese.
If you're building an AI pipeline or need object storage integrated with Kubernetes and databases, explore GreenNode to see how Object Storage works alongside VKS (managed Kubernetes) and other data services within the same regional architecture.