Берем условный Каталист. У него есть FCGI бек. Он сам разберет то что пришло, отроутит куда надо запрос, предоставит шаблонизатор (который проверит и не даст ошибиться в многих местах), сам пошлет данные обратно. То есть Каталист это такой клей, который за вас сделал рутинную работу. Далее, для упрощения всей архитектуры, бы выкидываем Апатч, в nginx'е настраиваем прокси пасс и сзади ставит каталист (Каталист уже будет не в режиме FCGI, а напрямую читать данные), мы только что убрали одну прослойку за ненадобностью.
Берем условный Mojo (Каталист так не умеет), запросы в базу данных долгие, поэтому в Mojo их можно сделать асинхронными и, пока один запрос отрабатывает в базе этот-же процесс рендерит ответ от предыдущего запроса. Утилизация ресурсов выше. Так-же Mojo умеет в Веб сокеты и долгоживущие коннекты (В FCGI вы этого не сделаете, насколько я помню). Тут и Long Pooling и прочие AJAX технологии. При этом тот-же Mojo довольно быстрый (У него где-то 20-25К RPS на пустом контроллере, точные цифры не скажу, но порядок такой).
Фактически Каталист и прочее - это дальнейшее развитие идеи FCGI, который может больше, лучше и т.д. За это его и берут.