Что такое midlleware (программное обеспечение среднего уровня), какие задачи оно выполняет и какие реализации возможны?