Всё зависит от того, как вам с этими файлами взаимодействовать надо.
У облачных хранилищ, обычно, достаточно специфичные интерфейсы взаимодействия (то есть нужно будет переписывать код, который отвечает за "заливку файла"). Тем более, у Amazon S3.
У CDN в классическом понимании этого слова вообще нет интерфейса для заливки, они выступают кэширующим прокси над вашим ресурсом.
Файлы можно просто сложить на отдельный сервер, настроить их для отдачи файлов (nginx-а хватит), поменять ссылки на сайте на новый сервер.
В базе можно хранить id изображения, к диапазонам id привязать соответствующий сервер. И раздавать картинки с images1.domain.tld, images2.domain.tld и так далее.
Писать в эти стораджи можно по NFS или через gluster (у него есть режим standalone-сервера). Тогда код переписывать не придется, только класть файлы в другие каталоги. А читать файлы пользователи будут уже по ссылкам, ведущим на другой сервер.
Правда, сервер такой может упасть или стать недоступным. Если это беспокоит - то нужно заранее думать, как с этим бороться. В принципе, любой админ вам всё это расскажет.
То есть у вас 2 пути:
1) переписывать код под облачное хранилище (которое может закрыться через несколько лет).
2) найти админа, который поможет вам организовать отдельную отказоустойчивую схему для картинок (если нужна отказоустойчивая). Здесь можно либо по сетевым ФС складывать файлы, либо переписать на заливку файлов POST-запросами на соседний сервер. Из плюсов - никогда не закроется =)
3) если нужен только 1 сервер и сами хотя бы немного админить умеете - выносите на отдельный домен, монтируете по NFS/gluster, пишете через NFS, читаете по http с отдельного домена.