Let me share more details from our implementation to help your decision. We chose OSS for several strategic reasons beyond just cost:
OSS vs NAS Comparison for ERP Document Storage:
Concurrent Access Performance:
In our testing with 800 concurrent users, OSS consistently delivered better throughput for document retrieval. The key is that OSS is object-based with no file system overhead - each document is independently accessible. We measured average retrieval times of 50-80ms for small files (invoices, POs) and 200-400ms for large files (technical drawings), even during peak loads. NAS performance degraded significantly beyond 300 concurrent connections due to file system locking and NFS protocol overhead.
Multi-Region Architecture:
This is where OSS really shines for your three-region deployment. We implemented:
- Primary OSS bucket in China East (main ERP region)
- Cross-region replication to China North and South buckets
- CloudFront/CDN integration for low-latency access from all regions
- Users automatically routed to nearest bucket replica
With NAS, you’d need to set up NFS mounts across regions over Express Connect, which adds latency and complexity. Or run separate NAS instances with custom replication logic.
Access Control Implementation:
You’re correct that OSS bucket policies aren’t sufficient for complex ERP permissions. Here’s our approach:
- Application-layer authorization: ERP application validates user permissions based on business rules
- STS temporary credentials: After validation, app requests STS token with scope limited to specific document paths
- Time-limited access: Tokens expire after 1 hour, forcing re-authentication
- Audit trail: All access logged through application and OSS access logs
This gives you fine-grained control (down to individual document level) while still leveraging OSS performance and scalability.
Integration Considerations:
For Java-based ERP, the OSS SDK integration is straightforward. We wrapped the SDK in a document service abstraction layer:
- Upload/download methods that handle multipart uploads for large files
- Metadata management (document type, version, owner, etc.) stored in RDS
- Caching layer (Redis) for frequently accessed documents
- Async processing for thumbnail generation and format conversion
The abstraction layer means if you ever need to switch storage backends, you only change one component.
File Type Optimization:
For your mix of small and large files:
- Small files (invoices, POs): Use OSS Standard storage, excellent for frequent access
- Large files (technical drawings): Consider OSS Infrequent Access if they’re rarely accessed after initial creation
- Old documents (>2 years): Lifecycle policy to move to Archive storage automatically
This tiered approach optimized our costs by 60% compared to keeping everything in Standard storage.
Real-World Performance Numbers:
- Average upload time: 150ms for 500KB invoice, 2.5s for 50MB drawing
- Download time: 80ms for small files, 1.8s for large files (with CDN)
- Concurrent user capacity: Successfully tested with 1200+ simultaneous users
- Monthly cost: ¥8,500 for 65TB (using lifecycle policies)
When NAS Might Be Better:
NAS would be preferable if:
- Your ERP requires direct file system access (can’t modify to use object storage APIs)
- Users need to mount storage directly to desktops for heavy editing workflows
- You have applications that need POSIX file locking for concurrent editing
- Your document workflow involves frequent small updates to existing files (OSS requires full object replacement)
For most ERP document attachment scenarios though, these aren’t typical requirements. Documents are usually created once and then read-only.
Our Recommendation:
Go with OSS for your use case. The combination of multi-region support, cost efficiency, and scalability makes it the clear choice for ERP document attachments. The integration effort is well worth it - we completed our implementation in 6 weeks including testing. The key success factors were:
- Good abstraction layer in your application
- Implementing application-layer access control with STS
- Proper lifecycle policies for cost optimization
- CDN integration for multi-region performance
Happy to discuss more specific implementation details if you decide to go the OSS route.