Support multiple backends and add alloc backend

can be chan struct{}