What do we mean by “middleware” in distributed systems? Give two examples of middleware communication mechanisms.