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:

ComponentDescriptionNote
Storage feeĐồng/GB/month, based on actual stored capacityIs 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 feePUT/GET/HEAD/DELETE/LIST charged per requestA web app with many small GETs adds up fast
Lifecycle/classHot storage vs. cold/archive: different costs, and switching classes may carry a feeAffects 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 sync with 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.

ProviderStorage priceEgressRequest feeS3-compatibleLatency highlight
GreenNode (vStorage)From 530đ/GB/monthSee pricing pageSee pricing pageYes6 AZs in Hanoi, HCMC, Bangkok; 20+ regional CDN nodes
VNPT Smart Cloud~900đ/GB/monthNot clearly publishedNot clearly publishedYes (per their site)Domestic Vietnam data center
Viettel Cloud (V-Object)Tiered, pricing not clearly publishedNot clearly publishedNot clearly publishedYes (S3/HTTP)Domestic Vietnam data center
Vietnix S3 Object StorageBASIC: 1,000đ/GB (100GB plan); PRO: ~190đ/GB (500GB); ENTERPRISE: ~90đ/GB (1TB)Claims unlimited on fixed plansUnlimited (on fixed plans)YesVietnam data center
CloudFly~1,000đ/GB/month (monthly plan); 2đ/GB/hour (hourly)Not clearly publishedNot clearly publishedYesVietnam data center
Onie Cloud399đ/GB/month; first 100GB free with an active VM999đ/GBFree uploadsYes (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, immutable for assets with a hash in the filename (bundle.abc123.js)
  • Cache-Control: max-age=3600 for assets that change hourly (product images, thumbnails)
  • ETag or Last-Modified so the CDN/browser can confirm freshness without re-downloading the whole file
  • Content-Encoding: gzip or br if the CDN/proxy supports compression
  • Access-Control-Allow-Origin for 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 --checksum

Step 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

ErrorCommon causeHow to check
403 Signature mismatchWrong secret key, wrong region, or clock skew > 5 minutesCheck server time and endpoint config
403 Access DeniedBucket policy hasn't granted the correct Principal permissionReview the bucket policy and IAM user
CORS errorCORS rules not configured on the new bucketAdd AllowedOrigin, AllowedMethod to the CORS config
Missing GET/HEAD permissionPublic access blocked at the bucket or account levelCheck the Block Public Access setting
Rate limitingToo many requests per second during migrationUse --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:

  1. Hot/cold capacity: how many GB/TB of "hot" data (accessed frequently) and "cold" data (archive/backup)?
  2. Expected egress: estimated GB/TB transferred out per month, and are you using a CDN?
  3. Requests per month: estimated PUT/GET/LIST volume, especially for web apps with many small requests.
  4. Content type: product images, video streaming, PDFs, AI datasets, or backups?
  5. 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.