Congestion is a ubiquitous phenomenon arising in many real life situations like transportation or communication networks. Congestion appears when the offered load to the system approaches or exceeds its capacity, having a very bad impact from performance and economic point of view. It is therefore in this setting of crucial importance to efficiently allocate the resources in order to minimize the performance degradation. In most cases of practical interest, the complexity of the models under consideration makes exact analysis out of reach.