Try to make it more obvious why we return a channel of backends

Returning a channel allows us to maintain a (read) lock during the entire iteration and does not permit modification of the underlying data. Returning just a copy would not provide visibility into the iteration, leaving a race between the iteration (after the copy) and writes to the original backends map.