I apologize in advance if this question may (by necessity) be somewhat broad. I will try my best to keep it in the format of a valid question.
I am currently setting up a backend for serving large amounts of static files (images, to be specific). Overall traffic for the final product is expected to be massive, so scalability and the evasion of all kinds of bottlenecks is a must.
My initial conclusion is that the best approach to doing this is setting up a cluster of virtual servers to handle requests. I will use standard load balancing strategies in order to make sure client requests are distributed equally among nodes in the cluster, so this part is no problem.
The part which is a problem is how to efficiently store the static files themselves on the cluster. We are expecting a very large amount (Terabyte range) of data to be present, and keeping mirrored copies of files on each node is simply not an option.
It would seem that I am essentially left with 2 options:
1) Use a central fileserver which the nodes can make requests to. I find it hard to see how I can stop this server from becoming a bottleneck, however.
2) Use 1) in conjunction with some kind of cache mechanism on the node, in order to avoid redundant requests to the file server.
3) Some other brilliant solution which will save my soul and render 1) and 2) obsolete.
What would be a good strategy to obtain this kind of file distribution, and what software is available to do so?
Thanks a lot in advance!