Как организовать масштабирование/отказоустойчивость интернет-магазина?
Если без значительного переписывания кода:
Вынести БД на отдельный сервер. При росте нагрузки - добавлять сервера и настраивать репликацию между ними.
Сделать отдельный балансировщик - сервер, на который приходят запросы, и который раскидывает их на разные сервера, выполняющие код. При увеличении нагрузки - увеличивать число нод, выполняющих код. Если одна из нод по какой-то причине перестаёт отвечать - остальные продолжают работать. 
Если у вас сессии хранятся в файлах - придётся переносить их хранение в базу/Redis/...
то у хостера родительский сервер упадет
Насколько часто это происходит? В принципе падают все, тут важнее как быстро реагирует поддержка и восстанавливается работа.

то nginx отвалится
Соглашусь с  Сергей Паньков: nginx просто так не отваливается.

то в php количество активных процессов границы достигнет (на ожидании внешних ресурсов повисли).
Если вынести обращения к внешним ресурсам в фон невозможно, то создать отдельный пул php-fpm(возможно несколько: для каждого сервиса свой), который будет отвечать только за обращение к этим внешним ресурсам. Даже если внешний сервис упадёт, то у вас отвалятся только обращения к нему, а сайт продолжит работать.